Académique Documents
Professionnel Documents
Culture Documents
Support de
cours
Résumé
Ce cours est une introduction aux techniques d’implantation du calcul sur ordinateur.
Il suppose que le lecteur aient quelques connaissances de base en architecture des ordina-
teurs et en analyse mathématique. Il traite de l’arithmétique sur ordinateur, le calcul des
racines de fonction, l’interpolation, la résolution des systèmes linéaires et l’intégration. Les
implantations sur ordinateur sont réalisées en utilisant le langage Matlab
1
Table des matières
1 Introduction 4
1.1 Motivations et objectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Modèle de calcul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Positionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4 Organisation du cours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3 Le langage MATLAB 13
3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.1 Programmer avec MATLAB . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.2 Les fichiers M . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2 Les vecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2.1 Création des vecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2.2 Adressage et techniques d’indexation des éléments d’un vecteur . . 20
3.2.3 Opérations avec les vecteurs . . . . . . . . . . . . . . . . . . . . . . . 20
3.3 Les matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2
4.2 Méthode de la bissection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.2.1 Convergence de la méthode . . . . . . . . . . . . . . . . . . . . . . . 30
4.2.2 Méthode de la fausse position . . . . . . . . . . . . . . . . . . . . . . 30
4.3 L’approche du point fixe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.3.1 La méthode de Newton-Raphson . . . . . . . . . . . . . . . . . . . . 33
4.3.2 La méthode de la sécante . . . . . . . . . . . . . . . . . . . . . . . . 35
4.4 Accélération de la convergence par la méthode d’Aitken . . . . . . . . . . . 36
5 Interpolation numérique 37
5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.2 Interpolation de Lagrange . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.2.1 Forme générale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.2.2 Dégré du polynôme . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.2.3 Unicité du polynôme . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.3 Interpolation de Newton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.3.1 Les différences divisées . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.3.2 Table des différences divisées . . . . . . . . . . . . . . . . . . . . . . 40
5.4 Interpolation inverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.4.1 Ordre des points dans l’interpolation . . . . . . . . . . . . . . . . . 41
5.5 Interpolation par splines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.5.1 Spline cubiques d’interpolation . . . . . . . . . . . . . . . . . . . . . 42
5.5.2 Equations de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
7 Intégration 50
3
Chapitre 1
Introduction
Dans ce cours, nous nous intéressons à l’automatisation des opérations de base courantes
en analyse fonctionnelle et en algèbre linéaire comme le calcul des racines de fonction,
l’intégration, la résolution des systèmes d’équations etc. Notre objectif est de développer
des algorithmes stables, robustes et précis reposant sur des primitives élémentaires de base
comme l’addition, la multiplication etc dans la réalisation des opérations de haut niveau.
4
1.3 Positionnement
L’implantation des calculs sur ordinateur necessitent des connaissances tant dans le
domaine de l’algorithme et la programmation que dans les mathématiques. En particulier,
l’univers manipulé dans le calcul sur ordinateur est entièrement discret (les nombres doivent
tenir dans les régistres et donc sur un ensemble maximal de bits, un algorithme doit réaliser
un nombre fini d’opérations) alors que les primitives que l’on retrouve en analyse fonc-
tionnelle considère un domaine d’application continu. Afin donc d’autmatiser les calculs, il
nous est necessaire de discrétiser l’opération mathématique à implanter. Nous le ferons en
particulier en utilisant les éléments de la théorie de l’approximation et en considérant une
arithmétique discrète sur ordinateur.
5
Chapitre 2
Dans ce chapitre nous nous intéressons à la représentation des nombres sur ordinateur
et à l’arithmétique qui en découle. L’objectif pour nous est de comprendre en pratique
comment définir efficacement les opérations des calculs élémentaires sur ordinateurs.
S P. Entière P. Décimale
1 t e
Fig. 2.1 – Structure d’un nombre en virgule fixe. On a un bit pour le signe, t bits pour la
partie entière et e bits pour la partie décimale
6
p
0
Dans la représentation en virgule fixe on a le même nombre de valeurs réelles que l’on
peut stocker en flottant dans les intervalles [0, 1] et [2, 3]. En pratique pourtant la précision
est plus utile lorsque l’on est près de zero que lorsque l’on s’en éloigne. Aussi, il est intéressant
de modifier la représentation de sorte à avoir plus de nombres que l’on peut stocker près de
0. La représentation en nombres flottants permet d’effectuer ce type de stockage.
Etant donné un nombre flottant 0.d1 d2 . . . dt β e , sa valeur entière en base 10 est égale à
d1 β e−1 + · · · + dt β e−t .
S Exposant Mantisse
1 e t
Fig. 2.3 – Représentation d’un nombre en virgule flottante. On a un bit pour le signe, e
bits pour l’exposant et t bits pour la mantisse.
7
Noter que dans cette représentation, l’exposant peut être stocké en utilisant la technique
du complément à deux. L’ensemble F des nombres machines est un ensemble fini, dont le
cardinal est |F | = 2(β − 1)β t−1 (U − L + 1) + 1.
Dans une représentation normalisée, on peut supposer que la mantisse comporte 24 bits
dans le cas des nombres en simple précision et 53 bits dans le cas des nombres en double
précision car le premier bit dans ces cas n’est pas stocké.
Exercice 1 : Comment obtient on cette valeur ?
Nous pouvons donner la liste des éléments de F entre 1/2 et 1, soit pour e = 0. Le reste de
F s’en déduit en faisant varier e, ce qui revient juste à multiplier chacun de ces nombres
par une puissance de 2.
8
2.1.3 La norme IEEE 754 de représentation
Jusqu’au milieu des années 1980, chaque constructeur d’ordinateur avait sa représentation
flottante. Cette situation entrainait beaucoup de difficultés pour les développeurs de logi-
ciel qui devaient alors à chaque fois maı̂triser la représention flottante de l’ordinateur cible.
C’est dans ce contexte que fût proposée la norme IEEE 754, qui s’est par la suite imposée
comme norme de représentation, pour les nombres flottants. La norme IEEE 754 précise
les représentations pour deux niveaux de précisions, que l’on appelle simple et double
précisions. Dans les deux cas, la norme impose le choix de la base β = 2. Les chiffres di
du développement sont donc des chiffres binaires, ou bits, et on a d1 = 1.
La simple précision Correspond aux types float de Java ou de C. Les nombres sont
représentés sur 32 bits, avec t = 23 ; L = −126 ; U = 127, xmax ≈ 1038 , xmin ≈ 10−38
La double précision correspond aux types double de Java et de C. Les nombres sont
représentés sur 64 bits, avec t = 52 bits pour la mantisse et 11 bits d’exposant. L = −1022 ;
U = 1023, xmax ≈ 10307 , xmin ≈ 10−307 Les figures (2.5) et (2.6) représentent un nombre
respectivement en simple, et double précision.
S Exposant Mantisse
1 8 bits 23 bits
S Exposant Mantisse
1 11 bits 52 bits
Le choix du nombre total de bits (32, 64) dans ces représentations dépend des standards
sur la taille des régistres de l’UAL.
Il existe plusieurs autres stockages étandant la norme IEEE 754. Par exemple les nombres
en quadruple précision qui sont stockés sur 128 bits.
Exercice 2 : Supposons que l’on ne stocke que des nombres positifs en simple précision.
Comment peut on adapter le stockage dans ce cas pour stocker plusieurs nombres ?
9
Soit minF le plus petit nombre flottant positif, maxF le plus grand nombre flottant et ǫF
le plus petit écart entre nombres flottants, on peut se poser les interrogations suivantes sur
les nombres flottants :
1. Le résultat d’un calcul entre deux flottants peut donner une valeur plus petite que
minF ou plus grande que maxF . Que se passe t’il dans ce cas ?
2. Etant donné une valeur réelle dont la partie décimale est plus petite que ǫF , comment
doit on stocker cette valeur ?
Lorsque le résultat du calcul est plus petit que minF , on est dans une situation d’underflow.
Dans celle ci en générale, la valeur calculée est arrondie à zero. Lorsque le résultat est plus
grand que maxF , il se produit une erreur dans le calcul liée au dépassement de la capacité
de stockage. Cette erreur est appelée overflow.
Dans la seconde situation (nombre de précision plus petite que ǫF , le nombre à stocker
sera soit arrondi, soit tronqué. On aura donc une erreur d’arrondi ou de troncature.
L’erreur de dépassement de capacité peut être évitée dans certains cas en définissant
√
judicieusement l’opération à effectuer. En particulier, considérons le calcul de c = a2 + b2
tel que a = 1030 et b = 1 sur un ordinateur simple précision. Ce calcul à priori provoquera
un dépassement de capacité immédiat dans l’évalution de a2 . Toutefois, le resultat
q est bien
plus petit ici que maxF = 1038 . On peut noter qu’en reécrivant plutot c = a 1 + ( ab )2 , on
n’aurait pas eu ce problème (malgré la possibilité d’avoir un underflow). En règle générale,
le dépassement de capacité peut être évité en factorisant les grands termes dans l’opération
à effectuer.
La possibilité d’arrondir ou de tronquer un nombre nous impose de considérer en pratique
une erreur implicite dans le stockage de tout nombre réel en virgule flottante. Aussi si a est
un nombre réel, nous considérons que son équivalent flottant est de la forme f l(a) = a(1+ǫa )
où ǫa est l’erreur dans le stockage de a. En particulier, si le nombre a est stockée en flottant
avec la valeur b alors on a ǫa = |b−a||a| . La valeur ǫa sera en pratique appelée erreur relative
sur la valeur a. De façon générale, l’erreur relative se définit comme :
avec
10
2.1.5 Chiffres corrects et chiffres significatifs
Considérons une valeur décimale a que l’on doit stocker avec une mantisse de t chiffres.
Supposons que t = 5 et que a soit de la forme a = X.XXXXY . Comme l’on ne peut stocker
que 5 chiffres, ce sera la valeur b = X.XXXZ qui sera stockée à la place de a. Dans ce
stockage on fera soit un arrondi si Y > 5 ou une troncature sinon. L’erreur absolue induite
par ce stockage est de |b − a| = 0.5.10−4 . On peut généraliser ce résultat en notant que de
façon générale, |b − a| = 0.5.10−t+1 . Cette observation nous amène à déduire le nombre de
chiffres corrects et significatifs dans une expression à partir de la valeur de l’erreur absolue
que l’on a.
Definition 2.1.2 Etant donné une valeur a et ã une valeur approchée de a. On dira que ã
possède t chiffres corrects si |ã − a| ≤ 12 .10−t .
Definition 2.1.3 Etant donné une valeur a et ã une valeur approchée de a. Supposons que
ã possède t chiffres corrects. Tous les chiffres de a qui occupent une position telle que l’unité
de l’erreur y est plus grande que 10−t sont appelés chiffres significatifs.
Lorsqu’on connait une valeur approximative avec une estimation du nombre de décimaux
corrects, on en déduit une approximation de l’erreur absolue.
|erreur absolue| ≤ 12 10−t ⇒ t ≈ −log10 |erreur absolue|,
Lorsqu’on connait un resultat avec une estimation du nombre de chiffre significatifs, on
en déduit une approximation de l’erreur relative.
|erreur relative| ≈ 10−m ⇒ −m ≈ −log10 |erreur relative|
Exercice 5 : Comment peut on déduire le nombre de bits significatifs et corrects dans un
nombre flottant en base 2 ?
Jusqu’à présent nous nous sommes intéressés aux erreurs uniquement induites par le
stockage des nombres flottants sur ordinateur. En pratique toutefois d’autres sources d’er-
reurs doivent être considérés. Nous verrons cela dans la suite.
11
f˜(ã) − f (a) ≡ f˜(ã) − f (ã) + f (ã) − f (a) ≡ erreur totale
d’où l’erreur totale dans le processus est la somme des erreurs de propagation et de calcul
2.2.1 Addition
Considérons l’addition X = ã + b̃. Nous ne tenons pas compte dans un temps de l’erreur
induite par le stockage du résultat. Supposons que l’on a : ã = a(1 + ǫa ) et b̃ = b(1 + ǫb ).
a a
On a alors X = (a + b)(1 + ǫa+b ) avec ǫa+b = a+b ǫa + a+b ǫb . Ce résultat montre que
potentiellement l’addition peut entrainer une grande propagation des erreurs si les valeurs
de a et b sont proches et de signes contraires. L’opération est qualifiée de sensible dans ce
cas. Ceci indique en particulier qu’il faudra formuler le calcul en pratique de sorte à éviter
l’addtion de valeurs de signes contraires proches.
2.2.2 Multiplication
Nous considérons l’opération X = ã.b̃. Avec les hypothèses ci dessus, nous avons :
X = a.b(1 + ǫab ) avec ǫab = ǫa + ǫb + ǫa ǫb ǫa et ǫb sont petites, alors la valeur de ǫa ǫb est
encore plus petite. Dans ce cas, l’erreur induite par la propagation est du même ordre que
les erreurs de données. La multiplication est donc considérée comme étant une opération
stable qui n’est pas sensible à la pertubation des données.
2.2.3 Division
1+ǫa ǫa −ǫb
Soit à calculer X = ãã . On a X = ab ( 1+ǫa
). Soit alors X = ab (1 + ǫa/b ) avec ǫa/b = 1+ǫb .
On en conclut que la division n’est pas sensible à la perbutation des données.
En prenant en compte le fait que dans les calculs flottants sur ordinateur, il faudra
entre autre normaliser les opérandes et arrondir les résultats, on peut remarquer que sur
ordinateur, l’addition ã + b̃ = f l(ã + b̃) = (ã + b̃)(1 + ǫ). On peut donc noter qu’en pratique
certaines propriétés arithmétiques classiques ne seront pas observables sur ordinateur. Par
exemple l’addition flottante sera commutative mais ne sera pas associative.
12
Chapitre 3
Le langage MATLAB
3.1 Introduction
MATLAB est un logiciel de calcul numérique disponible sur plusieurs plateformes (Win-
dows, Linux etc.). Il possède un langage très simple et efficace, optimisé pour le traitement
des matrices et des vecteurs. Il existe plusieurs autres logiciels qui offrent des fonctionnalités
similaires à celles que l’on retrouve dans MATLAB. On peut par exemple citer :
– Scilab (http ://www.scilab.fr)
– Octave(http ://octave.org)1
Scilab et Octave sont des logiciels gratuits.
Dans ce cours, nous nous intéresssons exclusivement au langage de programmation de
MATLAB.
13
fichier script. De même, on peut exécuter un script en saisissant successivement la liste de
ses commandes dans la console.
Dans le mode console direct par exemple, on peut avoir les commandes suivantes :
>> x = 10*3
Cette commande multiplie la valeur 10 par 3 et range le résultat dans une variable x. En
retour à la console, on a le résultat suivant :
>> x = 30
Cette commande affiche demande le calcul du sinus de 0 que l’on conserve dans x puis celui
du cosinus de x en retour on a les résultats suivants
>> x = 0
>> ans = 1
Deux commandes MATLAB peuvent être séparées par un caractère de séparation (es-
pace, tabulation entrée etc.) ou par un point virgule. Si les commandes C1 et C2 se suivent
et sont séparées par un point virgule, alors la commande C1 est sans écho. Dans ce cas le
résultat de la commande C1 n’est pas affichée à moins que cette commande comprennent
une instruction explicite d’affichage. Si par contre elles sont séparées par un caractère de
séparation, alors le résultat de la commande C1 est automatiquement affiché.
Les variables
Dans MATLAB on distingue plusieurs types de variables. En particulier, on a les vari-
ables scalaires et les variables vectorielles. Il n y a pas de déclarations de variables dans
MATLAB et seule l’affectation définit le type de la variable.
La variable spéciale ans donne le résultat d’un calcul lorsque celui ci n’est pas affecté
dans une variable 2
2
Matlab comporte un ensemble de constantes spéciales comme la constante pi = 3.14.. Il faudrait éviter
de les choisir comme nom de variables.
14
>> 2+4 Calcul avec écho non affecté dans une variable
ans = 6 ans contient la valeur du calcul précédent
>> x = 2+3 Calcul avec écho affecté dans une variable
>> x = 5 Cette variable prend la valeur du calcul
>> ans affichage de ans
ans = 6 ans n’a pas été modifié par le précédent calcul
Lors de l’exécution des commandes dans MATLAB, une composante particulière nommée
le workspace garde toutes les variables utilisées ainsi que leur contenu. Il est par ailleurs
possible de sauvegarder toutes les valeurs contenues dans le workspace dans un fichier.
L’intérêt ici est qu’il est possible plus tard de recharger ces variables en utilisant le fichier
de sauvegarde.
Opérateurs arithmétiques
– + Addition
– − Soustraction
– ∗ Multiplication
– / Division à droite
– \ Division à gauche
– ∧ Puissance
– ./ Division à droite éléments par éléments
– .\ Division à gauche éléments par éléments
– .∗ Multiplication éléments par éléments
– .∧ Puissance éléments par éléments
>> x = [1 2];
>> y = [2 3];
>> x+y Addition de deux vecteurs
ans = Résultat de l’addition
15
3 5
>> x .\ y Division éléments par éléments à gauche
ans =
2 1.5
if (expression1)
(commandes si expression1 est vraie)
elseif (expression2)
(commandes si expression2 est vraie)
else
(commandes si aucune expression n’est vraie)
end
16
else
disp(’Il ne pleuvra pas ce soir’)
end
b) Instruction while
La structure générale est la suivante :
while(expression)
(commandes)
end
17
Si on essaie alors test(0) on a comme résultat -1. Il faut noter que les variables d’une
fonction sont locales et n’entrent pas dans le workspace.
La syntaxe générale de l’entête d’une fonction Matlab est la suivante :
MATLAB permet la manipulation des vecteurs lignes et colonnes. Un vecteur ligne est
crée en listant toutes ses composantes entre les caractères ”[” et ”]” Exemple 2.1 :
>> v = [1 8 5 7]
v =
1 8 5 7
>> v = [1:1:4]
v =
1 2 3 4
18
différence que les composantes sont générées entre 10BASE et 10LIM IT et les composantes
sont logarithmiquement équidistantes (la composante v(i) que l’on aurait eu avec linspace
est ici égale à 10v(i) )
Exercice 2.2
1. Donner l’équivalent de l’instruction v = [valeur − initiale : increment : valeur −
f inale] en utilisant la fonction linspace.
2. Donner l’équivalent de l’instruction v = linspace(BASE, LIM IT, N ) sous la forme
v = [valeur − initiale : increment : valeur − f inale].
3. Dans une commande v = logspace(BASE, LIM IT, N ), N > 4 que vaut log10(x(i)) −
log10(x(i − 1)) pour 1 < i < N.
NB. log10 est la fonction du logarithme en base 10.
Dans MATLAB, il est possible dans une création par énumération des composantes
d’indiquer qu’une composante est un vecteur.
Exemple 2.3 :
>> a = [1:1:4];
>> b = [7:10];
>> x = [a b]
x =
1 2 3 4 7 8 9 10
>> v = v’
v =
1
2
3
4
Un vecteur colonne peut aussi être crée en listant ses composantes comme dans le cas
d’un vecteur colonne mais en les séparant par le caractère ” ; ”.
Exemple 2.5 :
>> v = [1;2;3;4]
v =
1
19
2
3
4
Remarque 2.2 : Il est aussi possible de composer des vecteurs colonnes. Dans le cas
où on compose un vecteur colonne avec des vecteurs ligne de même taille, on obtient une
matrice. On peut de même composer un vecteur ligne avec des vecteurs colonnes de même
taille.
20
ans =
9 36 81 144
>> x = [1 2 3 4];
>> x = x’
x =
1
2
3
4
>> x = x’
x =
1 2 3 4
>> x = [1 2 3 4];
>> y = [ 4 8 5 6];
>> x+y
ans =
5 10 8 10
>> x-y
ans =
-3 -6 -2 -2
>> x = [1 2 3 4];
>> y = [ 4 8 5 6]’;
>> x*y
ans = 59
21
Produit externe entre deux vecteurs
Le produit externe est réalisé par l’opérateur ”*” entre un vecteur ligne et un vecteur
colonne. le vecteur à gauche de l’opérateur ”*” doit être le vecteur colonne.
Exemple 2.11 :
>> x = [1 2 3 4];
>> y = [ 4 8 5 6]’;
>> y*x
ans =
4 8 12 16
8 16 24 32
5 10 15 20
6 12 18 24
>> x = [1 2 3 4];
>> y = [ 4 8 5 6];
>> x .* y
ans =
4 16 15 24
Exercice 2.3 Ecrire une fonction Outer( x, y, n) pour calculer le produit externe entre
le vecteur colonne x et le vecteur ligne y de taille n en utilisant uniquement la multiplication
scalaire-vecteur.
Exercice 2.4 La fonction diag(A) dans matlab donne les composantes de la diagonale
de la matrice x. Ecrire une fonction diagonal(A, n, m) qui réalise cette opération. NB. Dans
le cas d’une matrice A, A(i,j) donne la composante située à la ligne i et à la colonne i.
Exercice 2.5 Ecrire une fonction matvec(A, x, n,m) qui calcule le produit matrice
vecteur entre une matrice A et un vecteur x en utilisant le produit scalaire.
Exercice 2.6 Ecrire une fonction vecmat(x, A, n, m) pour calculer le produit entre un
vecteur ligne et une matrice.
Exercice 2.7 Ecrire une fonction prodmat(A, B, n, m) pour calculer le produit de deux
matrices A et B en n’utilisant uniquement :
1. des produits scalaires
2. la fonction matvec
22
3. la fonction vecmat
4. des produits externes
NB. m et n désignent le nombre de lignes et de colonnes des matrices.
Comme nous l’avons déjà vu, une matrice peut être créee par composition de plusieurs
vecteurs.
Exemple 3.1 :
>> x = [1 2 3 4; 2 3 5 6]
x =
1 2 3 4
2 3 5 6
>> x = [3:-1:1 ; logspace(0, 1, 3)]
x =
3.0000 2.0000 1.0000
1.0000 3.1623 10.0000
23
de colonne entre BASE2 et LIM IT 2. Pour indiquer que l’on sélectionne toute une ligne
ou toute une colonne, on peut juste utiliser le caractère ” :” sans préciser les bornes.
Exemple 3.2 :
>> x = [1 2 3 4; 2 3 5 6; 5 8 9 10];
>> x(2:3,1:3)
ans =
2 3 5
5 8 9
>> x(:, 1:3)
ans =
1 2 3
2 3 5
5 8 9
>> x = [1 2 3 4; 2 3 5 6];
>> 5*x
ans =
5 10 15 20
10 15 25 30
Transposition
>> x = [1 2 3 ; 2 5 6]
x =
1 2 3
2 5 6
>> x’
ans =
1 2
2 5
3 6
Produit matrice-vecteur
24
Il est réalisé par l’opérateur ”*” entre une matrice et un vecteur colonne. Le membre de
gauche doit être la matrice.
Exemple 3.5 :
>> A = [1 2 3 ; 2 5 6]
>> z =
[7 8 9]’
>> A*z
ans =
50
108
Produit vecteur-matrice
Il est réalisé par l’opérateur ”*” entre une matrice et un vecteur ligne. Le membre de
gauche doit être le vecteur ligne.
Exemple 3.6 :
>> A = [1 2 3 ; 2 5 6]
>> z =
[7 9]
>> z*A
ans =
25 59 75
L’addition est réalisée par l’opérateur ”+” et la soustraction par l’ opérateur ”-”. Dans
ces opérations les matrices doivent avoir les mêmes dimensions.
Exemple 3.7 :
Produit de matrices
Le produit de matrices est réalisé par l’opérateur ”*” entre deux matrices. Il faut noter que
le produit de matrice n’est pas commutatif ! ! !
Exemple 3.8 :
25
>> x = [3:-1:1 ; 2 5 6; 1:1:3];
>> y = ones(3)
>> x*y
ans =
6 6 6
13 13 13
6 6 6
26
Chapitre 4
Nous nous intéressons dans ce chapitre aux calculs des racines pour les fonctions à une
variable. Nous considérons les fonctions de la forme f : R −→ R et les équations de la forme
x(1) = x0;
k = 1;
while( f(x(k)) ~= 0)
calculer la nouvelle approximation x(k)
k = k+1;
end
Nous présenterons plus loin un exemple d’algorithme itératif. L’intuition dans ces procedés
toutefois est de projeter toujours la solution locale que l’on dans une direction sur laquelle
on pense que se trouve la solution finale. Il est aussi important de noter qu’en général, l’on
27
peut désirer une solution approchée de l’équation f (x) = 0 en s’autorisant une tolérance
tol. Dans ce cas, la boucle while devient : while(abs(f (x(k))) > tol).
4.1.2 Convergence
Dans l’exécution d’un procedé itératif, à chaque étape, une erreur peut être calculée. A
la kième itération, si x∗ est la solution exacte alors l’erreur que l’on a est de ek = x∗ − xk .
L’exécution d’un procedé itératif doit essayer de minimiser la grandeur cette erreur. On a
le résultat suivant sur l’erreur que l’on peut avoir sur un procedé itératif.
Definition 4.1.1 On dira qu’un procedé itératif converge, si lim |ek | = 0
k→+∞
Par exemple si l’on a |ek | ≥ |ek+1 | pour toutes les valeurs de k, alors il est possible qu’à
une itération le procedé itératif converge.
Lorsque quelque soit la valeur de l’approximation initiale, le procedé itératif va converger,
on dit qu’il est alors robuste. Si la différence entre ek et ek+1 est très grande (en parti-
culier |ek | >> |ek+1 |) alors, on dit que la convergence est rapide. Si à une itération, on
a |ek | < |ek+1 | alors on dira qu’à cette itération ou à partir de cette itération (si cela se
répète), le procedé diverge.
Definition 4.1.3 Supposons qu’il existe une constante CQ telle que : ∆k+1 ≃ CQ (∆k )2 ,
∆k ≃ CQ (∆k−1 )2 , . . . ; Le procedé itératif sera dit dans ce cas quadratiquement convergent.
On a aussi une convergence quadratique si ek ≃ CQ (ek−1 )2
Dans la suite de ce cours, nous allons présenter plusieurs algorithmes itératifs pour la
résolution de l’équation f (x) = 0.
28
4.2 Méthode de la bissection
La méthode de la bissection est basée sur l’observation suivante : Considérons une fonc-
tion f qui est continue et qui s’annule une seule fois dans l’intervalle [a, b]. Dans ce cas, il
est certain que l’on a f (a).f (b) < 0. Ce résultat est connu sous le nom de théorème des
valeurs intermédiaires.
f(a) < 0
f(b) > 0
a
b
y = f(x)
Ce résultat peut être exploitée pour trouver la racine de f dans [a, b] en essayant de
réduire l’intervalle initial. En effet si f (a).f (b) < 0 alors on sait qu’il existe un d tel que la
fonction f s’annule dans l’intervalle [a, d] avec d < b. On peut généraliser cette observation
comme suit pour retrouver une racine de f
a+b
1. On calcule c = 2
2. Si f (c) = 0 alors la solution est trouvée
3. Si f (c) 6= 0 et f (c).f (b) < 0 alors on pose a = c et on revient en 1
4. Si f (c) 6= 0 et f (c).f (a) < 0 alors on pose b = c et on revient en 1
On peut ainsi développer un algorithme itératif pour la recherche des racines d’une fonction.
La condition d’arrêt dans l’algorithme peut être l’obtention d’un intervalle de petite taille
dans lequel la fonction s’annule. On obtient ainsi l’algorithme suivant :
function [a,b] = Bissection(a,b,f,tol)
% Méthode de la bissection
while(abs(a-b) > tol)
c = (a+b)/2;
fc = f(c); fa = f(a); fb = f(b);
if( c == a | c == b)
return;
end
if(fc == 0)
29
a = c;
b = c;
return
else
if(fc*fb < 0)
a = c;
else
b = c;
end
end
end
return;
La solution finale dans la méthode de la bissection est la valeur c = (a + b)/2.
Exercice : Implémenter une procédure pour calculer une racince de f (x) = 1./cosh(x)−
cos(x) avec la méthode de la bissection dans l’intervalle [3, 5]. Prendre tol = 1e − 5.
30
4.3 L’approche du point fixe
Nous nous intéressons dans cette partie à la contruction des procedés itératifs conver-
gents. Supposons que l’on a une fonction g(x) qui est continue. On peut utiliser celle ci pour
chaque fois calculer les nouvelles approximations. On a donc les relations
Si avec cela le procedé itératif converge alors si x∗ est a solution, l’on aura donc g(x∗ ) = x∗ .
La valeur x∗ est dans ce cas le point fixe dans le procedé. En prenant par exemple x = 0.7
et g(x) = 12 ex/2 , on a la table des itérations suivantes :
k xk = g(xk−1 ) ∆k
1 0.7 0.009534
2 0.709534 0.003390
.. .. ..
. . .
6 0.714775 0.00...
Intéressons nous maintenant à la convergence d’une méthode de point fixe. Nous sup-
posons que la fonction g est continue et dérivable au moins jusqu’à l’ordre 3. Nous avons
alors les résultats suivants :
1. Si g ′ (x∗ ) 6= 0 alors ∆k+1 ≃ g ′ (x∗ )δk pour xk ≃ x∗ . Aussi, On a une convergence
linéaire si 0 < |g ′ (x∗ )| < 1 et une divergence linéaire si |g ′ (x∗ )| > 1.
2. Si g ′ (x∗ ) = 0 alors ∆k+1 ≃ − 21 g ′′ (x∗ )∆k pour x ≃ x∗ . Aussi, on a une convergence
quadratique avec CQ = − 12 g ′′ (x∗ )
Ces résultats peuvent être obtenus à partir de la formule de Taylor pour le calcul des
développements limités. Posons en effet xk = x∗ − ek . En utilisant le développement de
Taylor à l’ordre 2, on a alors g(xk ) = g(x∗ − ek ) = g(x∗ ) − g ′ (x∗ )ek + 21 g ′′ (x∗ )e2k − 61 g ′′′ (µ)e3k
avec µ une valeur entre xk et x∗ . Or, g(x∗ ) = x∗ et g(xk ) = xk+1 . Aussi, on a :
ek+1 = x∗ − xk+1 = g ′ (x∗ )ek − 21 g ′′ (x∗ )e2k + 16 g ′′′ (µ)e3k . Quand xk se rapproche de x∗ , on
a |ek | >> |ek |2 >> |ek |3 . En négligeant les derniers termes du développement limité, on a
e ′ ∗ ′ ∗ ek+1 1 ∗
alors k+1ek ≃ g (x ). De même si g (x ) = 0, on a alors e2k ≃ − 2 g””(x ).
Pour obtenir le résultat final, il faut noter que ∆k = xk+1 − x∗ + x∗ − xk = ek − ek+1 .
∆ e 1−ek+2 /ek+1 1−CL
Aussi ∆k+1 k
= k+1 ek ( 1−ek+1 /ek ) → CL 1−CL . On peut procéder de même pour établir les
convergences quadratiques.
La difficulté principale dans l’approche du point fixe consiste à déterminer la fonction
g telle que sur le point fixe où elle converge, la fonction f s’annule. Nous allons voir dans
certains cas comment déterminer cette fonction.
31
b
c a
P0
y = g(x)
P1
P2
P∗ P3
x2 x1 x0
32
4.3.1 La méthode de Newton-Raphson
La méthode de Newton-Raphson est l’une des méthodes de point fixe les plus utilisées.
Elle est encore appelée la méthode de la tangente à cause de sa formulation géométrique.
La formulation géométrique de cette approche est illustrée dans la figure ci dessous :
C B
x3 x2 x1 x0
f (xk )
xk+1 = xk −
f ′ (xk )
La forme générale de l’itération de Newton-Raphson est bien une itération de point fixe
avec g(x) = x − ff′(x)
(x) . On peut donc adopter comme critère d’arrêt dans l’exécution de cet
algorithme la condition |xk − xk−1 | ≤ tol avec une tolérance tol fixée.
La méthode de Newton peut aussi être dérivée de façon analytique à partir du développement
limité de Taylor. Dans ce développement en effet, on peut supposer que si x est proche de
x0 alors on a :
1
f (x) = f (x0 ) + f ′ (x0 )(x − x0 ) + f ′′ (ζ0 )(x − x0 )2
2
33
Aussi si la valeur x0 est dans le voisinage de x∗ alors on peut conclure que la fonction
f¯(x) = f (x0 ) + f ′ (x0 )(x − x0 ) donne une approximation de f (x∗ ). Dans ce cas alors, on
peut prendre f¯(x) = 0 car f (x∗ ) = 0 et on obtient alors la relation précédente.
k xk = g(xk−1 ) ∆k
1 9.814286 −0.892587
2 8.921699 −0.044650
3 8.877049 −0.000113
4 8.876936 −0.0...
Convergence de la méthode
La méthode de Newton-Raphson est une approche du point fixe dans laquelle l’on a
f ′ (x)2 −f ′′ (x)f (x)
g(x) = x − ff′(x) ′ ′
(x) . En calculant g (x), on obtient : g (x) = 1 − f ′ (x2 )
. g ′ (x∗ ) =
′ 2
1 − f f(x) −0 ′ ∗
′ (x)2 . Aussi, g (x ) = 0. On déduit àn partir de la section 4.3 que la convergence de
la méthode de Newton est quadratique. Toutefois, noter que ce résultat n’est valable qu’en
considérant que les approximations que l’on a initialement se trouvent au voisinage de la
solution que l’on cherche. Aussi même si la convergence de la méthode de Newton-Raphson
est quadratique, elle sera dans plusieurs cas moins robuste que la méthode de la bissection
car plus sensible à la qualité de l’approximation initiale.
34
Exercice : Implémenter la méthode de Newton-Raphson et appliquer la pour le calcul
de la racine cubique de a = 3.333. Prendre x0 = 1.42 comme approximation initiale. Prendre
tol = 1e − 7.
x2 x1 x0
35
4.4 Accélération de la convergence par la méthode d’Aitken
L’observation d’Aitken est que si un algorithme A converge exactement de façon linéaire,
alors il est possible de déduire les approximations qui seront calculées à partir d’une ob-
servation des solutions approchées sur quelques itérations sans utiliser l’algorithme A. Par
exemple si on a x0 = 2, x1 = 2.1, x2 = 2.11, x3 = 2.111, on peut déduire que l’on aura
x4 = 2.1111, x5 = 2.11111, . . . . Cette observation nous donne l’intuition pour accélérer le
processus de convergence d’un algorithme en calculant l’approximation xk+h à partir de xk .
Supposons maintenant qu’un algorithme itératif converge à partir de l’itération k − 2
vers x∗ . alors on a
∆ ∆2
En posant CL = ∆k−2 k−1
, on obtient x∗ = xk−2 − ∆k−1k−2−∆k−2
La formule d’Aitken peut être utilisée pour accélerer la convergence de n’importe quel
algorithme qui converge linéairement. Pour cela, il suffit de disposer de deux approximations
successives calculées par l’algorithme. A partir de xk−2 , xk−1 , la prochaine approximation
∆2k−2
peut être dérivée suivant la relation xk = xk−2 − ∆k−1 −∆k−2
36
Chapitre 5
Interpolation numérique
5.1 Introduction
Ce chapitre est consacré à l’approximation d’une fonction par la technique de l’interpo-
lation numérique. L’approximation des fonctions a beaucoup d’applications dans les disci-
plines scientifiques. Elle est motivée en général par le contexte suivant : On suppose qu’un
observateur recueille des données à différents points (x1 , y1 ), (x2 , y2 ), . . . , (xk , yk ). A partir
de ces données, il aimerait déterminer la fonction générale f telle que f (xi ) ≃ yi .
L’intérêt de déterminer une telle fonction pour lui est celui de pouvoir a posteriori construire
des points quelconques (xk+i , yk+i ) à partir de son observation intiale. Ce contexte générale
se retrouve dans plusieurs disciplines scientifique comme la dynamique des polulations, l’as-
trophysique, la météorologie, en océanographie etc. Il existe au moins deux approches pour
résoudre ce problème. Dans la première approche, on cherche dans l’ensemble des fonctions
continues la fonction f qui miminise la somme des erreurs que entre les f (xi ) et yi . Dans la
seconde approche, on cherche f parmi l’ensemble des polynômes. Cette dernière approche
est celle de l’interpolation numérique.
Dans ce chapitre, nous allons voir différentes approches de construction d’un polynome d’in-
terpolation donnant en tous les xi la valeur yi . En particulier, nous aborderons les approches
de Lagrange, de Newton et par splines pour la construction d’un tel polynôme.
37
Dans cette forme on peut bien vérifier que Pk (xi ) = yi . Pour terminer cette forme, il faut
déterminer la valeur des Li . Il est par ailleurs important de noter qu’idéalement chacun des
Li doit être un polynôme. Pour déterminer les Li , considérons le cas où l’on a uniquement
deux points (x1 , y1 ), (x2 , y2 ). La forme de Pk dans ce cas est : Pk (x) = y1 L1 (x) + y2 L2 (x).
L1 doit obéir aux conditions : L1 (x1 ) = 1, L1 (x2 ) = 0. En prenant L1 (x) = xx−x 2
1 −x2
on a bien
x−x1
les conditions sur L1 respectées. De même, on peut déduire que L2 = x2 −x1 .
Le résultat que nous avons sur deux points peut être généralisé sur k points. En effet, il
suggère que pour constuire Li , on prenne une forme Li (x) = A(x) B . Dans cette forme, pour
garantir que Li (xj ) = 0, on introduit le facteur (x − xj ). Lorsque l’on a Li (xi ) on
doitavoir
x−xj
simplement Ai (xi ) = B. On en déduit la forme générale des Li (x) = Π xi −xj .
1≤j≤k,j6=i
Pour illustrer le polynôme de Lagrange, considérons les points (0, 5), (1, 8), (2, 1), (4, 5)
à interpoler. Le polynôme de Lagrange qui en résulte est
38
est n). Supposons maintenant qu’il existe deux polynômes Pk (x) et Pk′ (x) de dégré au plus
k − 1 qui interpolent k points. Considérons alors Ek (x) = Pk (x) − Pk′ (x). Ek (x) est un
polynôme de dégré au plus k − 1. En chacun des xi , on a Ek (xi ) = 0. Aussi, Ek est un
polynôme de dégré au plus k − 1 qui a k racines. On en conclut que Ek est le polynôme
nul et donc Pk (x) = Pk′ (x). L’unicité du polynôme de Lagrange indique que quelque soit
l’approche que l’on utilise dans l’interpolation de k points, si celle ci dérive un polynôme
de dégré au plus k, il serait alors unique. Toutefois, cela ne signifie pas que l’on ne peut
pas trouver de polynômes de dégré plus grand que k − 1 ? Supposons par exemple que nous
construisons un polynôme pour k points. Celui ci peut être de dégré k − 1, mais reste aussi
un polynôme d’interpolation pour les sous ensembles de k − 1, k − 2 points dans l’ensemble
des points considérés.
Dans la suite, nous allons voir une autre approche permettant de construire les polynômes
d’interpolation.
Exercice : Comment peut on simplifier la forme de Lagrange lorsque les xi sont
équidistants (xi = xi−1 + h)
Definition 5.3.1 On définit les différences divisées de la fonction f par : f [xi ] = f (xi ),
f [x ,...,xi+h ]−f [xi ,...,xi+h−1 ]
f [xi , xi+1 ] = f (xxi+1 )−f (xi )
i+1 −xi
. De façon générale, on a f [xi , xi+1 , . . . , xi+h ] = i+1 xi+h −xi
On peut établir par recurrence que pour la fonction f , les coefficients ai = f [x0 , x1 , . . . , xi ].
Aussi le calcul des différences divisées nous permet d’obtenur un polynôme d’interpolation.
Exercice : Etablir que les différences divisées correspondent effectivement aux coef-
ficients ai . Procéder dans le raisonnement par récurrence ; Supposer à l’ordre k − 1 que
l’on a un polynôme qui interpole (x0 , f (x0 )), (x1 , f (x1 )), . . . , (xk−2 , f (xk−2 )) et un autre qui
interpole les points (x1 , f (x1 )), (x2 , f (x2 )), . . . , (xk−1 , f (xk−1 )).
On peut noter que par l’approche des différences divisées, le polynôme d’interpolation
qu’on a en k points est d’ordre au plus k − 1. Aussi, on en déduit que le polynôme d’in-
terpolation issu des différences divisées (polynôme d’interpolation de Newton) correspond
exactement au polynôme d’interpolation de Lagrange.
39
5.3.2 Table des différences divisées
L’intérêt des différences divisées est qu’elles offrent la possibilité de développer une
approche automatique simple pour calculer le polynôme d’interpolation. Cela est possible
notamment en considérant la table des différences divisées. La table des différences divisées
a la structure générale suivante.
x0 f [x0 ] ...
x1 f [x1 ] f [x0 , x1 ] ...
x2 f [x2 ] f [x1 , x2 ] f [x0 , x1 , x2 ] ...
x3 f [x3 ] f [x2 , x3 ] f [x1 , x2 , x3 ] ...
.. .. .. .. ..
. . . . .
xk−1 f [xk−1 ] f [xk−2 , xk−1 ] f [xk−3 , xk−2 , xk−1 ] ...
La table des différences divisées comporte k + 1 colonnes et k lignes. Ceci indique que
les différences divisées peuvent être stockées dans une matrice comportant k lignes et k + 1
colonnes. La table des différences divisées peut être calculée en procédant itérativement
colonnes après colonnes. Les deux premières colonnes sont données en entrée. En supposant
que D désigne la matrice des différences divisées, ceci signifie que les colonnes D(:, 1) et
D(:, 2) sont des données initiales. La troisième colonne peut être calculée à partir des deux
D(i,2)−D(i−1,2)
premières colonnes. En particulier, D(i, 3) = D(i,1)−D(i−1,1) . Dans cette relation, i > 1. On
peut généraliser cette relation pour une colonne n quelconque. Dans ce cas, on aura :
D(i,n−1)−D(i−1,n−1)
D(i, n) = D(i,1)−D(i−(n−2),1)
40
1. On peut calculer le polynôme d’interpolation Pk et résoudre l’équation non linéaire
Pk (x) = b. La résolution d’une telle équation peut être faite en utilisant un procedé
itératif non linéaire.
2. On peut calculer le polynôme d’interpolation inverse Pk−1 qui correspond à la fonction
f −1 et déterminer ensuite a = f −1 (b).
La première approche débouche sur la résolution d’une équation non linéaire qui pourrait
être sujette à des problèmes de convergence. La seconde approche comme la première com-
porte le coût lié à la construction d’un polynôme d’interpolation. Une fois cela fait néanmois,
la détermination de la valeur de a se fait par une simple évaluation de ce polynôme en b.
Si la seconde approche (construction du polynôme d’interpolation inverse semble à pri-
ori plus efficace) que la première, il faut noter que les erreurs induites dans le calcul des
différences divisées peuvent avantager la première. Supposons par exemple que les valeurs
xi sont petites et proches. En réalisant l’interpolation inverse, on aura dans le calcul de cer-
taines différences divisées une division à opérer sur des valeurs petites et qui potentiellement
sont érronées. Si cette erreur est très importante, l’erreur dans le polynôme d’interpolation
inverse peut alors être très importante.
La notion d’ordre dans les points d’interpolation est aussi liée au problème du choix des
points d’interpolation. Etant donnés un ensemble de points, une question pour la construc-
tion d’un polynôme d’interpolation est celle de savoir comment ceux ci doivent être choisis.
Plusieurs stratégies sont à ce niveau envisageables. On peut par exemple décider de prendre
les points de façon équidistantes. Dans ce cas, on aura xi = xi−1 + h. D’autres stratégies
41
sont aussi recommandées comme celle de prendre les points de Chebyshev.
y = q1(x) Pk−2
P0 P3 Pk−1 y = qk−1(x)
P2
P1
Pk
42
On peut noter que les dérivées premières et seconde avec les splines ne sont pas neces-
sairement nulles car chaque qi est une fonction cubique. De plus, on a :
mi+1 3 3
hi (x−xi ). En intégrant, on déduit que qi (x) = mi (xi+1
6hi
−x)
+mi+1 (x−x i)
6hi +ai (x−xi )+bi )
avec ai et bi des constantes. Les inconnues dans cette expression sont les mi ai et bi .
mi h2i
De qi (xi ) = yi , on déduit que yi = 6 + bi (1). De qi+1 (xi ) = yi+1 , on déduit yi+1 =
mi+1 h2i
6 + ai hi + b (2). q ′ étant continu, on a qi′ (xi ) = −mi h2i + ai = mi hi−1 ′
2 + ai−1 = qi−1 (xi )
(3).
1 hi
En faisant (1) dans (2) on a ai = hi (yi+1 −yi )− 6 (mi+1 −mi ) En remplaçant les ai dans
(3), on obtient hi−1 mi−1 + 2(hi + hi−1 )mi + hi mi+1 = 6 h1i (yi+1 − yi − hi−1
1
(yi − yi−1 )).
Grace à cette équation, on peut dériver les mi en posant cette équation pour toutes les
valeurs possibles de i. On obtiendra ainsi un de k − 1 équations. Or, l’on a k + 1 inconnues.
En pratique donc, on procède en considérant qu’aux frontières, l’on connait la valeur des
mi . En particulier, dans le cas des splines cubiques naturelles, on pose m0 = mk = 0. On
obtient ainsi un système matricielle de la forme T m = f à résoudre. Cette forme matricielle
peut être résolue en utilisant une approche de résolution des systèmes linéaires comme la
méthode de Gauss ou de Crout.
Exercice : Trouver la spline cubique d’interpolation pour les points (−2, −8), (0, 0), (1, 1), (2, 8)
en supposant que S”(−2) = −12 et S”(2) = 12. Quelle est la spline naturelle correspon-
dante ?
43
Chapitre 6
6.1 Introduction
Un système d’équations linéaires a la forme générale Ax = b avec A ∈ Rm×n et x ∈ Rn et
b ∈ Rm . Ici, x est l’inconnu et b le second membre. Un cas particulier des systèmes linéaires
est lorsque m = n. Le système est alors dit carré et d’ordre n (on dit aussi que la matrice
A est d’ordre n).
Exemple : On considère le système d’équations
3x1 + 4x2 =5
2x1 − 6x2 = 10
44
4. Il existe une matrice A−1 telle que AA−1 = A−1 A = I avec I étant la matrice identité.
5. det(A) 6= 0
On peut facilement établir que lorsque les colonnes d’une matrice sont linéairement
dépendantes, il existe une infinité de solutions. En prenant exemple sur une matrice de
deux colonnes on peut montrer cela ainsi :
Sur une matrice à deux colonnes si le vecteurs sont liées alors on a α1 , α2 non nuls
avec α1 A(:, 1) + α2 A(:, 2) = 0. On en déduit que le vecteur (α1 , α2 )T est une solution de
l’équation Ax = 0. De même tout vecteur γ(α1 , α2 )T est solution de cette équation. Aussi
si on a une solution x telle que Ax = b alors x + γ(α1 , α2 )T est aussi solution de cette
équation.
function x = SolDiag(D,b)
% D est une matrice carrée diagonale
for(i = 1:n)
x(i) = b(i)/D(i,i);
end
return;
45
L(i, j) = 0. Une matrice triangulaire inférieure a la forme générale :
l1,1
l2,1 l2,2
× × ×
L=×
× × ×
× × × × ×
× × × × × ×
ln,1 × × × × ln,n−1 ln,n
l1,1 x1 b1
l2,1 l2,2 x2 b2
× × × × ×
× × × × × = ×
× × × × × × ×
× × × × × × × ×
ln,1 × × × × ln,n−1 ln,n xn bn
On peut déduire l1,1 x1 = b1 =⇒ x1 = b1 /l1,1 . De même l2,1 x1 + l2,2 x2 = b2 =⇒
1
x2 = l2,2 (b2 − l2,1 x1 ) Si x1 est déjà calculé, pour le calcul de x2 toutes les opérandes
1
(bi − i−1
P
sont alors disponibles. De façon générale, on aura xi = li,i j=1 li,j xj ). Si les valeurs
x1 , x2 , . . . , xi−1 sont alors calculées alors toutes le opérandes pour le calcul de xi seraient
alors disponibles. Ainsi, la résolution d’un système triangulaire inférieur peut se faire en
calculant successivement les valeurs x1 , xP 2 , . . . , xn . Chacune de ces valeurs peut être obtenue
de la relation de reccurence xi = li,i 1
(bi − i−1j=1 li,j xj ). Ceci constitue la méthode de substition
avant dont l’algorithme est le suivant :
function x = SubstitutionAvant(L,b)
% L est une matrice carrée triangulaire inférieure
for(i = 1:n)
x(i) = b(i);
for(j = 1:i-1)
x(i) = x(i) - L(i,j)*x(j);
end
x(i) = x(i)/L(i,i);
end
return;
46
6.4 Résolution d’un système triangulaire supérieur
Un système U x = b est dit triangulaire supérieur lorsque tous les éléments en deca
de la diagonale principale sont nuls. Dans ce système, on a la relation ∀i, j si j < i alors
U (i, j) = 0. Un système triangulaire supérieur a la forme générale suivante :
u1,1 u1,2 u1,3 × × × u1,n x1 b1
u2,2 u2,3 × × × × x2 b2
× × × × × × ×
× × × × × = ×
× × ×
× ×
× × × ×
un,n xn bn
Afin de résoudre ce système on peut noter que un,n xn = bn =⇒ xn = bn /un,n . Si xn est
calculé on peut facilement dériver xn−1 à partir de un−1,n−1 xn−1 + un−1,n xn = bn−1 =⇒
1
xn−1 = un−1,n−1 (bn−1 − un−1,n xn ). De façon générale, si on a calculé xn , xn−1 , . . . , xi+1 on
peut déduire xi avec la relation xi = u1i,i (bi − nj=i+1 ui,j xj ). Ceci constitue la méthode de
P
substitution arrière
Exercice : Ecrire l’algorithme de substitution arrière et analyser sa complexité.
47
A l’issue de ces transformations, on a le système A1 x = b1 avec
a1,1 a1,2 a1,3
A1 = 0 a12,2 a12,3
0 a13,2 a13,3
−a −a
et les valeurs b11 = b1 , b12 = b2 + ( a1,1
2,1
∗ b2 ) et b13 = ( a1,1
3,1
∗ b3 ).
Pour continuer l’élimination de Gauss, on introduit maintenant des zeros en deca de la
diagonale de la seconde colonne. Pour ce faire, on applique les tranformations :
−a13,2
L3 = L3 + ( a2,2 ∗ L2 ),
−a13,2
b3 = b3 + ( a2,2 ∗ b3 )
Le système que l’on obtien à l’issue de cette transformation est triangulaire supérieur.
on peut alors le résoudre en utilisant la méthode de substitution arrière.
La transformation d’un système quelconque en un système triangulaire supérieur est la
base de la méthode d’addition. L’intérêt de cette transformation est dans le fait qu’il est
alors aisé de résoudre le système résultant. Afin d’automatiser la résolution d’un système
quelconque, il faut alors développer un algorithme de transformation du système quelconque
en un système triangulaire supérieur. En s’inspirant de l’exemple ci dessus, on peut facile-
ment dériver le code de transformation suivant :
Dans cet algorithme, nous ne procédons pas exactement en une addition des lignes
ceci pour éviter des additions avec des valeurs nulles. Lorsqu’on a effectué l’ensemble de
transformations qui introduisent un zero en deca de la première colonne, à l’étape qui suit,
nous n’utilisons que la partie non nulle de L2. Nous procédons de même après l’introduction
des zeros en deca de la seconde colonne etc.
Complexité : La complexité de cet algorithme peut être estimée à partir du nombre
de multiplications flottantes. Dans l’opération A(i, k : n) = A(i, k : n) − (A(i, k)/A(k, k)) ∗
A(k, k : n), on effectue n − k − 1 multiplications flottantes. Par ailleurs, on peut déduire une
constantePcn−1telle
Pnque pour le nombre de multiplications flottantes Nm , on ait la relation :
Nm ≤ c k=1 (n − k − 1). On en déduit que l’élimination de Gauss est en O(n 3 ) et
i=k+1
48
donc que la résolution d’un système quelconque est en O(n3 ).
Dans l’élimination de Gauss, on peut à une étape avoir des valeurs diagonales nulles.
Avant d’exécuter par exemple A(i, k : n) = A(i, k : n) − (A(i, k)/A(k, k)) ∗ A(k, k : n),
la valeur A(k, k) peut être nulle. Dans ce cas, on peut procéder par une permutation des
colonnes de sorte à ramener une valeur A(k, k) non nulle. Si deux colonnes i et j sont ainsi
permutées, il faudrait ultérieurement penser à permuter les composantes xi et xj du vecteur
solution. La permutation des colonnes au fil de l’élimination est développée de façon plus
détaillée dans la méthode du pivot partiel. Dans certains cas, la seule permutation des lignes
ne suffit pas. On peut alors employer la méthode du pivot total dans laquelle où lignes et
les colonnes sont permutées.
49
Chapitre 7
Intégration
50