restart;
taille:=proc(A)
local t,u,n,p;
t:=[op(2,evalm(A))];
n:=op(2,t[1]);p:=op(2,t[2]);
[n,p];
end:Permut_ligne:=proc(i,j,A)
local B,k,t;
t:=taille(A);
B:=array(1..t[1],1..t[2]);
B:=evalm(A);
for k from 1 to t[2] do
B[i,k]:=A[j,k]; B[j,k]:=A[i,k];
od;
evalm(B);
end: Dilat_ligne:=proc(a,i,A)
local k,t,B;
t:=taille(A);
B:=array(1..t[1],1..t[2]);
B:=evalm(A);
for k from 1 to t[2] do
B[i,k]:=a*A[i,k];
od;
evalm(B);
end:Transvect_ligne:=proc(i,a,j,A)
local k,t,B;
t:=taille(A);
B:=array(1..t[1],1..t[2]);
B:=evalm(A);
for k from 1 to t[2] do
B[i,k]:=A[i,k]+a*A[j,k];
od;
evalm(B);
end:CherchePivot_colonne:=proc(A,i)
local t,k;
t:=taille(A);
if is(i>t[1])then RETURN(IMPOSSIBLE); fi;
for k from i to t[1] do
if is(A[k,i]<>0) then RETURN(k); fi;
od;
RETURN(0);
end:Permut_colonne:=proc(i,j,A)
local B,k,t;
t:=taille(A);
B:=array(1..t[1],1..t[2]);
B:=evalm(A);
for k from 1 to t[1] do
B[k,i]:=A[k,j]; B[k,j]:=A[k,i];
od;
evalm(B);
end: Exercice 3question a)A:=array(1..3,1..4): for i from 1 to 3 do for j from 1 to 4 do A[i,j]:=i+j: od:od:A=evalm(A);A1:=Dilat_ligne(1/2,1,A); L2 <-- L2/2A2:=Transvect_ligne(2,-3,1,A1); L2 <-- L2- 3*L1A3:=Transvect_ligne(3,-4,1,A2); L3 <-- L3- 4*L1question b)Gauss1:=proc(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 \340 A
B:=Dilat_ligne(1/B[1,1],1,B); L1 <--1/a(11) *L1
for k from 2 to t[1] do
B:=Transvect_ligne(k,-B[k,1],1,B); Lk <-- Lk- a(k1)*L1
od;
evalm(B);
end:
Gauss1(A); On retrouve comme pr\351vu:question c)zero_sous_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 \340 A
la proc\351dure ne marche que si l'indice i ne d\351passe pas la taille de la matrice et le pivot a(ii) est NON NUL
if is(i>t[2]) or is(i>t[1]) or is(B[i,i]=0) then RETURN(IMPOSSIBLE); fi;
B:=Dilat_ligne(1/B[i,i],i,B); Li <--1/a(ii) *Li
for k from i+1 to t[1] do k parcourt les indice de ligne en dessous du pivot
B:=Transvect_ligne(k,-B[k,i],i,B); Lk <-- Lk- a(ki)*Li
od;
evalm(B);
end:
question d)Gauss_systeme:=proc(A)
local T,i,j,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 \340 A
for j from 1 to min(t[1],t[2]) do on parcourt les \351l\351ments de la diagonale d'indice jj
i:=CherchePivot_colonne(T,j); On cherche un pivot non nul dans la colonne j
if i<>0 then T:=Permut_ligne(i,j,T); Au cas o\371 l'on trouve ce pivot, on permute avec la ligne actuel et on annule les coefficients sous celui-ci
T:=zero_sous_pivot(j,T);
fi; sinon on passe \340 la colonne suivante
od;
evalm(T);
end:question e)B:=array(1..4,1..5): for i from 1 to 4 do for j from 1 to 5 do B[i,j]:=i+j: od:od:B=evalm(B);Gauss_systeme(B);Ainsi, puisque les deux derni\350res \351quations sont compatibles, il ne nous reste plus qu'\340 \351tudier le syst\350mex+3*y/2+2*z+5*t/2=3; y+2*z+3*t=4;o\371 les inconnues z et t jouent le r\364le de param\350tres