suivant: La méthode de Gauss-Jordan
monter: Méthode pour résoudre des
précédent: Le pivot de Gauss
Table des matières
Index
On cherche un programme valable lorsque A est quelconque :
on veut, dans ce cas, mettre des zéros sous la "fausse diagonale" de A
(ce qu'on appelle "fausse diagonale" c'est la diagonale obtenue en ne tenant
pas compte des colonnes pour lesquelles la recherche du pivot a été
infructueuse : un peu comme si ces colonnes étaient rejetées à la fin
de la matrice).
Donc, dans ce programme, si on ne trouve pas de pivot pour la colonne d'indice
jc (i. e. si tous les éléments de la colonne jc sont nuls sur et sous
la diagonale), on continue en cherchant, pour la colonne suivante (celle
d'indice jc + 1), un pivot à partir de l'élément situé à la ligne
d'indice jc (et non comme précédemment à partir de jc + 1),
pour mettre sur la colonne jc + 1, des zéros sur les lignes
jc + 1,..., nl - 1.
On est donc obligé, d'avoir 2 indices jl et jc pour repérer les
indices de la "fausse diagonale".
gauss_red(M):={
local pivo,jc,jl,k,nl,nc,temp,l,a;
nl:=nrows(M);
nc:=ncols(M);
//on met des 0 sous la fausse diagonale d'indice jl,jc
jc:=0;
jl:=0;
//on traite chaque colonne (indice jc)
while (jc<nc-1 and jl<nl-1) {
//choix du pivot que l'on veut mettre en M[jl,jc]
k:=jl;
while (M[k,jc]==0 and k<nl-1) {k:=k+1;}
//on ne fait la suite que si on a M[k,jc](=pivo)!=0
if (M[k,jc]!=0) {
pivo:=M[k,jc];
//echange de la ligne jl et de la ligne k
for (l:=jc;l<nc;l++){
temp:=M[jl,l];
M[jl,l] := M[k,l];
M[k,l]:=temp;
}
//fin du choix du pivot qui est M[jl,jc]
//on met des 0 sous la fausse diagonale de la colonne jc
for (k:=jl+1;k<nl;k++) {
a:=M[k,jc];
for (l:=jc;l<nc;l++){
M[k,l]:=M[k,l]*pivo-M[jl,l]*a;
}
}
//on a 1 pivot,l'indice-ligne de la fausse diag augmente de 1
jl:=jl+1;
}//fin du if (M[k,jc]!=0)
//colonne suivante,l'indice-colonne de la fausse diag augmente de 1
jc:=jc+1;
}//fin du while
return M;
}
On tape :
M0:= [[1,2,3,6],[2,3,1,6],[3,2,1,6]]
gauss_red(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_red(M1)
On obtient :
[[1,2,3,4],[0,0,1,2],[0,0,0,-9]]
On tape :
M2:= [[1,2,3,4],[0,0,1,2],[0,0,5,1],[0,0,3,2],[0,0,-1,1]]
gauss_red(M2)
On obtient :
[[1,2,3,4],[0,0,1,2],[0,0,0,-9],[0,0,0,-4],[0,0,0,3]]
suivant: La méthode de Gauss-Jordan
monter: Méthode pour résoudre des
précédent: Le pivot de Gauss
Table des matières
Index
Documentation de giac écrite par Renée De Graeve