lunes, 19 de septiembre de 2016

Octave: resolución de sistemas lineales

Vamos a resolver un sistema compatible determinado de la forma \(AX=b\) utilizando el método de Gauss, esto es, haciendo ceros. Para ello, emplearemos una función programada en Octave.

La función es la siguiente.

 function x = gauss(A,b)  
   % Sistema A*x=b resuelto por Gauss  
   n = length(b);  
   x = zeros(n,1);  
   for j = 1:n-1 % fase de eliminación  
     for i = j+1:n  
       if A(i,j) != 0  
         lambda = A(i,j)/A(j,j);  
         A(i,j+1:n) = A(i,j+1:n) - lambda*A(j,j+1:n);  
         b(i)= b(i) - lambda*b(j);  
       end  
     end  
   end  
   for i = n:-1:1 %sustitución hacia atrás  
     x(i) = (b(i) - A(i,i+1:n)*x(i+1:n))/A(i,i);  
   end  
 end  

Vamos a usar como ejemplo las siguientes matrices \(A\) y \(b\).

A=[1 -3 0;4 -2 2;-1 -4 4]
b=[-5;6;3]
\[ \left ( \begin{array}{rrr} 1 & -3 & 0 \\ 4 & -2 & 2 \\ -1 & -4 & 4 \end{array} \right ) \left ( \begin{array}{r} x \\ y \\ z \end{array} \right ) = \left ( \begin{array}{r} -5 \\ 6 \\ 3 \end{array} \right ) \]

Luego copiamos y pegamos en Octave la función anterior.
Finalmente ejecutamos la función, poniendo:
gauss(A,b)

Octave responde mostrando la solución del sistema que es:
\[x=1\] \[y=2\] \[z=3\]

Otro método

Determinemos el rango de la matriz \(A\).



Vamos a construir la matriz ampliada del sistema de ecuaciones anterior. Llamémosla matriz \(G\).

G=[1 -3 0 -5;4 -2 2 6;-1 -4 4 3]

Para ver que se trata de un sistema compatible determinado con solución única vamos a calcular el rango de la matriz \(A\) y el rango de la ampliada que aquí hemos llamado matriz \(G\).


Vamos a efectuar una reducción por Gauss hasta llegar a una matriz triangular superior y triangular inferior, donde la última columna contenga la solución al sistema de ecuaciones.

La reducción gausiana se realiza con el comando siguiente.

  • rref(G)


Observamos que la última columna nos da la solución del sistema de ecuaciones:
\[x=1\] \[y=2\] \[z=3\]

No hay comentarios:

Publicar un comentario