miércoles, 28 de agosto de 2013

Resolución de sistemas compatibles determinados con wxMaxima (I): métodos directos

En esta nueva serie de entradas voy a exponer cómo resolver con la ayuda de wxMaxima sistemas (lineales) compatibles determinados (con una única solución).

En esta primera entrada vemos cómo ejecutar en wxMaxima algunos de los denominados métodos directos: el método de la inversa, el método de Cramer y el método de Gauss.

Pongamos como ejemplo que queremos resolver el siguiente sistema de ecuaciones lineales:

10x+4y+4z+3t+5s=1
  4x+8y+2z+2t+5s=1
  4x+2y+6z+3t+4s=1
  3x+2y+3z+8t+5s=1
  5x+5y+4z+5t+6s=1

Lo primero es introducir en wxMaxima la matriz del sistema (A) y el vector de términos independientes (b).
A:matrix([10,4,4,3,5],[4,8,2,2,5],[4,2,6,3,4],[3,2,3,8,5],[5,5,4,5,6]);
b:[1,1,1,1,1];


Corroboramos que el sistema anterior es compatible determinado, viendo que el rango de A es máximo (o que su determinante es no nulo)
rank(A);
5

Vamos ahora con los métodos directos de resolución de sistemas compatibles determinados.


Método de la inversa:

x:invert(A).b;



Método de Cramer:

d:determinant(A);
756

x:zerofor(b);
[0,0,0,0,0]

for i : 1 thru matrix_size(A)[2] do x[i]:(-1)^(i+matrix_size(A)[2])*determinant(addcol(submatrix(A,i),b))/d;
x;



Método de Gauss:

M:addcol(A,b);


T:triangularize(M);


for i:matrix_size(A)[2] thru 1 step -1 do
 ( x[i]:T[i,matrix_size(A)[2]+1]/T[i,i],
 for j:i+1 thru matrix_size(A)[2] step 1 do
  x[i]:x[i]-T[i,j]*x[j]/T[i,i] );

x;




En la próxima entrada de la serie se tratarán los métodos basados en factorizaciones de la matriz del sistema: método de factorización LU, método de factorización de Cholesky y método de factorización QR.


Entradas relacionadas:

No hay comentarios: