Вы находитесь на странице: 1из 33

Initiation au calcul scientifique avec le Langage Matlab

Partie 1

rev 1.2

Formation d’Ingénieurs Par Apprentissage

Opérée par le CESI et l’UPS

Marie-Claude Bordage
Philippe Castelan
Sommaire
I. Introduction ..................................................................................................5
I.1. Objectifs 5
I.2. Moyens 5

II. Algorithmique ..............................................................................................6


II.1. C’est quoi ? 6
II.2. Quels outils ? 6
II.3. Ecrire des programmes Matlab : «scripter» 6

III.Représentation des données avec le langage Matlab ................................7


III.1. Données simples 7
III.2. Variables dimensionnées 7
III.3. Informations sur les variables 8
III.4. Opérateurs 9

IV.Les Instructions Octave de Contrôle de Flux. ............................................9


IV.1. if…else…end - branchement binaire. 10
IV.2. switch / case - branchement multiple. 10
IV.3. while (tant que ...) - boucle. 11
IV.4. for - boucle avec compteur. 11

V. Entrées - Sorties .........................................................................................12


V.1. Saisie de valeur au clavier 12
V.2. Affichage à l’écran 12
V.3. Affichage formaté 12

VI.Algorithmes «de base» ..............................................................................13


VI.1. Commenter ses programmes 13
VI.2. Notion d’incrémentation 13
VI.3. Somme 13
VI.4. Produit 14

VII.Algorithmes «avancés» .............................................................................14


VII.1. Notion de fonction 14
VII.2. Intégration numérique. 15
VII.2.1. Position du problème. 15
VII.2.2. Méthode dite des trapèzes. 16
VII.2.3. Travail à effectuer. 17
VII.3. Calcul de Phi(x). 18
VIII.Méthodes Numériques ............................................................................18
VIII.1.Méthode de Hörner 18
VIII.1.1. Introduction 18
VIII.1.2. Généralisation de la méthode. 20
VIII.1.3. Division d’un polynôme par (x -α ). 20
VIII.1.4. Calcul de la valeur de la dérivée en un point. 21
VIII.1.5. Dérivée généralisée. 22
VIII.2.Interpolation, méthode de Lagrange 24
VIII.2.1. Introduction 24
VIII.2.2. Principe de la méthode 25
VIII.2.3. Méthode de Lagrange 25
VIII.2.4. Variable réduite 28
VIII.2.5. Travail à effectuer. 29
VIII.3.Recherche de racines par méthode itérative. 29
VIII.3.1. Théorie itérative 29
VIII.3.2. Recette de Newton 29
VIII.3.3. Interprétation géométrique 30
VIII.3.4. Convergence 30
VIII.4.Intégration par Simpson 31
VIII.4.1. La méthode 31

Castelan-Bordage! 4
Initiation à l’Algorithmique avec le langage Matlab

I. Introduction
I.1. Objectifs

Ce cours a un triple objectif :


★ L’apprentissage d’une partie du langage Matlab.
Vous verrez ici seulement la partie utile au renforcement des compétences en
algorithmique. Toute la partie matricielle et vectorielle du langage sera introduite
lors des TP en mai/juin prochain. Ne vous étonnez donc pas, si vous avez déjà des
notions du langage Matlab, de voir certains aspects essentiels de ce langage non
abordés.
★ Le rafraîchissement des notions d’algorithmique acquises précédemment.
Vous ne partez en général pas sans connaissances dans le domaine de
l’algorithmique. Toutefois, elles sont souvent, malheureusement, parcellaires. Aussi
jouez le jeu, faites comme si vous ne saviez pas. D’autant que certains de vos
camarades sont, eux, réellement novices en algorithmique.
★ L’apprentissage des méthodes scalaires de base utilisées dans le cadre d’un travail
de recherche ou de développement.
En général, dans ce domaine vos connaissances sont faibles voire inexistantes.
Pourtant, sans le savoir, vous utilisez souvent ces outils. Notez que l’introduction de
nouveaux outils se fera non pas en suivant une progression de compétence en
techniques scientifiques, mais en suivant une progression de compétence en
algorithmique. Il est donc possible que cela vous semble un peu décousu, le fil est
l’algorithmique.
Les exercices se feront sur feuille, le test des algorithmes se fera à la main. L’objectif est
que vous manipuliez ces algorithmes simples de façon à vous les approprier.
Notez que vous pouvez les exécuter avec un ordinateur doté du logiciel Octave et d’un
éditeur (notepad++ par exemple, surtout pas Word ou autre traitement de texte). Ces
logiciels sont disponibles pour Mac et Windows sur le site pcastelan

I.2. Moyens

Cet enseignement comporte deux phases :


★ la première est l’apprentissage d’un langage servant de support à l’algorithmique,
★ la seconde est la mise en pratique sur des thèmes du domaine de l’Electronique lors
de séances de TP.
Pour le langage, notre choix s’est porté sur le langage Matlab (en fait Octave, ce point
sera précisé ultérieurement) pour plusieurs raisons :

Castelan-Bordage! 5
★ Le langage est simple, et surtout vous pouvez réellement tester (alors que des
langages spécialisés en algorithmique ne sont pas, en général, directement
programmable).
★ C’est un langage de très haut niveau. Non pas qu’il soit très complexe (c’est même le
contraire), mais il fait quasi totalement abstraction du matériel et de son
environnement, ce qui facilite l’apprentissage de l’algorithmique.
★ Il est très utilisé dans le milieu industriel.
Vous aurez à votre disposition des fiches langage consultable sur le site web pcastelan et
vos notes de cours. À ce sujet, les transparents ne seront pas distribués. La prise de notes
fait, en effet, partie du processus d’apprentissage.
Pour que le processus d’apprentissage soit efficace, il est impératif de mettre en place une
démarche professionnelle de vérification/consolidation des acquis. Cela se fera par la
réalisation en autonomie (donc à faire tout seul !) d’algorithmes-exercices, mais pas
forcément dans la suite directe des enseignements. Il est bon de laisser passer un peu de
temps de façon à oublier en partie, puis se ré-approprier les savoirs et compétences
acquises.
Dans cette optique, un contrôle du niveau de connaissance sera organisé juste avant le
début des TP en avril/mai sous la forme d’un algorithme-programme à rendre avant le
début des TP.

II. Algorithmique
II.1. C’est quoi ?

C’est une procédure permettant d’accomplir une tâche complexe. Un algorithme


numérique reçoit des données, les traite et produit un résultat.
On peut appliquer la notion d’algorithme à tout et n’importe quoi, par exemple changer
un pneu. Nous préférons en ce cas précis parler de procédure.

II.2. Quels outils ?

Il faut d’abord un langage permettant la description de la méthode, mais aussi des


données traitées.
Les données sont représentées par des variables, les méthodes par des instructions.
Un système exécutant un algorithme doit donc à la fois gérer les variables et les
instructions. On parle de flux de données (datas) et de flux d’instructions.

II.3. Ecrire des programmes Matlab : «scripter»

Un programme en langage Matlab est un fichier texte contenant une suite d’instructions. Il
s’agit en fait, à proprement parler, de scripts. Les programmes Matlab doivent avoir
comme extension ‘.m’.

Castelan-Bordage! 6
Les programmes sont lancés depuis la fenêtre de commande saisissant le nom du script
sans l’extension ‘.m’ et en validant ce qui lance le script. Notez qu’il faut que le dossier
courant de Matlab corresponde au dossier où est enregistré le script.

III. Représentation des données avec le langage Matlab


III.1. Données simples

