chapitre 1
a11 a12 ... a1n b1
a a ... a2n
b2
A = 21 22 B = AX = B
Résolution des systèmes linéaires ... ...
an1 an2 ... ann bn
Méthode de Gauss
Etude des solutions :
4z = −4 1
3y − 1 = 2 1 2 −2 4
D’où : 2 2 4
(ligne 2) / pivot 3/2 0 1
2x + 2 + 4 = 8 3 3
(ligne 3)-(nouvelle ligne 2)∗3 0 0 4 −4
z = −1
y=2 1 1/2 −2 4
x=1 0 1 2/3 4/3
(ligne 3) / pivot 4 0 0 1 −1
Remarque : Toutes les matrices intermédiaires
ont le même déterminant qui est donc égal à z = −1 z = −1
2∗23 ∗ 4 = 12 D ’où : y = 4/3 − 2/3z y=2
x = 4 − 1/2y − (−2)z x=1
2ème exemple
2 1 −4
A = 4 2 −7
2 1 −1
3ème exemple
1 1/2 −2
la 1ère étape donne : 0 0 1
2 1 −4
0 0 3 A = 4 2 −7
2 2 −1
Le système est impossible ou indéterminé
1 1/2 −2
exemples la 1ère étape donne : 0
0 1
0 1 3
8 4 8 4
Il n ’y a plus qu’à échanger la 2ème et la 3ème ligne
B = 15 → −1 B = 15 → −1
9 1 5 −3
z = −1
1 = −1
z=3 y quelconque
x = 2 − y/2
7 8
Résolution Itérations
2 phases : (2)
On recommence avec le pivot a22 supposé non
- éliminations → système triangulaire équivalent nul sinon on fait un échange de lignes, etc ...
- substitutions → résolution
En posant A.,n+1 = B et A(1) = A, à l’étape
On suppose que A est de rang n (k)
k, avec le pivot ak,k 6= 0 , on a A(k+1) =
1 On suppose a11 non nul (sinon on fait un (1) (1) (1) (1)
a11 a12 ... a1k a1,n+1
échange de lignes).
0 (2) (2) (2)
a22 ... a2k a2,n+1
On résout la première équation par rapport à
... ... ...
x1 et on remplace dans les autres équations.
(k) (k)
0 ak,k ak,n+1
On obtient le système équivalent
0
(k+1) (k+1)
0 ak+1,k+1 ... ak+1,n+1
... ... ... ...
a11x1 + a12 x2 + ... + a1n xn = b1
(k+1) (k+1)
(2) (2) (2) 0 0 an,k+1 ... an,n+1
a22 x2 + ... + a2n xn = b2
...
(2) (2) (2) (2) (k+1) (k) (k) (k) (k)
an1 x1 + an2 x2 + ... + ann xn = bn aij = aij − aik akj /akk
pour k+1 ≤ i ≤ n et k+1 ≤ j ≤ n+1
(k+1)
(2) aij = 0 pour k + 1 ≤ i ≤ n et j = k
aij = aij − ai1 a1j /a11
avec pour 2 ≤ i, j ≤ n (k+1) (k)
(2)
= bi − ai1b1 /a11
bi aij = aij sinon
(2)
et ai1 = 0 pour i ≥ 2 Remarque : dét(A) = ± le produit des pivots.
9 10
Fin de la résolution
Notation matricielle
2 A la (n − 1)ème étape, on a une matrice Avec les matrices de Frobenius
triangulaire supérieure
1 0 0
...
(1)
(1) (1) (1) (1)
a a12 ... a1k ... a1,n a1,n+1
11
x1 (2) 0 1 ... 0
(2) (2) (2)
0
a22 ... a2k ... a2,n a
Gk = (k) (k)
x2
2,n+1 −a /a 1 ... 0
k+1,k k,k
... ...
... ... ...
...
=
(k) (k) xk (k)
0 0 ... ak,k ... ak,n a
(k) (k)
k,n+1 0 −an,k /ak,k 0 ... 1
...
...
... ... ...
xn
(n)
(n)
0 0 ... 0 0 an,n an,n+1
de déterminant égal à 1 on a A(k+1) = Gk ∗A(k)
A(n) X B (n)
D’où A(n) = Gn−1 ∗ ... ∗ G2 ∗ G1 ∗ Ainitiale
On remonte facilement, en commençant par
xn En posant L = ( i Gi)−1 et U = A(n)
Q
pour k = 1 à n A=[2,1,-4;3,3,-5;4,5,-2],
si akk = 0 alors B=[8;14;16],
s’il existe i > k tel que aik 6= 0 n=3
alors échanger les lignes i et k
sinon la matrice est singulière // copie de B dans la colonne n+1 de A
stop for i=1:n, A(i,n+1)=B(i), end
{le pivot akk 6= 0 }
pour i = k + 1 à n, retrancher à la ligne i for k=1:n , // etape k
la nouvelle ligne k multipliée par aik /akk for i=k+1:n , // nouvelle ligne i
(colonnes de k à n for j=[n+1:-1:k], // pourquoi pas [k:n+1] ?
ou même, seulement k + 1 à n) A(i,j) = A(i,j) - A(i,k)*A(k,j)/A(k,k),
xn = an,n+1/ann end, //
pour i = n − 1 à 1 end,
xi = (ai,n+1 − n end,
j=i+1 aij ∗ xj )/aii
P
ou : en rangeant les valeurs des solutions dans // remontee, calcul des xi dans le vecteur X
X(n)=A(n,n+1)/A(n,n),
la (n + 1)ème colonne de A :
for i=[n-1:-1:1],
X(i)=A(i,n+1),
an,n+1 = an,n+1/ann
for j=i+1:n, X(i) = X(i) - X(j)*A(i,j); end,
pour i = n − 1 à 1 X(i) = X(i)/A(i,i),
ai,n+1 = (ai,n+1 − nj=i+1 aij ∗ aj,n+1 )/aii
P
end,
13 14
15 16
fonction Scilab
Recherche de pivot non nul
function X = gauss0(A,B)
if A(k,k)==0 then //recherche pivot non nul
n=size(A,’c’) // calcul de la taille de A et
if ~ size(A,’r’)==n // verif carree printf(’pivot nul %d’,k),
then X=’matrice non carree’, return, end if k<n then i=k+1,
while(A(i,k)==0 & i<n ), i=i+1,
// copie de B dans la colonne n+1 de A end,
A(:,n+1) = B // ou A = [A,B] else i=k,
end,
for k = 1 : n , // etape k
if A(i,k)==0 then X=’matrice singuliere’,
if A(k,k)==0 then X=’pivot nul’, return end,
return
// nouvelles ligne i else printf(
A(k+1:n,k:n+1) = ’on echange les lignes %d et %d’,k,i),
A(k+1:n,k:n+1)-A(k+1:n,k)*A(k,k:n+1)/A(k,k) aux=A(k,:),A(k,:)=A(i,:),A(i,:)=aux
end, // ou mieux A([k,i],:)=A([i,k],:),
end,
// remontee, calcul des xi dans le vecteur X
X(n) = A(n,n+1)/A(n,n), end,
for i=[n-1:-1:1],
X(i) = (A(i,n+1)-A(i,i+1:n)*X(i+1:n))/A(i,i), printf(’pivot=%f’,A(k,k)),
end,
17 18
programme complet
avec impressions intermédiaires
et calcul du déterminant
function X = gauss0(A,B)
19 20
Gauss 2ème version
printf(’pivot=%f’,A(k,k)),
Nouvel algorithme
pour k = 1 à n
si akk = 0 alors
Avec une seule matrice pour mémoriser tous s’il existe i > k tel que aii 6= 0
les A(k) alors échanger les lignes i et k
akj = akj /akk sinon la matrice est singulière
puis aij = aij − aik akj stop
puisqu’il s’agit du nouveau akj {le pivot akk 6= 0 }
diviser la ligne k par akk
(pour les colonnes k à n ou,
Pour la remontée, on économise aussi les divi- variante k + 1 à n)
sions par les pivots. pour i = k + 1 à n, retrancher à la ligne i
la nouvelle ligne k multipliée par aik
De plus, xn se trouve déjà dans an,n+1 (colonnes de k à n + 1 ou,
variante k + 1 à n + 1)
pour i = n − 1 à 1
(calcul des solutions dans ai,n+1)
ai,n+1 = ai,n+1 − n j=i+1 aij ∗ aj,n+1
P
23 24
Programmation
for k = 1 : n , // etape k
if A(k,k)==0 then ... Exercice
//nouvelle ligne k
A(k,k:n+1) = A(k,k:n+1)/A(k,k),
Exécuter la variante avec l’exemple du début.
for i = k+1 : n , // nouvelle ligne i
Si A est la matrice finale, on définit alors les
A(i,k:n+1) = A(i,k:n+1) - A(i,k)*A(k,k:n+1)
end, matrices suivantes :
... L est la partie triangulaire gauche inférieure de
end, A, diagonale comprise
U est la partie triangulaire droite supérieure de
Variante A, sans la diagonale dont tous les éléments
sont égaux à 1.
for k = 1 : n , // etape k
if A(k,k)==0 then ...
Calculer le produit LU . Que constatez-vous ?
//nouvelle ligne k
A(k,k+1:n+1) = A(k,k+1:n+1)/A(k,k),
for i = k+1 : n , // nouvelle ligne i Peut-on généraliser le résultat pour une ma-
A(i,k+1:n+1)=A(i,k+1:n+1)-A(i,k)*A(k,k+1:n+1) trice A quelconque ?
end,
...
end,
25 26
On a intérêt à avoir des pivots les plus grands Nombre d’opérations effectuées
possibles, sinon ils peuvent devenir très petits (Gauss 2ème version) :
et pris égaux à 0 en machine.
On choisira donc comme pivot les plus grand nouvelle ligne k (ligne du pivot)
des akl en valeur absolue, et on échangera les k=1:n 1 division
lignes k et l i = k : n + 1 soit au total
n(n+3) 2
' n2 divisions
Pn
k=1 (n − k + 2) = 2
Programme
nouvelles lignes i
... k=1:n 1 multiplication
amax=0, l=k, // recherche du pivot maximal i=k+1:n et 1 addition
for i=k:n j = n + 1 : −1 : k soit au total
n(n+1)(2n−1) 3
' n3
Pn Pn
absA=abs(A(i,k)) k=1 i=k+1 (n − k + 2) = 6
if absA>amax then l=i, amax=absA, end
end remontée
if amax==0 then X=’matrice singuliere’, return, i = n − 1 : −1 : 1 1 multiplication et 1 addition
end j =i+1: n soit au total
Pn−1 n(n−1) 2
if l<> k then A([k,l],:)=A([l,k],:), i=1 (n − i) = 2 ' n2
// aux=A(k,:),A(k,:)=A(l,:),A(l,:)=aux
2 3
ech=-ech, Au total, de l’ordre de n2 divisions, n3 multi-
end, 3
... plications et additions, soit 2 n3 opérations
27 28
Retour sur la notation matricielle
1 si (k = i et l = j)
ou (k = j et l = i)
P (i, j)k,l =
ou (k = l et k 6= i et k 6= j
0 sinon
Exercices
- Montrer que P (i, j)A échange les lignes i et
j de A et que A P (i, j) échange les colonnes i
et j
- Soit E(i, j) telle que
1 si k = i et l = j
E(i, j)k,l =
0 sinon
Montrer que P (i, j) =
I + E(i, j) + E(j, i) − E(i, i) − E(j, j)
- Montrer que si A est une matrice régulière,
il existe une matrice de permutation P , une
matrice triangulaire inférieure L et une matrice
triangulaire supérieure U telles que A = P L U
29