next up previous contents index
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

La méthode de Gauss et de Gauss-Jordan avec recherche du pivot

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 $ \max_{j}^{}$| 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 :

$\displaystyle \tt gaussjordan\_reducn\left(\left [
\begin{array}{rrrr}
1&2&3&4\\
0&0&1&2\\
0&0&5&1\\
0&0&3&2\\
0&0&-1&1\\
\end{array}\right ]\right )$ = $\displaystyle \left[\vphantom{
\begin{array}{rrrr}
\displaystyle\frac{1}{4}&\di...
...\frac{7}{15}\\
 \\
0&0&0& \displaystyle\frac{6}{5}\\
\end{array}}\right.$$\displaystyle \begin{array}{rrrr}
\displaystyle\frac{1}{4}&\displaystyle\frac{1...
...laystyle\frac{7}{15}\\
 \\
0&0&0& \displaystyle\frac{6}{5}\\
\end{array}$$\displaystyle \left.\vphantom{
\begin{array}{rrrr}
\displaystyle\frac{1}{4}&\di...
...\frac{7}{15}\\
 \\
0&0&0& \displaystyle\frac{6}{5}\\
\end{array}}\right]$


next up previous contents index
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