function X = gaussjordanpivotmax(A,B) // resolution

printf('avec pivot max')

n=size(A,'c') // calcul de la taille de A et vérif carrée
if ~ size(A,'r')==n  then printf('matrice non carree'), end

// B est recopié dans la colonne n+1 de A
A(:,n+1) = B
print(6,A),

de=1, // pour calculer le determinant en meme temps

for k = 1 : n ,   // etape k
    amax=0, l=k, // recherche du pivot maximal
    for i=k:n
        absA=abs(A(i,k))
        if absA>amax then l=i, amax=absA, end
    end
    if amax==0 then X='matrice singuliere', return, end
    if l<> k then printf('pour pivot max on echange les lignes %d et %d',k,l),
                  aux=A(k,:),A(k,:)=A(l,:),A(l,:)=aux
                  de=-de,
                  print(6,A),
    end,
   
   printf('pivot max = %f',A(k,k)),
   de=de*A(k,k),

   A(k,k:n+1) = A(k,k:n+1)/A(k,k), // nouvelle ligne k

   for i = [1:k-1,k+1:n] ,   // nouvelle ligne i 
       A(i,k:n+1) = A(i,k:n+1) - A(i,k)*A(k,k:n+1) 
   end,
   
   printf('etape %d',k),
   print(6,A),
end,

printf('determinant=%f',de),

X=A(:,n+1),

// gaussjordanpivotmax(A,B)
// A=[2,1,-4;3,3,-5;4,5,-2], B=[8;14;16]       premier exemple du cours
