// Eliminacion Gaussiana con sustitusion hacia atras

A=[1 1 0 -3; 0 -1 -1 -5; 0 -4 -1 -7; 0 3 3 2]
b=[4; -7; -15; 8]
N = 4
x = zeros(N)

// Comprobacion
X=inv(A)*b;

SW = 0
// Genracion de la forma triangular inferior
for i=1:N
  a=A(i,i);
  // Checa si es necesario reacomodar renglones
  if a == 0.0 then
    // necesario reacomodar renglones
    for k=i+1:N
       if A(k,i) ~= 0.0 then
         for l=1:N
           // mueve renglon matriz
           t=A(k,l);
           A(k,l)=A(i,l);
           A(i,l)=t;
           // mueve renglon vector
           t=b(k);
           b(k)=b(i);
           b(i)=t;
         end
         a=A(i,i)
         break
       end
     if k >=N then
       disp("No hay solucion")
       SW = 1
     end
    end
  end
  
  if SW == 1 then
    break
  end
  
  for j=i:N
    A(i,j)=A(i,j)/a;
  end
  b(i)=b(i)/a;
 
  for j=i+1:N
    if j == i then
      continue
    end
    t = A(j,i)
    for k=1:N 
      A(j,k)=A(j,k)-t*A(i,k);
    end
    b(j)=b(j)-t*b(i);
  end  
  A
  b
end 


// Sustitucion hacia atras    
if SW == 0 then
   x(N)=b(N)/A(N,N);
   for i=N-1:-1:1
     t=0
     for j=i+1:N
       t = t + A(i,j)*x(j);
     end
     x(i)=(b(i) - t) / A(i,i)
   end

   // Visualiza solicion
   x
   X
end

