Академический Документы
Профессиональный Документы
Культура Документы
Partie 1
rev 1.2
Marie-Claude Bordage
Philippe Castelan
Sommaire
I. Introduction ..................................................................................................5
I.1. Objectifs
5
I.2. Moyens
5
Castelan-Bordage! 4
Initiation à l’Algorithmique avec le langage Matlab
I. Introduction
I.1. Objectifs
I.2. Moyens
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 ?
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.
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.
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
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.
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 :
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
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.
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.
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.
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.
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
Castelan-Bordage! 13
Exercice 1 : Ecrivez un programme Matlab qui :
VI.4. Produit
On définit la fonction factorielle par :
N
Y
N! = k = 1 ⇤ 2 ⇤ 3··· ⇤ N
k=1
Castelan-Bordage! 14
Nom de la fonction
Paramètres…
Variables locales…
Corps de la fonction…
! séquence d’instructions Variables de sortie…
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
Y2 Y4
1.8
Y1
1.6
Y3
1.4
1.2
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]
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
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 )
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 :
VIII.Méthodes Numériques
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 :
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.
Coût 10 30 1 10 20 1 10 10 1 10 1 104
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.
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
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
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
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
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
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
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
Φ(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
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
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
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...)
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.
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 )
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.
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
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
(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
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.
Castelan-Bordage! 33