suivant: Le pivot de Gauss
monter: Méthode pour résoudre des
précédent: Méthode pour résoudre des
Table des matières
Index
Étant donné un système d'équations noté AX = b, on cherche à le
remplacer par un système équivalent et triangulaire inférieur.
À un système d'équations AX = b, on associe la matrice M formée
par A que l'on borde avec b comme dernière colonne.
La méthode de Gauss (resp Gauss-Jordan) consiste à multiplier A et b
(donc M) par des matrices inversibles, afin de rendre A triangulaire
inférieure (resp diagonale). Cette transformation, qui se fera au coup
par coup en traitant toutes les colonnes de A (donc toutes les colonnes de
M, sauf la dernière), consiste par des combinaisons de lignes de M
à mettre des zéros sous (resp de part et d'autre) la diagonale de A.
La fonction gauss_redi ci-dessous, transforme M par la méthode de
Gauss, la variable pivo (car pivot est une fonction de Xcas)
sert à mettre le pivot choisi.
Pour j = 0..p - 2 (p - 2 car on ne traite pas la dernière colonne de M),
dans chaque colonne j, on cherche ce qui va faire office de pivot à partir de la diagonale : dans le programme ci-dessous on choisit le premier
élément non nul, puis par un échange de lignes, on met le pivot sur la
diagonale (
pivo = M[j, j]). Il ne reste plus qu'à former, pour chaque ligne
k (k > j) et pour a = M[k, j], la combinaison :
pivo*lignek - a*lignej (et ainsi M[k, j] devient nul).
On écrit pour réaliser cette combinaison :
a:=M[k,j];
for (l:=j;l<nc;l++){
M[k,l]:=M[k,l]*pivo-M[j,l]*a;}
On remarquera qu'il suffit que l parte de j car :
pour tout l < j, on a déjà obtenu, par le traitement des colonnes
l = 0..j - 1, M[k, l] = 0.
Le programme ci-dessous ne sera utile que si on trouve un pivot pour
chaque colonne : c'est à dire si la matrice A est de rang maximum.
En effet, dans ce programme, si on ne trouve pas de pivot (i. e. si tous les
éléments d'une colonne sont nuls sur et sous la diagonale), on continue
comme si de rien était...
gauss_redi(M):={
local pivo,j,k,nl,nc,temp,l,n,a;
nl:=nrows(M);
nc:=ncols(M);
n:=min(nl,nc-1);
//on met des 0 sous la diagonale du carre n*n
for (j:=0;j<n;j++) {
//choix du pivot mis ds pivo
k:=j;
while (M[k,j]==0 and k<nl-1) {k:=k+1;}
//on ne fait la suite que si on a pivo!=0
if (M[k,j]!=0) {
pivo:=M[k,j];
//echange de la ligne j et de la ligne k
for (l:=j;l<nc;l++){
temp:=M[j,l];
M[j,l] := M[k,l];
M[k,l]:=temp;
}
//fin du choix du pivot qui est M[j,j]
for (k:=j+1;k<nl;k++) {
a:=M[k,j];
for (l:=j;l<nc;l++){
M[k,l]:=M[k,l]*pivo-M[j,l]*a;
}
}
}
}
return M;
}
On tape :
M0:= [[1,2,3,6],[2,3,1,6],[3,2,1,6]]
gauss_redi(M0)
On obtient :
[[1,2,3,6],[0,-1,-5,-6],[0,0,-12,-12]]
On tape :
M1:= [[1,2,3,4],[0,0,1,2],[0,0,5,1]]
gauss_redi(M1)
On obtient :
[[1,2,3,4],[0,0,1,2],[0,0,5,1]]
On tape :
M2:= [[1,2,3,4],[0,0,1,2],[0,0,5,1],[0,0,3,2],[0,0,-1,1]]
gauss_redi(M2)
On obtient :
[[1,2,3,4],[0,0,1,2],[0,0,5,1],[0,0,0,7],[0,0,0,6]]
c'est à dire :
suivant: Le pivot de Gauss
monter: Méthode pour résoudre des
précédent: Méthode pour résoudre des
Table des matières
Index
Documentation de giac écrite par Renée De Graeve