exo4.mw

> restart;

> Exercice 4

question a)

On modifie la procédure Gauss_systeme en ajoutant la possibilité de permuter les colonnes afin d'obtenir un pivot non nul sur la diagonale concernée

> Gauss_rang:=proc(A)
local T,i,j,k,t;

t:=taille(A);

T:=array(1..t[1],1..t[2]);

T:=evalm(A);
T
contient une copie exact de A, mais T est modifiable contrairement à A
for j from 1 to min(t[1],t[2]) do

 i:=CherchePivot_colonne(T,j);

k:=j+1;
k est lindice de la colonne susceptible d'être permutée avec la colonne j étudiée
while(i=0 and k<t[2]+1) do
tant que l'on ne trouve pas de pivot non nul sous le coefficient a(jj) et tant qu'il reste des colonnes avec qui permuter
    T:=Permut_colonne(j,k,T);   
on permute la colonne étudiée et avec une des colonnes suivantes
    i:=CherchePivot_colonne(T,j);
on chercher un pivot dans notre nouvelle colonne j
    k:=k+1

od;

 if i<>0 then T:=Permut_ligne(i,j,T);  

              T:=zero_sous_pivot(j,T);

              

 fi;

od;

evalm(T);

end:

>

>

> B:=array(1..4,1..3,[[0,0,4],[0,0,5],[0,1,1],[0,1,1]]):

> B=evalm(B);

B = matrix([[0, 0, 4], [0, 0, 5], [0, 1, 1], [0, 1, 1]])

> Gauss_rang(B);

matrix([[1, 1, 0], [0, 1, 0], [0, 0, 0], [0, 0, 0]])

question b)

> rang:=proc(A)
local t,k,B;

t:=taille(A);

B:=Gauss_rang(A);

sum(B[k,k],k=1..min(t[1],t[2]));
le rang est égal au nombre (donc la somme) des coefficients valant 1 sur la diagonale après Gaussianisation
end:

> rang(B);

2

>