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

Le pivot de Gauss pour A quelconque

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]]

$\displaystyle \tt gauss\_red\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}
1&2&3&4\\
0&0&1&2\\
0&0&0&-9\\
0&0&0&-4\\
0&0&0&3\\
\end{array}}\right.$$\displaystyle \begin{array}{rrrr}
1&2&3&4\\
0&0&1&2\\
0&0&0&-9\\
0&0&0&-4\\
0&0&0&3\\
\end{array}$$\displaystyle \left.\vphantom{
\begin{array}{rrrr}
1&2&3&4\\
0&0&1&2\\
0&0&0&-9\\
0&0&0&-4\\
0&0&0&3\\
\end{array}}\right]$


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