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

Le pivot de Gauss quand A est de rang maximum

É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 :

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


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