El mtodo de Gauss es similar al mtodo de Gauss-J ordan. Aqu se trata de transformar la matriz del sistema a una forma triangular superior. Si esto es posible entonces la solucin se puede obtener resolviendo el sistema triangular resultante.
Ejemplo. Con el Mtodo de Gauss resuelva el sistema de ecuaciones lineales del problema planteado al inicio de este captulo
La matriz de los coeficientes ha sido transformada a la forma triangular superior
De este sistema se obtiene la solucin mediante una sustitucin directa comenzando por el final:
3 2 1 x 1.8 x 4.575 1.375(1.8) 2.1 x 4.5 0.5(2.1) 1.25(1.8) 1.2 = = = = =
4.3.1 Formulacin del mtodo de Gauss Para unificar la descripcin algortmica, es conveniente aumentar la matriz A con el vector B pues deben realizarse las mismas operaciones simultneamente:
1,1 1,2 1,n 1,n 1 2,1 2,2 2,n 2,n 1 n,1 n,1 n,n n,n 1 a a ... a a a a ... a a A | B ... ... ... a a ... a a + + +
=
En donde la columna de los coeficientes se define:
i,n 1 i a b + = , i=1, 2, 3,. . ., n
La formulacin se obtiene directamente del mtodo de Gauss-J ordan en la que la reduccin de las filas nicamente se realiza en la sub-matriz triangular inferior. Las transformaciones convierten la matriz aumentada en la forma triangular superior:
. . . . 1,1 1,2 1,n 1,n 1 1,n 1 1,2 1,n 2,1 2,2 2,n 2,n 1 2,n 1 2,n n,1 n,1 n,n n,n 1 n,n 1 a a ... a a a 1 a ... a a a ... a a a 0 1 ... a A | B ... ... ... ... ... ... a a ... a a a 0 0 ... 1 + + + + + +
=
De sistema triangular se puede obtener directamente la solucin. Para facilitar la notacin expandimos la forma triangular final obtenida:
1,n 1 1,2 1,n 2 1,n 1 1,n 2,n 1 2,n 2 2,n 1 2,n n 2,n 1 n 2,n 1 n 2,n n 1,n 1 n 1,n n,n 1 a 1 a ... a a a a 0 1 ... a a a ... ... ... ... ... ... a 0 0 ... 1 a a a 0 0 ... 0 1 a a 0 0 ... 0 0 1 + + + + +
La solucin se obtiene del sistema triangular superior comenzando desde el final:
n n, n 1 x a +
n 1 n 1, n 1 n 1, n n x a a x +
n 2 n 2, n 1 n 2, n 1 n 1 n 2, n n x a (a x a x ) +
. . . etc
Con la formulacin del mtodo anterior (Gauss-J ordan) modificando el ndice de las filas para reducir solamente debajo de la diagonal y con la formulacin para resolver el sistema triangular resultante, se define el algoritmo para el mtodo de Gauss: 67
ALGORITMO BSICO DE GAUSS
a: matriz aumentada del sistema de n ecuaciones lineales
Para e =1, 2, . . ., n Para j=e, e+1, ..., n+1
e,j e,j e,e a a / a Normalizar la fila e ( e,e a 0 ) Fin Para i=e+1, e+2, n Para j=e, e+1, ..., n+1
i,j i,j i,e e,j a a a a Reducir la filas debajo de la fila e Fin Fin Fin
n n, n 1 x a + Resolver el sistema triangular superior Para i=n-1, n-2, ..., 1 s 0 Para j=i+1, i+2, ..., n
i,j j s s a x + Fin
i i,n 1 x a s +
Fin
4.3.2 Eficiencia del mtodo de Gauss Sea n el tamao del problema y T(n) la cantidad de operaciones aritmticas que se realizan En la normalizacin: T(n) =O(n 2 ) (dos ciclos anidados) En la reduccin: T(n) =O(n 3 ) (tres ciclos anidados) En la obtencin de la solucin: T(n) =O(n 2 ) (dos ciclos anidados) Por lo tanto, este mtodo es de tercer orden: T(n) = O(n 3 )
Mediante un recorrido de los ciclos del algoritmo, se puede determinar en forma ms precisa: T(n) = n 3 /3 + O(n 2 ) con lo que se puede concluir que el mtodo de Gauss es ms eficiente que el mtodo de Gauss-J ordan. Se supone n grande. Esta diferencia se la puede constatar experimentalmente resolviendo sistemas grandes y registrando el tiempo de ejecucin.
4.3.3 Instrumentacin computacional En esta primera versin del algoritmo se supondr que el determinante de la matriz es diferente de cero y que no se requiere intercambiar filas. La codificacin en MATLAB sigue directamente la formulacin matemtica descrita anteriormente. Se usa notacin compacta para manejo de matrices.
function x=gauss1(a,b) n=length(b); a=[a,b]; %Matriz aumentada for e=1:n a(e,e:n+1)=a(e,e:n+1)/a(e,e); %Normalizar la fila e for i =e+1:n %Reducir otras filas a(i,e:n+1)=a(i ,e:n+1)-a(i,e)*a(e,e:n+1); end end x(n,1)=a(n,n+1); %Solucin del sistema triangular for i=n-1:-1:1 x(i,1)=a(i,n+1)-a(i,i +1:n)*x(i+1:n,1); end 68
Columna e 4.3.4 Estrategia de pivoteo Al examinar la eficiencia de los mtodos directos para resolver sistemas de ecuaciones lineales se observa que la operacin de multiplicacin est en la seccin crtica del algoritmo con eficiencia O(n 3 ).
Formulacin del mtodo de Gauss:
Etapa e = 1, 2, . . ., n
Normalizar la fila e: a / a a e , e j , e j , e , j=e, e+1, ..., n+1; 0 a e , e
Reducir las otras filas:
j , e e , i j , i j , i a a a a , j=e, e+1, ..., n+1; i=e+1, e+2, ..., n
Etapa e:
1,2 1,e 1,n 1,n 1 2,e 2,n 2,n 1 e,n e,n 1 n 1,e n 1,n n 1,n 1 n,e n,n n, e n ,e 1 1 a ... a ... a a 0 1 ... a ... a a ... ... ... ... ... ... ... 0 0 ... ... a a ... ... ... ... ... ... ... 0 0 ... a ... a a 0 0 ... a ... a a a + + + + +
Recordando la definicin del error de redondeo propagado en la multiplicacin: E XY = X E Y + Y E X
Una estrategia para disminuir el error de redondeo consiste en reducir el valor de los operandos que intervienen en la multiplicacin.
En la estrategia de Pivoteo Parci al , antes de normalizar la fila e se busca en la columna e de cada fila i = e, e+1, . . ., n cual es el elemento con mayor magnitud. Si se usa este elemento como divisor para la fila e, el cociente e,j a tendr el menor valor. Este factor permite disminuir el error cuando se realiza la etapa de reduccin de las otras filas.
Por otra parte, si en esta estrategia de bsqueda, el valor elegido como el mayor divisor no es diferente de cero, se concluye que en el sistema existen ecuaciones redundantes o incompatibles, entonces el sistema no tiene solucin nica y el algoritmo debe terminar
Transformaciones Tansformaciones Fila e 69
4.3.5 Instrumentacin computacional del mtodo de Gauss con pivoteo La siguiente instrumentacin en MATLAB del mtodo de eliminacin de Gauss incluye la formulacin descrita y la estrategia de pivoteo parcial vista anteriormente, en notacin matricial compacta de MATLAB. En esta instrumentacin final se incluye un chequeo del divisor para prevenir el caso de que el sistema sea singular aunque, por los errores de redondeo, no sea exactamente igual a cero. Tambin se verifica que sea una matriz cuadrada.
function x=gauss(a,b) [n,m]=size(a); if n~=m %Verificar si la matriz es cuadrada x=[ ]; return; end a=[a,b]; %Matriz aumentada for e=1:n [z, p]=max(abs(a(e:n,e))); %Pivoteo por filas p=p+e-1; t=a(e,e:n+1); %Intercambio de filas a(e,e:n+1)=a(p,e:n+1); a(p,e:n+1)=t; if abs(a(e,e))<1.0e-10 %Si el divisor es ~cero, no hay solucin x=[ ]; return; end a(e,e:n+1)=a(e,e:n+1)/a(e,e); %Normalizar la fila e for i =e+1:n %Reducir otras filas a(i,e:n+1)=a(i ,e:n+1)-a(i,e)*a(e,e:n+1); end end x(n,1)=a(n,n+1); %Solucin del sistema triangular for i=n-1:-1:1 x(i,1)=a(i,n+1)-a(i,i +1:n)*x(i+1:n,1); end
La funcin [z,p]=max(v) de MATLAB entrega en z el mayor valor, y en p el nmero de la fila en la que est ubicado este valor en el vector v
Ejemplo. Desde la ventana de comandos de MATLAB, use la funcin Gauss para resolver el sistema:
1 2 3 2 3 7 x 3 2 5 6 x 5 8 9 4 x 8
=
Escriba en la ventana de comandos de MATLAB
>> a=[2, 3, 7; -2, 5, 6; 8, 9, 4]; Matriz de coeficientes >> b=[3; 5; 8]; Vector de constantes >> x=gauss(a,b) Llamada a la funcin x = -0.0556 Solucin calculada 0.9150 0.0523 70
4.3.6 Funciones de MATLAB para sistemas de ecuaciones lineales MATLAB tiene un soporte muy potente para resolver sistemas de ecuaciones lineales. Sugerimos entrar al sistema de ayuda de MATLAB y revisar la amplia informacin relacionada con este tema.
La forma ms simple de resolver un sistema lineal, si la matriz de coeficientes es cuadrada y no- singular, es usando la definicin de inversa de una matriz MATLAB.
Ejemplo. Resuelva el ejemplo anterior con la funcin i nv de MATLAB
>> a=[2, 3, 7; -2, 5, 6; 8, 9, 4]; Matriz de coeficientes >> b=[3; 5; 8]; Vector de constantes >> x=inv(a)*b Invertir la matriz de coeficientes x = Solucin calculada por MATLAB -0.0556 0.9150 0.0523
Una forma ms general para resolver sistemas lineales, incluyendo sistemas singulares se puede hacer con la funcin rref de MATLAB. Esta funcin reduce una matriz a su forma escalonada con 1s en la diagonal.
Ejemplo. Resuelva el ejemplo anterior con la funcin rref de MATLAB
La ltima columna de la matriz aumentada resultante contiene la solucin.
4.3.7 Clculo del determinante de una matriz El algoritmo de Gauss transforma la matriz cuadrada de los coeficientes a la forma triangular superior. En una matriz triangular, el determinante es el producto de los coeficientes de la diagonal principal. Por lo tanto, el determinante se puede calcular multiplicando los divisores colocados en la diagonal principal, considerando adems el nmero de cambios de fila que se hayan realizado en la estrategia de pivoteo.
Sean A: matriz cuadrada T: Matriz triangular superior obtenida con el algoritmo de Gauss a i,i : Elementos en la diagonal de la matriz T. Son los divisores k: Nmero de cambios de fila realizados det(A): Determinante de la matriz A
Entonces
n k i ,i i 1 det(A) ( 1) a = =
71
4.3.8 Instrumentacin computacional para clculo del determinante function d=determinante(a) %Determinante de una matriz cuadrada %Mediante reduccin a una matriz triangular %El determinante es el producto de los pivotes [n,m]=size(a); if n~=m %La matriz debe ser cuadrada d=0; return end signo=1; %cambios de fila d=1; for e=1:n [z, p]=max(abs(a(e:n,e))); %Pivoteo por filas p=p+e-1; t=a(e,e:n); %Intercambio de filas a(e,e:n)=a(p,e:n); a(p,e:n)=t; if e~=p %Cambio de fila =cambio de signo signo=signo*(-1); end if abs(a(e,e))<1.0e-10 %Divisor cercano a 0: matriz singular d=0; return; end d=d*a(e,e); %Multiplicacin de pivotes a(e,e:n)=a(e,e:n)/a(e,e); %Normalizar la fila e for i =e+1:n %Reducir otras filas a(i,e:n)=a(i,e:n)-a(i,e)*a(e,e:n); end end d=d*signo; %Determinante