|
Visites depuis le 14 juin 2002 |
Chapitre II : Systèmes d'équations
linéaires
1. Matrices et Vecteurs dans MATLAB
2. Equations et systèmes linéaires dans MATLAB
3. Méthode directe (Méthode du pivot)
4. Méthodes itératives
4.1. Méthode de Jacobi
4.2. Méthode de Gauss-Seidel
Avant de commencer les calculs numériques relatifs à l’application directe du cours de ‘Méthodes Numériques’, il est indispensable de savoir les informations nécessaires concernant l’algèbre linéaire sur MATLAB. L’objectif de cette étude est de donner à l’étudiant les bases fondamentales de l’algèbre linéaire concernant la résolution des systèmes d’équations linéaires.
1. Matrices et Vecteurs dans MATLAB
En mathématique, une matrice est constituée de n lignes et de m colonnes. Les coefficients de la matrice sont situés entre 2 parenthèses. Dans MATLAB, les parenthèses n’y figurent pas.
Une matrice carrée est une matrice dont le nombre de lignes est égal au nombre de colonnes (n=m). Une matrice ligne est une matrice d’ordre 1 appelée vecteur ligne. Une matrice colonne est une matrice d’ordre 1 appelée vecteur colonne. Une matrice d’ordre 0 est un scalaire.
Dans le cas général, une matrice de n lignes et
de m colonnes a pour coefficients
,
où
et
. Si
cette matrice est appelée A, ses coefficients sont les suivant
:
Si B est autre matrice à p lignes et q colonnes, alors le produit de C=A*B n’est possible que si m=p. Dans ce cas, le coefficient c11, par exemple de cette matrice C s’écrit :
(avec
m=p).
Dans Matlab, la matrice produit C (= A*B) a pour coefficients cij. Ces coefficients sont calculés en fonction de aij et de bij :
Une matrice d’ordre zéro est une matrice à une ligne et une colonne : elle représente un scalaire. Une matrice nulle est une matrice dont les coefficients sont tous nuls. En attribuant le nom ‘A’ à cette matrice, alors dans Matlab A s’écrit :
>>A=zeros(n,m)
où n et m sont respectivement le nombre de lignes et le nombre de colonnes.
La matrice identité est définie dans Matlab par la fonction : ‘eye’
Exemple :
C’est une matrice carrée d’ordre 5. Dans Matlab, on peut l’écrire :
>>B=eye(5)
B =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
Si Bt est la matrice transposée de B, cette dernière s’écrit dans Matlab :
>>C=B' à (l’appostrophe représente la transposée)
C =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
Le déterminant d’une matrice carrée (C par exemple) est donné par :
>>det(C)
ans =
1
Soit A une matrice non nulle. La matrice inverse A-1 de A (si elle existe) est telle que :
A*A-1=IId
Dans Matlab, cette matrice inverse est donnée par :
A-1=A^(-1)=inv(A)=pinv(A)
Exemple :
>>A=[1 3 5;2 -1 0;5 4 3]
A =
1 3 5
2 -1 0
5 4 3
La matrice inverse de A est :
>>inv(A)
ans =
-0.0682 0.2500 0.1136
-0.1364 -0.5000 0.2273
0.2955 0.2500 -0.1591
ou encore :
>>pinv(A)
ans =
-0.0682 0.2500 0.1136
-0.1364 -0.5000 0.2273
0.2955 0.2500 -0.1591
2. Equations et systèmes linéaires dans MATLAB
Considérons le systèmes suivants de n équations à m inconnues :

