Práctica #8: Método de Gauss Jordan.
Aldaco J., Blanco C., Granados D., Pérez J.
March 22, 2011
Introducción.
En prácticas anteriores, se desarrollaron métodos para obtener el valor de x que satisface una única ecuación, f (x) = 0. En esta ocasión se estudiarán los sistemas de ecuaciones algebraicas lineales, los cuales tienen valores múltiples x1, x2, x3, ..., xn que satisfacen de forma simultánea ecuaciones de la forma:
a11x1+ a12x2+ ... + a1nxn= b1
a21x1+ a22x2+ ... + a2nxn= b2
...
an1x1+ an2x2+ ... + annxn= bn
Donde las a son los coecientes constantes, las b son los términos independientes y n es el número de ecuaciones. Uno de los algoritmos más utilizados para la solución de esta clase de sistemas de ecuaciones es el método de Gauss. Este proceso consiste de dos pasos : eliminación hacia delante y sustitución atrás. En el primero de ellos, se reduce el conjunto de ecuaciones a un sistema triangular superior. Posteriormente, se despejan los diversos valores de las variables de forma progresiva siguiendo el procedimiento descrito por la siguiente fórmula:
xi=
b(i−1)i −Pa(i−1) ij xj
ai−1ii para i = n − 1, n − 2, ...
Si en el proceso de encontrar las soluciones de un sistema de ecuaciones se genera una matriz identidad en lugar de una triángular, el algoritmo utilizado es el método de Guass-Jordan. Este método es una variación del de Gauss y su principal diferencia radica en que cuando una incógnita se elimina en Gauss-Jordan ésta es eliminada en otras ecuaciones y no sólo en las subsecuentes.
En el siguiente trabajo se describe la implementación de una función para solucionar sistemas de ecuaciones mediante la utilización de este método y los resultados obtenidos al utilizarla para solucionar problemas de álgebra lineal.
Diagrama de ujo del método.
Planteamiento de la Función en Scilab.
function dupa=gaussi(A,b)//se define la funcion k=1
q=length(b)
for i=1:q//se trabaja con la matriz y el vector para posicionar en el renglon 1 if abs(A(i,1))==max(abs(A(:,1)))
c=A(1,:) d=b(1)
A(1,:)=A(i,:) //Esta parte del código encuentra el valor mayor absoluto b(1)=b(i) //lo acomoda en la A(1,;) y lo renombra los vectores.
A(i,:)=c b(i)=d
end end
for j=2:q //para hacer ceros hacia abajo b(j)=b(j)-b(k)*((A(j,k))/(A(k,k)))
A(j,:)=A(j,:)-(A(k,:))*((A(j,k))/(A(k,k))) end
for w=2:q-1
for i=2:q // se trabaja con el renglon 2 y el tres, cuatro dependiendo de la matriz if abs(A(i,w))==max(abs(A(w:q,w)))
c=A(w,:) d=b(w)
A(w,:)=A(i,:) //Esta parte del código encuentra el valor mayor absoluto b(w)=b(i) //lo acomoda en la A(2,;) y lo renombra los vectores. A(i,:)=c b(i)=d end end w=w+1 end
for a=2:q-1 //este es para hacer los ceros en el ultimo renglón for i=a+1:q b(i)=b(i)-b(a)*(A(i,a)/A(a,a)) A(i,:)=A(i,:)-A(a,:)*(A(i,a)/A(a,a)) i=i+1 end a=a+1 end for
h=2:q //para hacer ceros en las démas entradas for i=1:h-1 b(i)=b(i)-b(h)*((A(i,h))/(A(h,h))) A(i,:)=A(i,:)-(A(h,:))*(A(i,h)/A(h,h)) end end
for i=1:q //con esto se divide la matriz para dar 1 y los resultados para dar los valores b(i)=b(i)/A(i,i);
A(i,i)=1 i=i+1 end
dupa=[A,b]//se despliega el resultado con el gaussi(A,b) endfunction
Planteamiento de Problemas de Álgebra Lineal.
Después de haber denido en Scilab las funciones cuyo propósito era solucionar sistemas de ecuaciones mediante el método de Gauss-Jordan (con y sin pivoteo), éstas fueron utilizadas en diversos problemas. En primer lugar, fue planteada la siguiente situación:
Una granja incluye en la dieta de sus animales vitaminas A, B y K. En cierto mes compraron 20 cajas de vitamina A, 40 cajas de vitamina B y 50 cajas de vitamina K pagando $70000, al mes siguiente compraron 30 cajas de vitamina A, 20 de vitamina B y 50 cajas de vitamina K por un total de $51520, un mes después compraron 40 de vitamina A, 10 de vitamina B y 70 de vitamina K con un costo de 45000. Si el precio por caja no ha variado en todo ese tiempo, ¾Qué precio tiene cada caja de vitaminas?.
Al analizar los enunciados, es posible darse cuenta que es factible plantear este problema como un sistema de ecuaciones lineales. Las tres ecuaciones que componen el sistema son las siguientes:
20A − 40B − 50K = 70, 000 30A − 20B + 50K = 51520 40A + 10B + 70K = 45000
Este sistema de ecuaciones puede ser representado de forma matricial de la siguiente manera: 20 −40 −50 70, 000 30 −20 50 51520 40 10 70 45000
Por lo tanto, podemos utilizar la función que previamente denimos para encontrar los valores de A, B y K que satisfagan las tres ecuaciones. Para introducir el sistema de ecuaciones, debemos separar la matriz de coecientes y el vector de términos independientes, de la siguiente manera:
A = 20 −40 −50 30 −20 50 40 10 70 , b = 70, 000 51520 45000
Después de haber hecho esto, se procedió a introducir estos valores en la función , arrojando como resultado el siguiente vector: X = 1679.8202 −625.48315 −227.68539
Por lo tanto, hemos encontrado un vector X, que satisface el sistema lineal AX = b. Para comprobar que la solución que encontramos es correcta, simplemente procedemos a llevar a cabo la siguiente multiplicación:
20 −40 −50 30 −20 50 40 10 70 1679.8202 −625.48315 −227.68539 = 70, 000 51520 45000 Esto demuestra que el vector C que obtuvimos satisface el sistema.
Posteriormente, dados los siguientes sistemas de ecuaciones lineales:
0.1 + 0.05x2+ 0.2x3= 1.3 0.02x1+ 0.03x2− 0.04x3= −0.04
12x1+ 25x2− 3x3= 10 16x1+ 2x2+ 4x3 = 0
−7x1+ 8x2+ 15x3= 2 50x1+ 10x2+ 8x3= 6
Fueron buscadas sus soluciones mediante el método de Gauss-Jordan con y sin pivoteo. La manera para introducir estos sistemas lineales a las funciones denidas en Scilab es homóloga la del problema anterior. Introduciendo de forma separada la matriz de coecientes y el vector de términos independientes del sistema.
Resumen de Resultados.
En la tabla 1 se muestran cada uno de los sistemas de ecuaciones propuestos en la práctica ( en su notación matricial) y sus respectivas soluciones utilizando el método de Gauss Jordan por pivoteo . Por cuestiones de espacio, las soluciones son mostradas como vectores renglones, sin embargo, son vectores columna.
Tabla 1. Resultados de los Sistemas Lineales.
Problema Sistema a Resolver Solución con pivoteo
1 A = 20 −40 −50 30 −20 50 40 10 70 , b = 70, 000 51520 45000 X = 1679.8202 −625.48315 −227.68539 2 A = 0.1 0.05 0.02 12 25 −3 −7 8 15 , b = 1.3 10 2 X = 13.68745 −5.0634199 9.2213005 3 A = 0.02 0.03 0.04 16 2 4 50 10 8 , b = −0.04 0 6 X = 0.2941176 0.1176471 −1.2352941
En la tabla 2, se muestra el número de problema, y tres soluciones de estos: Las que se encontraron mediante el método de Gauss Jordan, con y sin pivoteo y la solución exacta del Problema. Para nes comparativos, fue calculado el error relativo entre ambas.
Tabla 2. Comparación de Soluciones entre distintas variaciones del método de Gauss Jordan.
Problema Solución exacta Solución con Pivoteo Solución sin Pivoteo Error Relativo
1 X = 1679.8202 −625.48315 −227.68539 X = 1679.8202 −625.48315 −227.68539 X = 1679.8202 −625.48315 −227.68539 0 2 X = 13.68745 −5.0634199 9.2213005 X = 13.68745 −5.0634199 9.2213005 X = 13.68745 −5.0634199 9.2213005 0 3 X = 0.2941176 0.1176471 −1.2352941 X = 0.2941176 0.1176471 −1.2352941 X = 0.2941176 0.1176471 −1.2352941 0
Conclusión.
Al nalizar los procedimientos de la práctica anterior se podido conocer la utilidad la utilidad del método de Gauss-Jordan para la solución de sistemas de ecuaciones lineales. Además, se conocieron dos varientes de este método, las cuales pueden ser utilizada en diversas situaciones.
También se pudo observar que en el caso de matrices ideales, no existe una diferencia signicativa entre utilizar el Método de Gauss Jordan con pivoteo o sin éste, sin embargo, no se debe de aplicar el mismo criterio cuando se solucionan matrices cuyas soluciones no son exactas, como en el caso de sistemas lineales que provienen de problemas reales de ingeniería.
Aportaciones Personales.
Josshimar Aldaco:
Se sabe que existen muchos problemas ingenieriles que se suelen resolver por sistemas de ecuaciones, muchos de ellas son lineales, el empleo de Scilab para la solución de este tipo de sistemas me parece interesante debido a su gran utilidad al simplicar los cálculos y operaciones, pudiendo así destinar mayores esfuerzos y tiempo en otros
aspectos que nos competen como ingenieros. Por mencionar un ejemplo se tiene a los sistemas homogéneos con más de 2 incógnitas. Por ejemplo:
Un ingeniero industrial supervisa la producción de cuatro tipos de computadoras. Se requieren cuatro clases de recursos: Horas-hombre; metales; plásticos y componentes electrónicos.
producción de cada tipo de computadoras. Si se dispone diariamente de 504 horas-hombre, 1970 Kg de metal, 970 Kg de plástico y 601 componentes electrónicos. ¾Cuántas computadoras de cada tipo se pueden construir por día?
Bien se puede emplear el código usado en esta práctica para el sistema de ecuaciones (siendo x, y, z y w, los tipos de computadora 1, 2, 3 y 4 respectivamente) al conocer los datos y aplicarlo en una matriz o sistema de ecuaciones, posteriormente se pueden resolver y encontrar la respuesta.
Christian Blanco:
En la presente práctica pude comprobar el uso de un método que da buenas aproximaciones en la resolución de sistemas de ecuaciones, el método de Gauss Jordan, se pudo entender la lógica del programa al estar dividido por pequeñas tareas de acuerdo a cada ciclo dentro del código. A partir de esto se observó el pivoteo parcial, obteniendo un grado de programación complejo mas no comparable al del pivoteo total presentado por Grossman(2005), el hecho de manejar esto y al compararlo con los resultados obtenidos por scilab y maxima se obtuvieron resultados similares, a excepción de cuando se necesita una solución falsa obtenida a partir de mínimos cuadrados por el comando A\b.
Un ejemplo práctico útil en la ingeniería en biotecnología representa el uso de estos sistemas de ecuaciones en el manejo del comportamiento de las variables de un reactor biológico, esto es por ejemplo en una columna de destilación al hacer el balance de materia para n numero de platos se plantea un sistema matricial tri-diagonal, el control de sistemas electrónicos dentro de estos, como lo es en el calculo del valor de los componentes que lo componen ya sean resistencias, voltaje, corriente entre otras.
Diego Granados:
Una de mis aplicaciones favoritas de la eliminación de Gauss Jordan es el balanceo de ecuaciones químicas. Para esto, se asignan variables a cada una de las especies químicas participantes en la reacción y los valores de las las corresponden al número de átomos de cada elemento que existe de cada molécula. Supongamos que tenemos la siguiente reacción:
C6H12O6+ O2→ CO2+ H2O
Si a cada molécula le asignamos una variable y a cada elemento un renglón de una matriz de manera que: Molécula Variable Asignada
C6H12O6 A
O2 B
CO2 C
H2O D
Obtenemos la siguiente matriz:
A = 6 0 1 0 12 0 0 2 6 2 2 1 0 0 0 0
La la de ceros fue agreagada para llevar a cabo el cálculo. Como puede intuirse, el sistema tiene múltiples soluciones. Al resolverse, se eligen las soluciones con múltiplos más bajos.
Jordan Pérez:
Nos damos cuenta que este procedimento es muy útil cuando se tienen cantidades grandes y se evita el error, existen muchas aplicaciones para este método sin embargo los resultado obtenidos aqui son muy parecidos a los
encontrados por otros métodos. Las aplicaciones mas remarcables en el ambiente biotecnólogo son desde la deter-minacion de corriente hasta resolver sistemas biologicos donde se tengan dos poblaciones de microorganismos. Los sistemas de eliminacion de gauss jordan con pivoteo nos proporcionan una herramienta nueva, y al mismo tiempo nos impulsan a crear códigos que pueden llegar a ser más complejos y completos para solucionar ecuaciones sin necesidad de restricciones.