suivant: Application : recherche du
monter: Méthode pour résoudre des
précédent: La méthode de Gauss-Jordan
Table des matières
Index
On peut bien sûr modifier la recherche du pivot.
Pour les méthodes numériques il est recommandé de normaliser les
équations (on divise chaque ligne k par
| ak, j|) et de choisir
le pivot qui a la plus grande valeur absolue.
En calcul formel, on prend l'expression exacte la plus simple possible.
Ici on normalise les équations à chaque étape et on choisit
le pivot qui a la plus grande valeur absolue : c'est ce que font, avec ce choix du pivot les programmes (cf le répertoire exemples),
gauss_reducni (analogue à gauss_redi),
gauss_reducn (analogue à gauss_red)),
gaussjordan_reducni (analogue à gaussjordan_redi) et
gaussjordan_reducn (analogue à gaussjordan_red) :
gaussjordan_reducn(M):={
local pivo,j,jc,jl,k,nl,nc,temp,l,a,piv,kpiv,maxi;
nl:=nrows(M);
nc:=ncols(M);
//on met des 0 sous la fausse diagonale
jc:=0;
jl:=0;
while (jc<nc-1 and jl<nl) {
//on normalise les lignes
for (jj:=0;jj<nl;jj++) {
maxi:=max(abs(seq(M[jj,kk], kk=0..nc-1)));
for (kk:=0;kk<nc;kk++) {
M[jj,kk]:=M[jj,kk]/maxi;
}
}
//choix du pivot que l'on veut mettre en M[jl,jc]
kpiv:=jl;
piv:=abs(M[kpiv,jc]);
for (k:=jl+1;k<nl;k++){
if (abs(M[k,jc])>piv) {piv:=abs(M[k,jc]);kpiv:=k;}
}
//on ne fait la suite que si on a piv!=0
if (piv!=0) {
pivo:=M[kpiv,jc];
k:=kpiv;
//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 au dessus la fausse diagonale
//de la colonne jc
for (k:=0;k<jl;k++) {
a:=M[k,jc];
for (l:=0;l<nc;l++){
M[k,l]:=M[k,l]*pivo-M[jl,l]*a;
}
}
//on met des 0 sous la fausse dia 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 un pivot donc,
//le numero de ligne de la fausse diag augmente de 1
jl:=jl+1;
}
//ds tous les cas,
//le numero de colonne de la fausse diag augmente de 1
jc:=jc+1;
}
return M;
}
On tape :
M0:= [[1,2,3,6],[2,3,1,6],[3,2,1,6]]
gaussjordan_reducn(M0)
On obtient :
[[5/6,0,0,5/6],[0,5/6,0,5/6],[0,0,1,1]]
On tape :
M1:= [[1,2,3,4],[0,0,1,2],[0,0,5,1]]
gaussjordan_reducn(M1)
On obtient :
[[1/4,1/2,0,17/20],[0,0,1,1/5],[0,0,0,9/10]]
On tape :
M2:=[[1,2,3,4],[0,0,1,2],[0,0,5,1],[0,0,3,2],[0,0,-1,1]]
gaussjordan_reducn(M2)
On obtient :
[[1/4,1/2,0,17/20],[0,0,1,1/5],
[0,0,0,9/10],[0,0,0,7/15],[0,0,0,6/5]]
On a donc :
suivant: Application : recherche du
monter: Méthode pour résoudre des
précédent: La méthode de Gauss-Jordan
Table des matières
Index
Documentation de giac écrite par Renée De Graeve