Une variable est définie par son nom. Techniquement, c’est une étiquette que l’on colle à
une zone de la mémoire de la machine qui exécute l’algorithme. Dans les faits, en langage
Matlab cela importe peu, ce volet matériel n’étant jamais visible (ou presque).
Le nom que l’on donne à une variable doit être signifiant. C’est à dire qu’il aide à
comprendre l’algorithme mis en œuvre.
Il est à noter que Matlab distingue majuscules et minuscules, de même il ne faut pas de
caractères accentués dans les noms Matlab.
Les données peuvent être numériques, alphabétiques, booléennes, ou tout ce que
l’imagination permet de faire !… Elles sont toutes stockées dans des variables. Notez
qu’en langage Matlab il est inutile de :
★ Définir les variables, elles sont en effet crées «à la volée» dans le langage Matlab.
★ De typer les variables : une variable peut contenir n’importe lequel des types de
données suivantes : nombre entier, réel, complexe, booléen, caractère, chaîne de
caractère, vecteur, matrice…
Nos données seront essentiellement numériques, parfois booléennes, rarement
alphabétiques.
La création d’une variable se fait en lui affectant une valeur. L’opérateur d’affectation étant
le symbole = il suffit d’écrire :
a = 3 ;
pour créer la variable a et l’initialiser avec la valeur 3.
Ce mode de fonctionnement peut poser quelques difficultés et dans certains cas, il peut
être utile, malgré tout, de créer la variable avant de l’utiliser. Matlab offre alors deux
commandes pour créer des vecteurs avant leur utilisation. Ce sont les instructions zeros et
ones dont le mode de fonctionnement sera décrit ultérieurement.

III.2. Variables dimensionnées

On appelle vecteur une variable ayant des données dans une seule de ses dimensions. Il y
a des vecteurs qui sont sous forme de ligne et des vecteurs qui sont sous forme de
colonne. Mathématiquement parlant, on parle de vecteur à gauche ou à droite ou encore
de vecteur (pour un vecteur sous forme de colonne) et de vecteur transposé pour les
vecteurs lignes. Ainsi le vecteur :
⇥ ⇤
V = v1 v2 v3 est un vecteur ligne

Castelan-Bordage! 7
2 3
u1
U = 4 u2 5 est un vecteur colonne
v3

Matlab est conçu pour être à même de représenter des vecteurs et matrices de façon
naturelle. Pour ce faire plusieurs conventions ont été arbitrairement choisies par Matlab :
★ Le premier élément d’un vecteur ou d’une matrice est l’élément 1. Il n’y a pas
d’élément numéroté 0.
★ L’accès aux éléments d’une matrice se fait en précisant entre parenthèse le numéro
2
de ligne puis de colonne. Ainsi on accède à l’élément a3 par A(2,3). Le premier
indice est toujours le numéro de ligne.
★ Dans le cas d’un vecteur, il n’est pas nécessaire de préciser les deux indices.
2 3 2 3 2 2 1 3 2 3 2 3 3
a11 a12 a13 [ a11 a12 a13 ] a1 a12 a13
4
A = a21 a22 a32 5 4
= [ a21 a22 a23 ] 5 = 4 4 a21 5 4 a22 5 4 a23 5 5 est une matrice
a31 a32 a33
[ a31 a32 a33 ] a31 a32 a33

Les matrices peuvent contenir tout type de données.


Il ne faut pas confondre les indices et les variables dans le cas d’une variable
dimensionnée. A(1,2) peut contenir 2, mais A(1,2) n’est pas 2. Il ne faut pas confondre les
coordonnées et les données.

A 1 2 3
1 1 2 3
2 4 5 6
3 7 8 9

Matlab ne prévoit pas de limite pour la taille des variables autre que la mémoire
disponible.

III.3. Informations sur les variables

Matlab met à disposition des commandes spécialisées dans la gestion de variables.


★ who : cette commande donne la liste des variables en mémoire. Elle sert surtout au
déboggage des programmes.
★ clear : cette commande efface toutes les variables de la mémoire.
Elle est indispensable à tout programmeur Matlab. Matlab est un langage interprété.
C’est à dire que le code est traduit en code machine au fur et à mesure qu’il est lu
par Matlab en code machine. Il n’y a pas de phase de compilation comme en
langage C. Cela offre une grande souplesse lors du développement, mais a pour
conséquence qu’une fois qu’une variable est créée, elle reste en mémoire, jusqu’à ce
que l’utilisateur quitte Matlab… ou ne l’efface.
Il est possible de spécifier la variable à effacer, par exemple clear a
Il existe une acception clear all qui efface toute la mémoire, y compris les fonctions
chargées en mémoire.

Castelan-Bordage! 8
★ size : cette fonction retourne les dimensions d’une variable. Il n’est pas nécessaire
de conserver quelque part la taille des variables, la fonction size permet d’obtenir le
nombre de lignes et de colonnes qu’une variable comporte. Ainsi : s = size(A) met
dans s(1) le nombre de lignes et dans s(2) le nombre de colonnes.
★ length : cette fonction retourne la plus grande des dimensions d’une variable.
De manière générale, le passage des paramètres à des fonctions s’effectue entre
parenthèses, le passage de paramètres aux commandes s’effectue en les listant juste à la
suite du nom de la commande.

III.4. Opérateurs

Les opérateurs de Matlab sont nombreux et ont leur sens naturel : + pour l’addition, *
pour la multiplication, ^ pour élever à une puissance etc.
Matlab connaît toutes les fonctions mathématiques : sin, cos, exp, log, log10, etc.
Notez que les fonction trigonométriques ont des arguments en radians exclusivement. pi
est une constante prédéfinie de Matlab.
Comme en langage C, les commandes sont interprétées de la droite vers la gauche. Ainsi
on peut écrire :
x = 3*cos( pi/10 )
mais pas :
cos(pi/10)*3 = 3
On ne peut affecter un résultat de calcul à une variable qu’une fois qu’il est terminé. Par
conséquent, l’opérateur d’affectation = est forcément l’instruction la plus à gauche d’une
ligne de commande.
Les opérateurs logiques Matlab sont résumés dans le tableau ci-dessous :

Opérateur et (AND) ou (OR) négation égalité inégalité


logique (NOT)

Ecriture Matlab & | (pipe) ~ (tilde) == ~=

IV. Les Instructions Octave de Contrôle de Flux.


Un algorithme consiste à enchaîner des opérations sur des variables (contenant les
données que l’on traite). On pourrait imaginer décrire chaque action l’une à la suite de
l’autre. Dans les faits, on se rend compte rapidement que certaines opérations ne sont à
effectuer que dans certains cas et que d’autres opérations sont à répéter plusieurs fois.
Pour simplifier la tâche du programmeur, deux types d’instructions servant à aiguiller le
flux des opération sont disponibles.
★ Des instructions permettant une exécution conditionnelle, on parle d’instructions de
branchement ou d’aiguillage.
★ Des instructions permettant une répétition de certaines actions. On parle de boucle,
conditionnelle ou non.
Castelan-Bordage! 9
Matlab comporte 4 instructions de contrôle de flux.

IV.1. if…else…end - branchement binaire.

Il s'agit d’un test binaire qui offre deux aiguillages possibles pour le flux du programme. Il
est possible avec elseif d'augmenter le nombre d'aiguillages, mais dans une première
approche nous éviterons cette instruction.
La syntaxe de l’instruction est :
if ( condition )
séquence d’instructions si la condition est vérifiée…
else
séquence d’instructions la condition n’est pas vérifiée…
end
Dans le cas où la condition est vérifiée (notez qu’elle peut être complexe et utiliser des &,
|, ~ etc.) la séquence d’instruction qui suit immédiatement le if est exécutée, sinon, c’est la
séquence qui suit le else qui l’est.
La présence du else est facultative. Sans else, si la condition n’est pas vérifiée, le
programme continue après le end.
a = b
if ( a == 2 )
! a = 3
end
b = 4*a

IV.2. switch / case - branchement multiple.

Il s'agit de l'aiguillage multiple. Il est possible de construire autant de cas que voulu. Ne
jamais omettre le cas «autrement». La syntaxe est :
switch ( expression )
case { liste de valeurs }, séquence d’instructions…
case { liste de valeurs }, séquence d’instructions…

