exo5.mw

> restart;

>

> Exercice 5

> question a)

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

t:=taille(A);  

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

B:=evalm(A);  
B
contient une copie exact de A, mais B est modifiable contrairement à A
la procédure ne marche que si l'indice i ne dépasse pas la taille de la matrice et le pivot
a(ii) est DIFFERENT DE 1
if is(i>t[2]) or is(i>t[1]) or is(B[i,i]<>1) then RETURN(IMPOSSIBLE); fi;

 for k from 1 to i-1 do
k
parcourt les indice de ligne au dessus du pivot
 B:=Transvect_ligne(k,-B[k,i],i,B);  
Lk <-- Lk- a(ki)*Li
od;

evalm(B);

end:

>

> question b)

> Gauss_systeme_cramer:=proc(A)
local T,i,j,t,sol;

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
if (t[1]<>t[2]-1) then RETURN(IMPOSSIBLE) fi;
Cette procédure ne fonctionne pas si le systeme n'a pas autant de lignes que d'inconnues
for j from 1 to t[1] do
On annule les coefficients sous la diagonale et on transforme les coefficients diagonaux en 1
 i:=CherchePivot_colonne(T,j);

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

              T:=zero_sous_pivot(j,T);       

 fi;

od;

if (sum(T[k,k],k=1..t[1])<>t[1]) then RETURN(IMPOSSIBLE) fi;
Cette procédure ne fonctionne pas si le systeme n'est pas de CRAMER
sol:=NULL;
for j from  t[1] to 1 by -1  do On annule les coefficients au dessus de la diagonale en commencant par la dernière colonne de la matrice associée au système
   T:=zero_sur_pivot(j,T);
    
   
sol:=T[j,t[2]],sol; sol contient la séquence des coefficients de la dernière colonne de B en commencant par le dernier coefficient yn du second membre
od;

[sol];
end:

>

> question c)

> A:=array(1..4,1..4): for i from 1 to 4 do for j from 1 to 4 do A[i,j]:=min(i,j): od:od:

> A=evalm(A);

A = matrix([[1, 1, 1, 1], [1, 2, 2, 2], [1, 2, 3, 3], [1, 2, 3, 4]])

> B:=array(1..4,1..5): for i from 1 to 4 do for j from 1 to 5 do B[i,j]:=min(i,j): od:od:

> B[1,5]:=y1:B[2,5]:=y2:B[3,5]:=y3:B[4,5]:=y4:

> B=evalm(B);

B = matrix([[1, 1, 1, 1, y1], [1, 2, 2, 2, y2], [1, 2, 3, 3, y3], [1, 2, 3, 4, y4]])

> Gauss_systeme_cramer(B);

[2*y1-y2, 2*y2-y1-y3, 2*y3-y2-y4, y4-y3]