itype=evstr(x_dialog('quelle matrice (A1 a A4)?','1'));
ipivot=evstr(x_dialog('pivot partiel (1) ou non (0)','1'));
if (itype<>1) then n=evstr(x_dialog('valeur de n','8')),else n=2;end
//
// Affectation des matrices A1 a A4
//
if (itype==1) then 
   A=[1E-20,1;1,1];b=A*[1;1];
end
if (itype==2) then
  L=ones(n,1)*(1:n);A=ones(n,n)./(L+L'-1);b=A*ones(n,1);
end
if (itype==3) then 
  c=(1:n)';
  A=ones(n,1);for i=1:(n-1),A=[A,c];c=c.*c;end;b=A*ones(n,1);
end
if (itype==4) then 
 A=zeros(n^2,n^2);
 L1=-eye(n,n);
 L2=toeplitz([4 -1 zeros(1,n-2)]);	
 for i=1:(n-1)
  i1=(i-1)*n;
  i2=i*n;
  A((i1+1):(i1+n),(i1+1):(i1+n)) = L2;
  A((i2+1):(i2+n),(i1+1):(i1+n)) = L1;
  A((i1+1):(i1+n),(i2+1):(i2+n)) = L1;
 end;
 i1=(n-1)*n;
 A((i1+1):(i1+n),(i1+1):(i1+n)) =L2;
 b=A*ones(n^2,1);n=n^2;
end
A0=A;b0=b;
//
// Methode du pivot de Gauss
//
timer();
for j=2:n
//
 if (ipivot==1) then                              // Cas avec strategie de pivot              
  ind=find(abs(A((j-1):n,j-1))==max(abs(A((j-1):n,j-1))));
  st=A(j-2+ind(1),(j-1):n);A(j-2+ind(1),(j-1):n)=A(j-1,(j-1):n);A(j-1,(j-1):n)=st;
  st=b(j-2+ind(1));b(j-2+ind(1))=b(j-1);b(j-1)=st; 
 end
//
 for i=j:n
   m=A(i,j-1)/A(j-1,j-1);
   A(i,:)=A(i,:)-m*A(j-1,:);
   b(i)=b(i)-m*b(j-1);
 end
end
u=zeros(n,1);u(n)=b(n)/A(n,n);
for j=(n-1):-1:1
 u(j)=1/(A(j,j))*(b(j)-A(j,j+1:n)*u(j+1:n));
end
//
disp('temps de calcul Gauss:');disp(timer());
disp('erreur (L2) par Gauss:');disp(norm(u-ones(n,1)));
timer();
disp('erreur (L2) par linsolve:');disp(norm(linsolve(A0,-b0)-ones(n,1)));
disp('temps de calcul par linsolve:');disp(timer());