otherwise, instructions…
end
Il faut qu'il y ait au moins un case. De plus, il est fortement recommandé de mettre un
otherwise.
Si l’expression, qui doit être énumérable —c’est-à-dire que l’on peut lister toutes les
valeurs possibles pour cette expression— correspond à une des valeurs listées dans un
des cases, les instructions liées à ce case sont exécutées.
Notez que les autres instructions liées aux autres cases ne sont pas exécutées.

Castelan-Bordage! 10
Si l’expression donne un résultat ne correspondant à aucun case, ce sont les instructions
liées au otherwise qui sont exécutées.

IV.3. while (tant que ...) - boucle.

Il s’agit d’une boucle conditionnelle. La syntaxe est :


while ( condition )
séquence d’instructions…
end
Tant que la condition, qui peut être complexe, est vérifiée la séquence d’instructions est
exécutée.
Chaque fois que la séquence a été exécutée en entier, la condition est réévaluée. En
conséquence, pour quitter la boucle, il faut que la séquence d’instructions modifie la
condition du while.
Si, la condition n’est pas vérifiée au moins une fois, la séquence d’instructions entre le
while et le end n’est jamais exécutée. Il faut donc initialiser la condition avant la boucle
while pour pouvoir y entrer.

IV.4. for - boucle avec compteur.

Cette boucle répète la séquence comprise dans le corps de la boucle (entre le for et le
end) tant que l’index —qui est une variable que l’on peut utiliser, mais que l’on ne doit
pas modifier— est dans l’intervalle début - fin.
La syntaxe est :
for index = debut : pas : fin
séquence d’instructions…
end
L’index voit sa valeur augmentée du pas après que la séquence d’instructions ait été
exécutée en entier. Si l’index est plus grand que la valeur finale, le programme sort de la
boucle et continue avec l’instruction suivant celle-ci.
Le pas peut être négatif.
Si le choix fait pour les valeurs début, pas et fin sont telles qu’il n’y a pas de valeurs
possible pour l’index, le flux du programme ne parcours pas la boucle. Exemple :
for k=3:1:1
! x(k) = k
end
k est initialisé à 3. La boucle est parcourue par pas de 1 jusqu’à 1 en partant de 3... ce qui
est impossible, en conséquence la boucle n’est jamais parcourue.

Castelan-Bordage! 11
V. Entrées - Sorties
V.1. Saisie de valeur au clavier

Matlab offre de nombreuses fonctions pour la saisie de valeurs. La plus simple est la
fonction input. Sa syntaxe est :
a=input('Entrez a : ')

Elle provoque l’affichage du message «Entrez a :» puis attend la saisie d’une valeur. La
saisie est validée par la touche ENTREE du clavier. La valeur saisie est stockée dans la
variable a.

V.2. Affichage à l’écran

Par défaut, tout ce qui produit un résultat est affiché à l’écran.


Ainsi :
a = 3
provoque l’affichage à l’écran du message :
>a=3

Pour éviter l’affichage de chaque opération dans le programme (ce qui peut être utile
pour suivre son exécution dans le cadre d’un déboggage par exemple), il suffit de faire
suivre l’instruction d’un point-virgule «;».
Ainsi :
a = 5 ;
fait que la variable a contient 5, mais ne produit aucun écho à l’écran.

V.3. Affichage formaté

Il est possible d’avoir un affichage plus sophistiqué à l’aide de l’instruction sprintf.


La syntaxe de sprintf est la suivante :
sprintf( ‘chaine de format’, liste de variables)
Notez que la chaine de format est entre guillemets simples.
La chaine de format contient du texte ou des champs.
Les champs possibles sont %f (affiche comme un nombre réel) %d (affiche comme un
nombre entier), %s (affiche comme une chaine de caractères).
La chaine de format peut contenir les caractères ‘\n’ pour provoquer un passage à la ligne,
ou ‘\t’ pour provoquer le passage à la marque de tabulation suivante.
Exemple :
a = 1 ;
sprintf('%f\n',a)
1.000000

Castelan-Bordage! 12
VI. Algorithmes «de base»
VI.1. Commenter ses programmes

Rapidement les algorithmes deviennent longs et complexes. Il est alors nécessaire de les
commenter pour faciliter leur lecture et relectures par soi même ou par des collègues.
Matlab indique qu’une partie d’un programme est un commentaire, et ne doit donc pas
être interprétée, en faisant précéder d’un % la phrase commentant une partie de
l’algorithme.
Le caractère % bloque l’interprétation jusqu’à la fin de la ligne. Il peut utilisé pour
neutraliser temporairement certaines parties de l’algorithme.

VI.2. Notion d’incrémentation

Incrémenter une variable c’est l’augmenter de un. Il y a plusieurs façons d’incrémenter une
variable, par exemple :
x = x + 1
% On calcule x+1, et on affecte ce résultat à x.
% Ce n’est pas une égalité mathématique mais une instruction
% du langage Matlab !
x++ % réalise la même chose que ci-dessus.

Décrémentation…
x = x - 1
x--
% idem, mais x est diminuée d’un.

VI.3. Somme

On se propose d’écrire un programme qui calcule la valeur moyenne d’une suite de


nombres saisis au clavier. On rappelle que :
N
1 X
X= Xk
N
k=1

L’écriture de ce programme suppose que l’on sache calculer la somme de N nombres.


L’algorithme permettant ce calcul est assez simple, il est basé sur l’utilisation d’un
accumulateur.
Un accumulateur est une variable à laquelle on rajoute les valeurs à sommer. Bien
entendu pour que le résultat soit correct, il faut qu’il n’y ait pas de décalage au départ (pas
d’offset... puisque nous sommes des électroniciens !). L'algorithme prévoit donc
l’initialisation de l’accumulateur.
L’algorithme d’une somme est donc :
A = 0 ; % A est l’accumulateur
Pour tous les X
! A = A + Xk
fin

Castelan-Bordage! 13
Exercice 1 : Ecrivez un programme Matlab qui :

• Saisisse le nombre de valeurs à saisir


• Saisisse les valeurs dans un vecteur
• Calcule la somme de ces valeurs
• Affiche la moyenne des valeurs saisies.
On procèdera en deux étapes, d’abord avec deux boucles séparées, puis avec une seule
boucle.
• Complétez le programme pour qu’il accepte un nombre quelconque de valeurs. La
saisie étant close par la saisie d’une valeur négative.

VI.4. Produit
On définit la fonction factorielle par :
N
Y
N! = k = 1 ⇤ 2 ⇤ 3··· ⇤ N
k=1

Exercice 2 : Ecrivez un programme Matlab qui :

• Saisisse la valeur dont on veut calculer la factorielle.


• Calcule et affiche la valeur de la factorielle de ce nombre à l’aide d’une boucle.

VII. Algorithmes «avancés»


VII.1. Notion de fonction

Lorsqu’un programme devient complexe, il y a intérêt à écrire des fonctions. L’utilisation


de fonctions permet de rendre le code plus lisible, plus synthétique, ce qui permet de
monter en niveau d’abstraction.
Matlab est un langage de scripts. Aussi chaque fonction est-elle un script autonome.
L’avantage de la méthode est qu’elle permet une réutilisation large des fonctions écrites
par n’importe quel script, le défaut est qu’elle multiplie les fichiers et qu’il faut prendre
soin à gérer les chemins d’accès aux fichiers.
La grande majorité des fonctions Matlab est ainsi écrite en Matlab…
Une fonction est un programme autonome, qui porte un nom unique et qui accepte des
paramètres en entrée pour produire des résultats en sortie.
Une fonction peut avoir ses propres variables, on dit qu’elles sont locales, c’est-à-dire
qu’elles n’existent que le temps de l’exécution de la fonction. Il est possible, mais nous
n’en parlerons pas, d’avoir des variables connues de toutes les fonctions, on parle de
variables globales.
Il faut bien comprendre que la conséquence de ce mode de fonctionnement est qu’il n’y a
pas de programme Matlab qui soit monolithique. Ce serait une erreur que de programmer
ainsi en Matlab.