Dans ce système, on a
connue,
connues et
inconnues.
x=A/y
Pour un vecteur colonne y donné (
par exemple), la solution par Matlab est :
>>x=A^(-1)*y
x =
-0.5227
-1.0455
1.9318
Notation :
Soit la matrice :
Dans Matlab, la Matrice A peut être écrite sous les deux formes :
>>A=[1,3,5;2,-1,0;5,4,3];
ou bien :
>>A=[1 3 5;2 -1 0;5 4 3];
La séparation des lignes se fait par un point virgule et la séparation des colonnes se fait par un espace ou une virgule.
Exemple :
>>A=[1 3 5;2 -1 0;5 4 3]
A =
1 3 5
2 -1 0
5 4 3
Problèmes mal conditionnés :
Il existe un certain nombre d’équations linéaires solvables, mais leurs solutions sont incertaines à cause des erreurs d’arrondi lors des calculs. Les problèmes de ce type sont appelés ‘problèmes mal conditionnés’. L’arrondi durant les calculs ou les petits changements dans les coefficients calculés peuvent induire des erreurs significatives dans la résolution d’un problème (mal conditionné).
Cet effet d’arrondi, peut être illustré par le système des 2 équations suivantes, par exemple :
La solution de ce système est :
Pour monter l’erreur introduite sur les solutions en modifiant les coefficients (arrondi), on donne au coefficient ‘2,01045’ de la première équation une légère augmentation de ‘0,001’.
Dans ce cas, le système devient :
Ceci met en évidence l'erreur engendrée par un arrondi.
La matrice C correspondant au système précédent est :
La norme de C s’écrit :

