function u=fct_gauss(A,b)
//
// resolution de A.u=b par la methode de Gauss 
//
[n,m]=size(A); /// on suppose n=m
//
// début de la boucle
for j=1:n-1
// choix du pivôt    
      pivot=A(j,j);
      p=j;  // ligne pivot
/// stratégie de pivôt : on prend le plus grand !
      for k=j+1:n
        if abs(A(k,j))>abs(pivot) then
          pivot=A(k,j);
          p=k;
        end
      end
////////     on met le pivot en place en permutant les j-ième et p-ième lignes
      entrepot=A(j,j:n);
      A(j,j:n)=A(p,j:n);
      A(p,j:n)=entrepot;
      entrepot=b(j);
      b(j)=b(p);
      b(p)=entrepot; 
/////     on nettoie sous le pivot
    for i=j+1:n
	c=A(i,j)/A(j,j);
      A(i,j:n)=A(i,j:n)-c*A(j,j:n);
      b(i)=b(i)-c*b(j);
    end
// fin boucle : la matrice est triangulaire supérieure !
end
// on résout le système en remontant
u=zeros(n,1);
u(n)=b(n)/A(n,n);
for j=n-1:-1:1,
  u(j)=(b(j)-A(j,j+1:n)*u(j+1:n))/A(j,j);
end
/// fin remontée///
endfunction
//
tic();
n=100;A=rand(n,n);b=A*ones(n,1);
u=fct_gauss(A,b);
disp('erreur norme 2');disp(norm(u-ones(n,1)));
disp('temps de calcul:');disp(toc())