Castelan-Bordage! 14
Nom de la fonction
Paramètres…
Variables locales…

Corps de la fonction…
! séquence d’instructions Variables de sortie…

Schéma du flux de données et d’instructions au sein d’une fonction


Pour faire qu’un script soit une fonction Matlab il suffit de donner un format particulier à la
première ligne du script :
function [ liste des variables de sortie ] = Nom_de_la_Fonction ( liste des paramètres )
Il ne faut évidement pas inclure d’instruction d’effacement des variables dans une
fonction, sous peine d’effacer les paramètres transmis…
L’exemple ci-dessous (fonction Puiss.m) montre l’utilisation d’une fonction. On appelle
une fonction par son nom et on précise les variables d’entrée (qui seront les paramètres
de la fonction) ainsi que les variables de sortie.

Script d’appel Fonction

X = input(‘Entrez X : ‘) ; function [ S, T ] = Puiss ( W )


[ X2, X3 ] = Puiss( X ) ; % Appel de la fonction S = W*W ;
sprintf(‘Le carre de %f vaut %f\n’, X, X2 ) T=S*W;
sprintf(‘Le cube de %f vaut %f\n’, X, X3 )

VII.2. Intégration numérique.


VII.2.1.Position du problème.
On cherche à estimer numériquement la valeur de l’intégrale :
b
I= f (x)dx
a

De nombreuses raisons font que l’on est amené à estimer numériquement la valeur d’une
intégrale plutôt que de la calculer directement. La complexité du calcul littéral (voire son
x2
impossibilité : essayez de déterminer la primitive de la fonction f (x) = e 2 par exemple)
ou le fait de ne connaître la fonction que par le biais de ses points.
Il y a différentes manières d’estimer cette surface. Nous ne présenterons ici que le cas où
l’on connait les valeurs que prend la fonction f(x) sur des points répartis régulièrement sur
un intervalle.
Le problème est ancien et, avant l’arrivée des ordinateurs, on évaluait les intégrales par
exemple en traçant la courbe sur du papier millimétré et en comptant le nombre de

Castelan-Bordage! 15
carreaux ou encore en découpant la courbe tracée et en pesant le poids de papier1
correspondant.
➡ Remarque : on est parfois amené à intégrer non pour avoir la valeur de l’intégrale mais pour
lisser un signal
➡ Remarque : il est possible de déterminer la fonction primitive F(x) d’une fonction en
calculant des intégrales successives :
x0 x1 xn
F (x0 ) = f (t)dt, F (x1 ) = f (t)dt, . . . , F (xn ) = f (t)dt
0 0 0

VII.2.2.Méthode dite des trapèzes.


Soit un échantillon de 4 points { {X1, f(X1)=Y1}, … {X4, f(X4)=Y4} }, on désire approcher la
valeur de la surface sous la courbe f(X) connue par la valeur qu’elle prend en certains
points (carrés rouges de la figure ci-dessous).

Y2 Y4

1.8

Y1
1.6

Y3

1.4

1.2

Zone1 Zone2 Zone3


0.8
1 1.5 2 2.5 3 3.5 4

X1 X2 X3 X4

La méthode des trapèzes consiste à remplacer la courbe entre deux points successifs par
un segment de droite.
La surface de la Zone1 est celle d’un trapèze, c’est-à-dire la moitié de celle d'un rectangle
de longueur (Y1+Y2) et de largeur (X2-X1) :
(Y1 + Y2 )(X2 X1 )
S=
2
Il en va de même pour les zones 2 et 3. La surface totale peut donc être approchée par :
(Y1 + Y2 ) ⇥ (X2 X1 ) (Y2 + Y3 ) ⇥ (X3 X2 ) (Y3 + Y4 ) ⇥ (X4 X3 )
Stotale = + +
2 2 2
Si les points sont régulièrement espacés d’un pas h constant :
Xk+1 = X1 + kh 8 k 2 [0; 3]

(Y2 + Y1 ) h (Y3 + Y2 ) h (Y4 + Y3 ) h h


Stotale = + + = (Y1 + 2Y2 + 2Y3 + Y4 )
2 2 2 2

1 Connaissant le poids au mètre-carré du papier, on obtient la surface par une simple règle de trois…

Castelan-Bordage! 16
On encore :
⌅ 3

X4
h ⇤
I= f (x)dx Y1 + Y4 + 2 Yk
X1 2
k=2

Et de manière générale, pour n+1 points, on aura :


⌅ n 1

Xn
h ⇤
I= f (x)dx Y0 + Yn + 2 Yk
X0 2
k=1

En observant la figure ci-dessus, on constate que l’approximation sous-évalue la surface


en Zone1, l’approche d’assez près en Zone2, et la sur-évalue en Zone3.
Suivant la concavité de la zone, on commettra une erreur dans un sens ou dans l’autre. On
peut penser résoudre partiellement le problème en diminuant le pas h, mais outre le fait
que cela va rallonger le calcul et que ce n’est pas toujours possible, la méthode ne
donnera jamais un résultat exact si la concavité est constante. Ainsi, si la courbe a une
concavité vers le bas, la surface sera toujours sous-évaluée, et si la courbe a une concavité,
vers le haut la surface sera toujours sur-évaluée. Cette erreur est inhérente à la méthode
mais elle est généralement acceptable.
VII.2.3.Travail à effectuer.
On se propose d’écrire un programme qui, utilisant la méthode des trapèzes, calcule la
valeur moyenne d’un signal quelconque stocké dans un vecteur.
Pour ce faire, on écrira une fonction qui aura les paramètres suivants : un vecteur-signal, la
durée du signal en secondes.
Par ailleurs, il sera fait l’hypothèse qu’une seule période du signal est transmise à la
fonction.
On rappelle que :
Z T
1
X= X(t)dt
T 0

Exercice 3 :

• Ecrire une fonction qui calcule la somme suivante, la première ligne de la fonction
sera : function [ S ] = somme( X, Y )
Z XN
S= Y (x)dx
X1

• Ecrire un script qui calcule la valeur moyenne d’un signal sinusoïdal redressé double
alternance d’amplitude crête 400V en utilisant la fonction somme.

Castelan-Bordage! 17
VII.3. Calcul de Phi(x).

Un polynôme de degré n admet n racines. Il est possible d’écrire un polynôme sous trois
formes :
★ Factorisée : P (x) = K(x ↵1 )(x ↵2 ) . . . (x ↵n )

★ Canonique croissante P (x) = a0 + a1 x + a2 x2 + · · · + an 1x


n 1
+ an xn

★ Canonique décroissante P (x) = a0 xn + a1 xn 1


+ a2 xn 2
+ · · · + an 1 x + an

où les αi sont les racines du polynôme. Les coefficients du polynôme sous forme
canonique se calculent en développant la forme factorisée. Notez que quelle que soit la
forme choisie, pour un polynôme de degré n, il y a n+1 coefficients.

Exercice 4 :
On se propose de calculer la valeur d’un polynôme connu par ses racines. Pour ce faire
vous écrirez un programme qui :

• réalise les saisies adéquates,


• calcule la valeur du polynôme et l’affiche.

VIII.Méthodes Numériques

VIII.1. Méthode de Hörner


VIII.1.1.Introduction
La forme générale des polynômes n’est pas la forme factorisée. En général, on ne connaît
pas les racines. Un grand nombre de méthodes numériques sont d’ailleurs dévolues à la
recherche et au calcul des racines.
On pourrait penser que le calcul de la valeur d’un polynôme connu sous forme canonique
est une chose simple et sans importance particulière d’un point de vue algorithmique. Il
n’en n’est rien. Pour faire comprendre le problème posé, on définit la notion de coût d’un
calcul.
On classifie ainsi les opérations en terme de temps mis pour être exécutées par le
processeur de l’ordinateur.