Dans Matlab on définit le nombre-condition de la matrice C [notation cond(C)] par :
Ce nombre satisfait toujours la condition :
Pour les matrices inconditionnées, ce nombre-condition attiend des grandes valeurs, mais ne donne pas une estimation directe de l’erreur sur la solution.
Dans Matlab, ce nombre se calcule par la fonction ‘cond(C)’ où C est la matrice.
Exemple1 :
>>C
C =
0.1206 0.9878 0.9876
>>cond(C)
ans =
6.5598e+003
Exemple2 :
L'exemple de la matrice d’Hilbert représente un problème à matrice mal conditionnée. Cette matrice est définie par :
, où
Programmer le nombre-condition (cond(A)) ainsi que det(A).det(A-1) pour une matrice d’Hilbert de 5 par 5 à 14 par 14 :
Solution :
n= 5 cond(a)=4.766073e+005 det*det=1.000000e+000
n= 6 cond(a)=1.495106e+007 det*det=1.000000e+000
n= 7 cond(a)=4.753674e+008 det*det=1.000000e+000
n= 8 cond(a)=1.525758e+010 det*det=9.999999e-001
n= 9 cond(a)=4.931532e+011 det*det=1.000001e+000
n= 10 cond(a)=1.602534e+013 det*det=9.999812e-001
n= 11 cond(a)=5.218389e+014 det*det=1.000119e+000
n= 12 cond(a)=1.768065e+016 det*det=1.015201e+000
n= 13 cond(a)=3.682278e+018 det*det=9.707419e-001
n= 14 cond(a)=1.557018e+018 det*det=-4.325761e+000
Durant l’exécution du programme, un message s’affiche sur l’écran
pour n=11 à n=14 :
Warning: Matrix is close to singular or badly scaled. Results may
be inaccurate. RCOND = 3.659249e-017.
Ce qui signifie qu’à partir de n=11 jusqu’à n=14,
on a det(a)*det(a-1) différent de 1, donc les
erreurs d’arrondi commencent leurs apparitions.
3. Méthode directe (Méthode du pivot)
Soit à résoudre le système suivant de 3 équations à 3 inconnues par la méthode du pivot (dans Matlab) :
déterminer
.
Solution :
1. On définit tout d’abord la matrice argument dans Matlab par :
>>A=[-0.04 0.04 0.12 3;0.56 -1.56 0.32 1; -0.24 1.24 -0.28 0] ;
2. On choisit la ligne 1 comme ligne pivot : a(1,1)=-0.04,
on divise la ligne 1 par a(1,1) à b(1,:)=a(1,:)/a(1,1) à nouvelle ligne,
on annule le 1er terme de la ligne 2 et le 1er terme de la ligne 3 :
à b(2,:)=a(2,:)-b(1,:)*a(2,1),
à b(3,:)=a(3,:)-b(1,:)*a(3,1).
On obtient après calculs :
b =
1 -1 -3 -75
0 -1 2 43
0 1 -1 -18
3. On choisit la ligne 2 comme ligne pivot.
On divise cette ligne par b(2,2)=-1, on obtient :
à c(2,:)=b(2,:)/b(2,2) à nouvelle ligne = 0 1 -2 -43
on annule le terme b(1,2) de la ligne 1 et le terme b(3.2) de la ligne 3 :
à c(1,:)=b(1,:)-c(2,:)*b(1,2)
à 1 0 -5 118,
à c(3,:)=b(3,:)-c(2,:)*b(3,2)
à 0 0 1 25.
4. On choisit la ligne 3 comme ligne pivot c(3, :).
On divise cette ligne par c(3,3)=1, on obtient :
à d(3,:)=c(3,:) à nouvelle ligne = 0 0 1 25
on annule dans la ligne 1 c(1,3) et dans la ligne 2 c(2,3) :
à d(1,:)=c(1,:)-d(3,:)*c(1,3)
à 1 0 0 7,
à d(2,:)=c(2,:)-d(3,:)*c(2,3)
à 0 1 0 7.
D’où la matrice d s’écrit :
d =
1 0 0 7
0 1 0 7
0 0 1 25
et la solution est :
L’algorithme suivant (dans Matlab) permet de résoudre le système précédent :
après l’exécution de ce programme, on obtient :
a =
-0.0400 0.0400 0.1200 3.0000
0.5600 -1.5600 0.3200 1.0000
-0.2400 1.2400 -0.2800 0
b =
1.0000 -1.0000 -3.0000 -75.0000
0 -1.0000 2.0000 43.0000
0 1.0000 -1.0000 -18.0000
c =
1.0000 0 -5.0000 -118.0000
0 1.0000 -2.0000 -43.0000
0 0 1.0000 25.0000
d =
1.0000 0 0 7.0000
0 1.0000 0 7.0000
0 0 1.0000 25.0000
x =
7.0000
7.0000
25.0000
Résoudre le système suivant par la méthode itérative de Jacobi :
Écrire un algorithme permettant de calculer x1, x2 et x3 par itérations. Déterminer le nombre d’itérations nécessaires pour obtenir :
.
Solution :
Appelons l’algorithme permettant de calculer la solution
‘jacobi.m’. Dans cet algorithme, nous avons utilisé un facteur
de relaxation "l" pour réaliser la convergence,
car sinon le système diverge.
Résoudre le même système précédent
par la méthode de Gauss-Seidel. Écrire un algorithme (Matlab)
permettant de résoudre ce système et déterminer le
nombre d’itérations nécessaires pour obtenir une erreur
.
Comparer les résultats avec la méthode de Jacobi et conclure.
Représenter sur le même graphe l’évolution des solutions
en fonction du nombre d’itérations. Changer les valeurs initiales
,
exécuter le programme puis conclure.
Solution :
* Méthode itérative générale :
Appelons l’algorithme permettant de calculer la solution
‘G-seid.m’
On se donne des valeurs arbitraires
: par exemple
=0.
Le système à résoudre est :
A*x=y ; où
,
et
La matrice A et le vecteur colonne y sont connus, le vecteur colonne x reste inconnu. Ainsi, la méthode itérative générale consiste à écrire :
pour
et
.
En particulier, pour un système de 3 équations à 3 inconnues, on a :
i=1 à j=2 et
3 ![]()
i=2 à j=1 et
3 ![]()
i=3 à j=1 et
2 ![]()
et ceci pour chaque itération.
Programme itmg.m :
clear all;
clc;
fprintf('Méthode itérative générale\n');
n=30000;
a=[1 1 1;2 -1 3;3 2 -2];
y=[1 4 -2];
x=zeros(1,3);
w=0.2; % facteur de relaxation : 0<w<1
epsilon=1e-10;
for k=1:n
erreur=0;
for i=1:3
s=0;
xb=x(i);
for j=1:3
if i~=j
s=s+a(i,j)*x(j);
end
end
x(i)=w*(y(i)-s)/a(i,i)+(1-w)*x(i);
erreur=erreur+abs(x(i)-xb);
end
if (erreur/3<epsilon)
fprintf('Itération
no. : %d\t Erreur = %7.2e\n',k,erreur);
break;
end
end
x
* Méthode de Jacobi :
Modifier le programme précédent pour résoudre le
système par la méthode de Jacobi. Exécuter le programme
et comparer le nombre d'itérations par rapport à celui de
la méthode générale.