function gjinv = gaussjordaninvsym(A)

printf("gauss-jordan-inverse-sym (avec une seule matrice)\n")

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

print(6,A),

de=1, // pour calculer le determinant en meme temps


for k = 1 : n ,   // etape k
   if A(k,k)==0 then // recherche d'un pivot non nul
       printf('pivotnul k=%d',k),
       gjinv='pivot nul, cet algorithme ne s''applique pas'
       return
    end,
   
   p=A(k,k)  // pivot
   printf(' '),
   printf('pivot=%f',p),

   A(k+1:n,k)=A(k,k+1:n)'
   A(k,[1:k-1,k+1:n]) = A(k,[1:k-1,k+1:n])/p, // nouvelle ligne k

   for i = [1:k-1,k+1:n] ,   // nouvelle ligne i 
       i1=max(i,k+1)
      i2=min(i,k-1)
        if k>1 then  A(i,[1:i2,i1:n]) = A(i,[1:i2,i1:n]) - A(i,k)*A(k,[1:i2,i1:n]),
         else  A(i,[i1:n]) = A(i,[i1:n]) - A(i,k)*A(k,[i1:n]),
         end
   end,

   A([k+1:n],k) = -A([k+1:n],k)/p,

   A(k,k) = 1/p, 
   
   printf('etape %d',k),
   print(6,A),
   de=de*p,
end,

printf('determinant=%f',de),

 for i=1:n,                   
   A(i,i+1:n)=A(i+1:n,i)'     
 end                          

print(6,A)

gjinv=A, // c'est l'inverse

// ////////////////////////////////////////
// gaussjordaninvsym(A)

// A=[-1 2 1;2 4 3;1 3 2]
// A=[-1 2 1;0 4 3;0 0 2]

//////////////////////////////////////////
// 
// --->A
//  A  =
// 
// ! - 1.    2.    1. !
// !   2.    4.    3. !
// !   1.    3.    2. !     
// 
// ->gaussjordaninvsym(A)
// gauss-jordan-inverse-sym (avec une seule matrice)
// 
//  A  =
// 
// ! - 1.    2.    1. !
// !   2.    4.    3. !
// !   1.    3.    2. !
//  pivot=-1.000000etape 1 A  =
// 
// ! - 1.  - 2.  - 1. !
// !   2.    8.    5. !
// !   1.    3.    3. !
//  pivot=8.000000etape 2 A  =
// 
// ! -  .5   - 2.        .25  !
// !    .25     .125     .625 !
// ! -  .25  -  .625  -  .125 !
//  pivot=-0.125000etape 3 A  =
// 
// ! - 1.  - 2.     .25  !
// ! - 1.  - 3.     .625 !
// !   2.    5.  - 8.    !
// determinant=1.000000 A  =
// 
// ! - 1.  - 1.    2. !
// ! - 1.  - 3.    5. !
// !   2.    5.  - 8. !
// 
// 
// 
// ans  =
// 
// ! - 1.  - 1.    2. !
// ! - 1.  - 3.    5. !
// !   2.    5.  - 8. !
//                          
// -->1/A-ans
//  ans  =
// 
// !   0.    0.    0. !
// !   0.    0.    0. !
// !   0.    0.    0. !         
// 
// -->U
//  U  =
// 
// ! - 1.    2.    1. !
// !   0.    4.    3. !
// !   0.    0.    2. !    
// 
// -->gaussjordaninvsym(U)
// gauss-jordan-inverse-sym (avec une seule matrice)
// A  =
// 
// ! - 1.    2.    1. !
// !   0.    4.    3. !
// !   0.    0.    2. !
//  pivot=-1.000000etape 1 A  =
// 
// ! - 1.  - 2.  - 1. !
// !   2.    8.    5. !
// !   1.    0.    3. !
//  pivot=8.000000etape 2 A  =
// 
// ! -  .5   - 2.        .25  !
// !    .25     .125     .625 !
// ! -  .25  -  .625  -  .125 !
//  pivot=-0.125000etape 3 A  =
// 
// ! - 1.  - 2.     .25  !
// ! - 1.  - 3.     .625 !
// !   2.    5.  - 8.    !
// determinant=1.000000 A  =
// 
// ! - 1.  - 1.    2. !
// ! - 1.  - 3.    5. !
// !   2.    5.  - 8. !
// 
// 
// 
// ans  =
// 
// ! - 1.  - 1.    2. !
// ! - 1.  - 3.    5. !
// !   2.    5.  - 8. !
//                                                                     