Nom de l’opération Coût Classification


Affectation environ un cycle processeur faible
Addition / soustraction environ un cycle processeur faible
Opérations booléennes / environ un cycle processeur faible
comparaison
Multiplication / division quelques dizaines de cycles modéré
fonctions complexes quelques centaines de cycles élevé
(sin, cos, exponentiation, etc.)

Castelan-Bordage! 18
À l’aide ce ce tableau, il est possible d’évaluer le coût approximatif d’un algorithme. Il est
évident que plus le coût est faible, plus l’algorithme est rapide.
Par ailleurs, un algorithme à faible coût est un algorithme qui minimise le nombre
d’opérations à effectuer pour obtenir le résultat.
Or, chaque calcul est systématiquement entaché d’une erreur (erreurs d’arrondi, de
codage…). Par conséquent, moins un calcul comporte d’opérations, autrement dit plus il
est rapide, plus il est précis.
Prenons le cas du calcul de la valeur d’un polynôme de degré 4 noté en convention
canonique décroissante : P(x)=2x4+3x3-2x2+7x-3.
Faisons l’hypothèse d’utiliser un processeur tel que le coût des opérations soit le suivant :

Type d’opération Coût (en cycles)


Faible 1
Modéré 10
Elevé 300

Terme 2* x4 + 3* x3 - 2* x2 + 7*x -3 Total

Coût 10 300 1 10 300 1 10 300 1 10 1 944

On constate aisément que le coût du calcul est dû aux opérations à coût élevé. Si l’on
remplace ces opérations par des multiplications x4 = x*x*x*x on obtient un coût bien
moindre qui se résume dans le tableau ci-dessous.

Terme 2* x4 + 3* x3 - 2* x2 + 7*x -3 Total

Coût 10 30 1 10 20 1 10 10 1 10 1 104

Ce coût est bien moindre, mais il reste élevé.


Hörner propose une méthode de calcul du polynôme basée sur une utilisation des calculs
intermédiaires du calcul de la puissance. En effet x4 = x*x3 = x*x*x2 = x*x*x*x. A partir de
ce constat et en ré-écrivant le polynôme sous la forme :
P(x) = ( ( ( 2*x+3 )*x - 2 ) *x + 7 )*x -3
Le coût est de :

Terme ( ( ( 2*x +3 )*x -2 )*x +7 )*x -3 Total

Coût 10 1 10 1 10 1 10 1 44

Par rapport à la méthode de calcul initiale, le gain est de 2145%, par rapport à la seconde
méthode le gain est de 236 %
On constate que dans ces algorithmes, le coût des opérations à faible coût est
négligeable... En général, leur coût est simplement négligé.

Castelan-Bordage! 19
VIII.1.2.Généralisation de la méthode.
En reprenant l’exemple ci-dessus :
P(x) = ( ( ( ( 2 *α + 3 ) *α -2 ) *α + 7 ) *α -3 )

b0 ↓
b1 ↓
b2 ↓
b3 ↓
b4
b0 b1=b0*α+3 b2 = b1*α-2 b3 = b2*α+7 b4 = b3* α-3
L’algorithme général de calcul peut, en se basant sur l’exemple ci-dessus s’écrire lorsque
l’on veut calculer la valeur prise, en un point α, par un polynôme de degré n noté en
convention canonique décroissante : P(x) = a0xn + a1xn-1 + … + an-1x+an
b0 = a0
Pour les termes allant du rang 1 au rang n
! bk = bk-1 * α + ak
fin
➡ Notez que dans le cas où l’on n’a pas besoin des bk le calcul peut être mené avec une
variable simple.
➡ Attention à la numérotation !

Exercice 5 :

• Ecrivez un programme en Matlab qui saisisse les coefficients d’un polynôme P(x) de
degré quelconque et calcule la valeur qu’il prend en un point α dont vous ferez saisir
la valeur.

VIII.1.3.Division d’un polynôme par (x -α ).


On est très souvent amené à diviser des polynômes entre eux. Par exemple en
électronique, les fonctions de transfert sont des fractions polynomiales. Pour être à même
de réaliser physiquement un circuit complexe, on est conduit à décomposer ces fractions
en éléments simples que l'on sait transposer en termes de circuit électrique.
Si l'on note Pn(x) le polynôme à diviser et Qn-1(x) le polynôme quotient et R le reste de la
division, alors on peut écrire Pn(x) sous la forme :
Pn (x) = (x )Qn 1 (x) +R

Notez que si Pn(x) est de degré n, alors Qn-1(x) est de degré n-1.
Posons :
Pn (x) = a0 xn + a1 xn 1
+ a2 xn 2
+ · · · + an 2x
2
+ an 1x + an

et

1 (x) = b0 xn + b1 xn + b2 xn + · · · + bn + bn + bn
1 2 3 2
Qn 3x 2x 1

Castelan-Bordage! 20
Par identification, il est possible d’écrire :

Pn (x) = (x )Qn 1 (x) + R = (x ) b0 xn 1
+ b1 xn 2
+ b2 xn 3
+ · · · + bn 3x
2
+ bn 2x + bn 1 +R

Notez que cette écriture fait clairement apparaître que R = Pn(α)


L'égalité s'écrit sans hypothèse sur x, elle est donc vraie pour tout x appartenant à R .
Ceci conduit à une infinité d'équations, la seule solution possible est que les coefficients
de puissance égale soient égaux.
En développant le terme de droite et en identifiant terme à terme les coefficients de
puissance égale de part et d'autre de l'égalité, il vient :
a0 = b0
a1 = b1 b0
a2 = b2 b1
..
.
ak = bk bk 1
..
.
an 1 = bn 1 bn 2
an = R bn 1

Or, ce sont les bk dont nous cherchons les valeurs, ce qui conduit à :
b0 = a0
b1 = b0 + a1
b2 = b1 + a2
..
.
bk = bk 1 + ak
..
.
bn 1 = bn 2 + an 1
R = bn 1 + an = bn

On reconnaît le schéma de Hörner. Cette fois, à la différence du calcul de la valeur du


polynôme, on cherche à connaître les bk, ce qui conduit à ne pas tout calculer avec une
seule variable. Lorsque l'on programme, on utilise donc une variable dimensionnée pour
les bk.
Notez que pour simplifier l'écriture du programme, on pose bn = R.
Les coefficients b0 à bn-1 sont les coefficients du polynôme quotient Qn-1(x) et bn le reste de
la division.
VIII.1.4.Calcul de la valeur de la dérivée en un point.
Considérons un polynôme de degré n : Pn(x). Il est possible de le diviser par (x-α) :
Pn (x) = (x )Pn 1 (x) + Rn avec Rn = Pn ( )

De même il est possible de diviser Pn-1(x) :


Pn 1 (x) = (x )Pn 2 (x) + Rn 1

Castelan-Bordage! 21
En remplaçant Pn-1(x) par sa valeur calculée ci-dessus, il vient :

Pn (x) = (x ) (x )Pn 2 (x) + Rn 1 + Pn ( )

soit :
Pn (x) Pn ( )
= (x )Pn 2 (x) + Rn 1
(x )

En passant à la limite :
Pn (x) Pn ( )
lim = lim (x )Pn 2 (x) + Rn 1 = Rn 1
x⇥ (x ) x⇥

Il est donc possible de calculer la valeur de la dérivée d'un polynôme en enchaînant deux
schémas de Hörner. Par exemple avec P3(x) = x3-2x2-x-5, si l'on veut la dérivée en α = 2.
! P3(x)! P3(2)! P'3(2)
! 1! 1! 1
! -2! 1*2-2 = 0! 1*2+0 = 2
! -1! 0*2-1 = -1! 2*2-1 = 3
! -5! -1*2-5 = -7!
Comme on divise Pn-1(x) pour avoir la dérivée, le calcul pour avoir la valeur du reste de la
division de Pn-1 ne concerne que les n-1 premiers termes.
VIII.1.5.Dérivée généralisée.
En divisant chaque polynôme quotient de la même manière que pour la dérivée, on peut
écrire :
Pn (x) = (x )Pn 1 (x) + Rn
Pn 1 (x) = (x )Pn 2 (x) + Rn 1
..
.
Pn i (x) = (x )Pn i 1 (x) + Rn i
..
.
P1 (x) = (x )P0 (x) + R1
P0 = R 0

d'où, en remontant le système et en remplaçant P0 par sa valeur dans l’expression de P1(x)


ci-dessus, et ainsi de suite dans P2(x) etc., il vient :
P1 (x) = (x )R0 + R1
P2 (x) = (x )2 R0 + (x )R1 + R2
P3 (x) = (x )3 R0 + (x )2 R1 + (x )R2 + R3
..
.
Pn (x) = (x )n R0 + (x )n 1
R1 + · · · + (x )k Rn k + · · · + (x )Rn 1 + Rn

L'écriture obtenue, en fonction des restes des divisions successives de Pn(x), ressemble au
développement limité en série de Taylor. Toute fonction indéfiniment dérivable peut
s’écrire au voisinage d’un point α en fonction de ses dérivées sous la forme :

f( ) f ( ) f ( ) f (n) ( ) f (k) ( )
f (x) = + (x )+ (x ) + ··· +
2
(x ) + ··· =
n
(x )k
0! 1! 2! n! k!
k=0

Castelan-Bordage! 22
Si l'on développe Pn(x) au voisinage d’α en série de Taylor :
(n)
(x )Pn ( ) (x )2 Pn ( ) (x )3 Pn ( ) (x )n Pn ( )
Pn (x) = Pn ( ) + + + + ··· +
1! 2! 3! n!
➡ Remarque : il s’agit donc ici d’une quatrième écriture du polynôme
On peut identifier le développement de Taylor avec l’expression de Pn(x) en fonction des
restes des divisions. L'égalité étant vérifiée quel que soit x il vient :
Pn ( ) = R n
Pn⇥ ( ) = Rn 1
Pn(2) ( )
2! = Rn 2
..
.
Pn(i) ( )
i! = Rn i
..
.
Pn(n) ( )
n! = R0

Les Rk sont, bien entendu, obtenus par des schémas de Hörner successifs que l’on peut
écrire comme suit :
… Pn(
n−1)
Pn( ) (α )
n
Coefs de Pn ( x ) Calcul de Pn (α ) Pnʹ (α ) Pnʹʹ (α ) (α )
Pn( ) (α )
n
a0 b0 = a 0 c 0 = b0 d0 = c0 … e0 f0 =
( n)!
( n−1)
a1 b1 = a1 + αb0 c1 = b1 + αc 0 d1 = c1 + αd 0 … e1 =
Pn (α )
( n−1)!
… … … … …
ai bi = a i + αbi−1 c i = bi + αc i−1 d i = c i + αd i−1 …
… … … … …
Pnʹ (α )
a n−2 bn−2 c n−2 d n−2 = 2!
Pnʹ (α )
a n−1 bn−1 c n−1 = 1! pas de d n
an bn = Pn (α ) pas de c n

➡ Pour avoir la valeur de la dérivée, il ne faut pas oublier de multiplier par la factorielle le reste
€ de la division.

Exercice 6 :

• Ecrivez un programme qui calcule toutes les valeurs des dérivées successives d’un
polynôme en un point.
• Les coefficients de P(x) seront saisis dans une variable A à l’aide d’une boucle
• Tous les calculs seront menés à l’aide de cette seule variable A.

Castelan-Bordage! 23
VIII.2. Interpolation, méthode de Lagrange

VIII.2.1.Introduction

Interpoler une fonction consiste à remplacer une fonction f(x) par une autre f (x) . La
fonction f(x) peut être connue :
★ soit par les valeurs qu'elle prend en certains points que l'on nomme pivots
★ soit analytiquement.
Le cas analytique se ramène simplement au premier cas en calculant la valeur de la
fonction en certains points, il ne sera donc présenté ici que le premier cas : on connaît la
valeur d'une fonction f(x) aux pivots.
On interpole une fonction, par exemple, parce que l'on veut calculer sa valeur en des
points entre les pivots, soit parce que le calcul de la fonction f(x) est complexe.

Nous ne présenterons ici que le cas où f (x) est un polynôme noté P(x), on parle
d’interpolation polynomiale. Ce choix est dû à l'existence du théorème de Weierstraß :
«sur un intervalle donné, toute fonction continue peut être approchée par un polynôme».
Exemple d’interpolation :
9
Polynome d’interpolation
Pivots
8

0
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2

Les points rouges dans la courbe ci-dessus représentent les pivots.


➡ Remarque : le polynôme d'interpolation passe exactement par les pivots.
➡ Remarque : le polynôme d'interpolation est unique.
➡ Remarque : le polynôme d'interpolation, toute fonction d'interpolation de manière
générale, n'a de sens qu'entre les pivots. Si les pivots sont tous dans l'intervalle [a, b], le
polynôme est défini entre a et b. En dehors de cet intervalle, on parle d'extrapolation.
L'extrapolation est une technique particulièrement difficile conduisant souvent à des
résultats erronés.
➡ Remarque : il est possible de déterminer le polynôme d'interpolation soit en calculant tous
les coefficients du polynôme (expression littérale), soit en calculant les valeurs qu’il prend en
certains points.

Castelan-Bordage! 24
VIII.2.2. Principe de la méthode
On se donne une base polynomiale : G0(x) … Gn(x) et l'on pose que le polynôme
d'interpolation P(x) s'écrit dans cette base :
n
P (x) = ai Gi (x)
i=0

Généralement la base polynomiale est la base canonique : Gk(x) = xk.


Par hypothèse on connaît n+1 { {x0 ; y0}…{xn ; yn} } pivots. On écrit qu’il y a concordance
parfaite entre P(x) et les pivots : P(xk) = yk. Cela conduit à poser n+1 équations :

⌅ y0 = a0 + a1 x0 + a2 x20 + · · · + an xn0

⇤ y1 = a0 + a1 x1 + a2 x21 + · · · + an xn1
..

⌅ .


yn = a0 + a1 xn + a2 x2n + · · · + an xnn

On peut certes résoudre ce système, mais la méthode de Lagrange simplifie grandement


le problème.
VIII.2.3.Méthode de Lagrange
Soient n+1 points {X,Y}. On cherche à déterminer pour un α donné {α ∈ [ xmin, xmax]} la
valeur de y = Pn(α) sans connaître l'expression de Pn(x) un polynôme de degré n passant
par les n+1 pivots {X,Y}.
X: x0 x1 … xi … xn
Y: y0 y1 … yi … yn
Les n+1 pivots permettent de définir un système de n+1 équations à n+1 inconnues, le
polynôme d’interpolation sera donc de degré n (n+1 coefficients).
Construisons le polynôme Φ(x) :
n
(x) = (x xj ) = (x x0 ) . . . (x xn )
j=0

Ce polynôme admet comme racines évidentes les pivots, il est de degré n+1. Supposons
connaître le polynôme d’interpolation Pn(x) et construisons le rapport : Pn (x)/ (x)

Comme Pn est de degré n et Φ(x) est de degré n+1, le rapport est de degré -1 (en x ). On
1

peut donc écrire ce rapport sous la forme :


n
Pn (x) ak
= (1)
(x) x xk
k=0

Il est possible de déterminer les coefficients ak en passant à la limite :


Xn
Pn (x) ak
ak = lim (x xk ) = lim (x xk )
x!xk (x) x!xk x xk
k=0

Castelan-Bordage! 25
En effet, (x-xk) tend vers zéro lorsque x→xk ce qui annule tous les termes, sauf celui où il y
a pu avoir simplification : le coefficient ak.
➡ Il s’agit là de la méthode classique d’identification des coefficients dans le cas d’une
décomposition en éléments simples.

Par construction, les pivots sont racines de Φ(x), soit Φ(xk)=0, on peut donc écrire :
Pn (x) (x xk ) 1 1
ak = lim (x xk ) = lim Pn (x) = Pn (xk ) = y
⇥ (x ) k
x xk (x) (xk ) x xk (x) (xk ) ⇥ (x )
k k

Par hypothèse Pn(xk) = yk d’où l’expression de ak.


En remplaçant ak par sa valeur dans l’expression ( 1 ) on obtient :
n n
Pn (x) X ak X yk
= = 0
(x) x xk (xk )(x xk )
k=0 k=0
n
X n
X
yk (x)yk
Soit :Pn (x) = (x) 0 (x )(x
= 0 (x
(2)
k xk ) k )(x xk )
k=0 k=0

Φ(x) est un produit de termes dont l’indice est indépendant de celui du signe somme, on
peut donc le distribuer sur chaque terme de la somme, ce qui correspond à le faire entrer
sous le signe somme.
Rappelons que :
n
(x) = (x xj ) = (x x0 ) . . . (x xn )
j=0

L’expression de Pn(x) implique le calcul de la dérivée de Φ(x). Menons le calcul dans le cas
où :
2
(x) = (x xj ) = (x x0 )(x x1 )(x x2 )
j=0

Il s’agit de dériver un produit de fonctions. La règle est : (fg)’ = f’g + g’f, ce qui donne ici :
(x) = (x x0 ) (x x1 )(x x2 ) + (x x0 )(x x1 ) (x x2 ) + (x x0 )(x x1 )(x x2 )

Or : dx
dx = 1 et dxk
dx = 0 , soit

2 2

(x) = (x x1 )(x x2 ) + (x x0 )(x x2 ) + (x x0 )(x x1 ) = (x xj )
k=0 j=0
j=k

La notation :
2
Y
(x xj )
j=0
j6=k

se comprend comme étant le produit des termes (x-xj) avec j variant de 0 à 2 et j différent
de k.

Castelan-Bordage! 26
Soit aussi :
2 ⇥2
(x x0 )(x x1 )(x x2 ) (x x0 )(x x1 )(x x2 ) (x x0 )(x x1 )(x x2 ) (x xj )
(x) = + + =
x x0 x x1 x x2 j=0
x xk
k=0

En généralisant à l’ordre n :
n ⇥n n n

(x x0 ) . . . (x xn ) (x x0 ) . . . (x xn ) (x xj )
(x) = + ··· + = = (x xj )
x x0 x xn j=0
x xk j=0
k=0 k=0
j=k

La dérivée de Φ(xk) s’écrit donc :


n n

(xk xj )
k=0 j=0
j=k

Ce qui donne en remplaçant dans l’expression de Pn(x) ( équation 2 ) :


n
n n n (x xj )
⇥ (x)yk ⇥ (x) 1 ⇥ j=0 1
Pn (x) = = yk = yk
(xk )(x xk ) (x xk ) (xk ) (x xk ) n
k=0 k=0 k=0 (xk xj )
j=0
j=k

Le terme correspondant à la division de Φ(x) par (x-xk) peut se réécrire en excluant le terme
xk (cf ci-dessus), soit :
n
(x xj )
n
⇥ n ⇤
⇥ n ⇥ n
j=0
(x xj )
Pn (x) = yk = yk = Lk (x)yk
j=k
n
(xk xj )
k=0 (xk xj ) j=0
k=0
j=k
k=0
j=0
j=k

Les indices deux produits ayant les mêmes bornes, on peut réécrire la fraction avec un
seul signe produit.
Avec :
n
(x xj )
Lk (x) =
j=0
(xk xj )
j=k

Les Lk(x), appelés coefficients de Lagrange, sont des polynômes de degré n. Il y a deux
manières de les calculer :
n
(x xj ) (x)
Lk (x) = =
j=0
(xk xj ) (x xk ) (xk )
j=k

Contrairement aux apparences, il est souvent plus simple d’utiliser la méthode à droite de
l’équation si Φ(x) est connu. Il s’agit d’une division par un binôme (schéma de Hörner !) et
du calcul de la dérivée en un point (second schéma de Hörner !).

Castelan-Bordage! 27
Les coefficients de Lagrange ont quelques propriétés :
★ Li(xi) = 1
★ Li(xk) = 0 pour k ≠ i
Ces deux propriétés font que l’on peut utiliser les coefficients de Lagrange comme
fonctions indicatrices.
Xn
8x, Li (x) = 1. Cette égalité permet d’avoir une condition nécessaire mais non

i=0

suffisante validant l’exactitude des calculs.


VIII.2.4.Variable réduite
Dans le cas où les points ont des abscisses régulièrement réparties avec un pas h, il est
commode de procéder à un changement de variable.
On pose :
x x0
u=
h
u est la variable réduite. Ce changement de variable permet de s’affranchir des valeurs
locales pour exprimer les pivots dans une base entière allant de zéro à n.
Par hypothèse, les pivots sont à pas constant (équidistants). On peut calculer le pas h de
deux manières :
xn x0
h = xk+1 xk =
n
➡ Notez que n est le numéro du dernier point dans une numérotation débutant à zéro,
autrement dit, n est le nombre d’intervalles, il a n+1 points.

Par conséquent on a :xk = x0 + k h ⇤k ⇥ [0; n]

Si l’on calcule les valeurs prises par la variable réduite pour chaque pivot, on obtient le
tableau suivant :
x = x0 u= x0 x0
h =0
x = x1 u= x1 x0
h = (x0 +1⇥h)
h
x0
=1
..
.
(x0 +k⇥h) x0
x = xk u= xk x0
h = h =k
..
.
(x0 +n⇥h) x0
x = xn u= xn x0
h = h =n

Il est possible d’exprimer les coefficients de Lagrange en variable réduite :


n n
x xj u j
Lk (x) = ⇥ Lk (u) =
j=0
xk xj j=0
k j
j=k j=k

Castelan-Bordage! 28
VIII.2.5.Travail à effectuer.

Exercice 7

• Ecrivez une fonction qui, utilisant la méthode de Lagrange calcule la valeur que prend
le polynôme d’interpolation passant par les pivots transmis en paramètre en un point
α.
➡ Attention, l’algorithme n’est pas linéaire (il y a un saut...)

VIII.3. Recherche de racines par méthode itérative.


VIII.3.1.Théorie itérative
Considérons une fonction F(x) dont on cherche une racine α telle que : F(α) = 0. Il est
possible de construire une méthode itérative permettant la détermination d’α en suivant
le processus suivant :
On choisit x0 une valeur non arbitraire, c'est-à-dire choisie aussi proche que possible de la
racine.
On construit une série x0, x1, x2, x3 …xn telle que : n!+1
lim xn = ↵

Bien entendu, on n’a pas la vraie valeur de la racine, mais seulement une approximation
ou une estimation, il est évidement impossible de calculer le «dernier terme» de la série !
Pour sortir de cette difficulté, on décide d’arrêter les calculs lorsque |xn-xn-1|<ε. On estime
l’erreur commise h comme étant inférieure à ε et on a donc :
α = xn+h ou xn-ε<α<xn+ε.
➡ Bien entendu cette approximation est fausse, rien ne permet d’affirmer que si la méthode
donne des solutions de plus en plus proches les unes des autres, alors on est proche de la
solution. C’est une approximation qui est toutefois systématiquement faite. Aussi vérifie-t-
on toujours la validité de la solution en calculant la valeur de la fonction F en ce point.

Si la méthode retourne une valeur finie, on dit qu'elle converge.


Toute la difficulté consiste à trouver une relation liant deux termes successifs de la série.
Ce type de relation s’appelle une recette.
VIII.3.2.Recette de Newton
On se place à l'itération n, on connait donc xn, une approximation d’α et on cherche xn+1.
➡ C’est une approche systématiquement employée pour établir des recettes.

On définit, h, l'erreur commise, par : xn+h = α, et on cherche à estimer cette erreur.


Par hypothèse : F(α) = F(xn+h) = 0.
On fait l’hypothèse que F est une fonction dérivable, en ce cas on peut exprimer F en
fonction d'un Développement Limité (DL) en série de Taylor :
F (xn + h) = F (xn ) + hF 0 (xn ) + 0(h) = F ( ) = 0

Castelan-Bordage! 29
Par conséquent, on peut calculer h :
F (xn ) + 0(h)
h=
F 0 (xn )

On ne connaît pas la valeur de 0(h), mais on sait que cette fonction tend vers 0. En
tronquant le DL à l'ordre 1, c'est-à-dire qu’en négligeant 0(h), il vient :
F (xn )
h⇡
F 0 (xn )
F (xn )
On définit alors : b
h= .
F 0 (xn )

L'erreur 0(h) est inclue dans h , ce qui permet de calculer xn+1 une meilleure approximation
de la racine :
F (xn ) F (xn )
h= ⇥ xn+1 = xn + h = xn
F (xn ) F (xn )

C’est la recette de Newton permettant de construire une suite convergeant vers α la


racine recherchée.
VIII.3.3.Interprétation géométrique
Cette méthode est aussi appelée méthode de la tangente.
On part du point { X0 ; Y0 }, en calculant la tangente à la courbe on cherche l’intersection
avec l’axe des abscisses ce qui donne X1, on recommence la méthode tant que :
| Xn+1-Xn | > ε, où ε est la précision souhaitée.

X2 X1 X0

VIII.3.4.Convergence
D'un point de vue mathématique, la convergence est particulièrement complexe à assurer.
Rien ne prouve que cela va «marcher» !
Il existe toutefois trois critères qui, s’ils sont vérifiés, assurent la convergence.
★ Il existe [ a , b ] tel que F(a)*F(b) <0
★ La dérivée ne s'annule pas sur [ a , b ]

Castelan-Bordage! 30
★ Il faut choisir X0 tel que F(X0)*F’’(X0) > 0 (concavité vers le haut)
Toutefois ces conditions ne sont pas intéressantes d'un point de vue numérique. Le point
2 implique de connaître les racines de la dérivée pour calculer les racines de la fonction, et
le point 3 implique le calcul de la dérivée seconde… quant à connaitre l’intervalle
entourant la racine, il revient à dire que l’on sait ce que l’on cherche, c’est une évidence !

Exercice 8 :

• Ecrire un programme Matlab qui calcule des racines réelles d’un polynôme calculé par
Hörner. Vous utiliserez des fonctions pour le calcul de P(x) et de P’(x) en utilisant la
méthode d’Hörner.

VIII.4. Intégration par Simpson


Il s’agit d’une méthode d’intégration numérique. Se référer à la méthode des trapèzes
pour une introduction à l’intégration numérique.
VIII.4.1.La méthode
Contrairement à la méthode des trapèzes, la courbe est ajustée avec des arcs de
parabole. Or, si pour définir une droite il suffit de 2 points, pour définir une parabole il faut
3 points.
Ainsi pour définir deux zones jointives il faut 5 points, pour trois zones, il en faudrait 7…
La méthode de Simpson impose d’avoir un nombre de points impairs.

Y5
3

2.5

Y2 Y4
2

Y1
Y3
1.5

Zone1 Zone2
1 1.5 2 2.5 3 3.5 4 4.5 5

X1 X2 X3 X4 X5

La figure ci-dessus présente l’approche de Simpson : la fonction est remplacée pour le


calcul de la surface par un arc de parabole.
Afin de déterminer la surface sous la parabole en Zone1, on intègre le polynôme
d'interpolation passant par les pivots { {X1,Y1} , {X2,Y2}, {X3,Y3} } dont l’expression est
déterminée par la méthode de Lagrange en variable réduite, ce qui suppose que le pas
est constant.

Castelan-Bordage! 31
L’expression à pas non constant est possible, mais elle ne donne pas lieu à une expression
générale et elle impose la résolution d’uns système d’équation linéaire pour chaque zone
(cf. «Méthodes de calcul Numérique», J.P. Nougier, pp. 180, ed. Masson 1993).
On rappelle l’expression de la variable réduite et des coefficients de Lagrange en ce cas.
x = x1 u= x1 x1
h =0 n n
x xj u j
x = x2 u= x2 x1
h = (x1 +1⇥h)
h
x1
=1 Lk (x) = ⇥ Lk (u) =
xk xj k j
x = x3 u= x3 x1
h = (x1 +2⇥h)
h
x1
= 2 j=0
j=k
j=0
j=k

Ce qui conduit à l’expression des trois coefficients de Lagrange suivant :


(u 1)(u 2) u2 3u + 2
L1 (u) = =
1⇥ 2 2

(u 0)(u 2) u2 2u
L2 (u) = =
1⇥ 1 1

(u 0)(u 1) u2 u
L3 (u) = =
2⇥1 2
Ce qui donne le polynôme d’interpolation:
1 ⇥
P3 (u) = (u2 3u + 2)y1 2(u2 2u)y2 + (u2 u)y3
2
x3
Nous avons fait un changement de variable, l’intégrale : I = f (x)dx se réécrit :
x1

x3 2
dx
I= f (x)dx = f (u) du
x1 0 du
2
dx
comme : u = on a : = h ce qui conduit à : I = h f (u)du
x x1
h
du 0

La fonction ƒ(u) est remplacée par le polynôme P3(u) sous le signe de sommation et en
calculant cette intégrale il vient :
⇧ 2 ⇤ ⇥2 ⇥ ⇥ ⌅
2 2 2 2
1 2u 3
9u + 12u
2
2u 3
6u 2u 3
3u
I⇥h P3 (u)du = h y1 2 y2 + y3
0 2 6 0 6 0 6 0

h 4 8 4 h
Soit I ⇥ y1 2 y2 + y3 = [y1 + 4y2 + y3 ]
2 6 6 6 3
x5
h
Le même calcul appliqué à la Zone2 conduit à : I = f (x)dx [y3 + 4y4 + y5 ]
x3 3
x5
h
Soit : I = f (x)dx [y1 + 4y2 + 2y3 + 4y4 + y5 ]
x1 3

Castelan-Bordage! 32
Les points au centre des zones (indices pairs) sont pondérés d’un facteur quatre, les points
limites des zones (indices impairs) apparaissent deux fois sauf le premier et le dernier. Ce
qui conduit à l’expression générale :

n
⌥1 n
⌥2
h⇧ ⌃
I ⇤y1 + yn + 4 yk + 2 yk ⌅
3 k=2 k=3
k pair k impair

Cette expression suppose que le nombre de points n est impair.

Exercice 9

• Ecrivez une fonction qui calcule la valeur de l’intégrale des points transmis en
paramètre (précisez les variables à transmettre...) par la méthode de Simpson.
• Complétez la fonction pour qu’elle vérifie que le calcul est bien possible
• Vous produirez trois versions de cette fonction. La première utilisera un test dans la
boucle de sommation, la seconde utilisera une astuce basée sur le fait que 4 = 3+1 et
2 = 3-1 ; la dernière avec une boucle ayant un pas égal à deux.

That’s all falks !

Castelan-Bordage! 33

Вам также может понравиться