Método de Gauss Jordan

10
57 4 MÉTODOS DIRECTOS PARA RESOLVER SISTEMAS DE ECUACIONES LINEALES En este capítulo se estudia el componente algorítmico y computacional de los métodos directos para resolver sistemas de ecuaciones lineales. Ejemplo. Un comerciante compra tres productos: A, B, C, pero en las facturas únicamente consta la cantidad comprada y el valor total de la compra. Se necesita determinar el precio unitario de cada producto. Para esto dispone de tres facturas con los siguientes datos: Factura Cantidad de A Cantidad de B Cantidad de C Valor pagado 1 4 2 5 $18.00 2 2 5 8 $27.30 3 2 4 3 $16.20 Análisis Sean 1 2 3 x ,x ,x variables que representan al precio unitario de cada producto. Entonces, se puede escribir: 1 2 3 1 2 3 1 2 3 4x 2x 5x 18.00 2x 5x 8x 27.30 2x 4x 3x 16.20 + + = + + = + + = El modelo matemático resultante es un sistema lineal de tres ecuaciones con tres variables. En general, se desea resolver un sistema de n ecuaciones lineales con n variables 1,1 1 1,2 1 1,n n 1 2,1 1 2,2 1 2,n n 2 n,1 1 n,2 1 n,n n n a x a x ... a x b a x a x ... a x b ... a x a x ... a x b + + + = + + + = + + + = En donde i,j a ∈ℜ : Coeficientes i b ∈ℜ : Constantes i x ∈ℜ : Variables cuyo valor debe determinarse En notación matricial: 1,1 1,2 1,n 1 1 2,1 2,2 2,n 2 2 n,1 n,1 n,n n n a a ... a x b a a ... a x b ... ... ... ... a a ... a x b = Simbólicamente AX = B Siendo 1,1 1,2 1,n 1 1 2,1 2,2 2,n 2 2 n,1 n,1 n,n n n a a ... a b x a a ... a b x A ; B ; X ... ... ... ... a a ... a b x = = =

Transcript of Método de Gauss Jordan

Page 1: Método de Gauss Jordan

57

4 MÉTODOS DIRECTOS PARA RESOLVER SISTEMAS DE ECUACIONES LINEALES En este capítulo se estudia el componente algorítmico y computacional de los métodos directos para resolver sistemas de ecuaciones lineales.

Ejemplo. Un comerciante compra tres productos: A, B, C, pero en las facturas únicamente consta la cantidad comprada y el valor total de la compra. Se necesita determinar el precio unitario de cada producto. Para esto dispone de tres facturas con los siguientes datos: Factura Cantidad de A Cantidad de B Cantidad de C Valor pagado 1 4 2 5 $18.00 2 2 5 8 $27.30 3 2 4 3 $16.20 Análisis Sean 1 2 3x ,x ,x variables que representan al precio unitario de cada producto. Entonces, se puede escribir:

1 2 3

1 2 3

1 2 3

4x 2x 5x 18.002x 5x 8x 27.302x 4x 3x 16.20

+ + =+ + =+ + =

El modelo matemático resultante es un sistema lineal de tres ecuaciones con tres variables. En general, se desea resolver un sistema de n ecuaciones lineales con n variables

1,1 1 1,2 1 1,n n 1

2,1 1 2,2 1 2,n n 2

n,1 1 n,2 1 n,n n n

a x a x ... a x ba x a x ... a x b

...a x a x ... a x b

+ + + =+ + + =

+ + + =

En donde i,ja ∈ℜ : Coeficientes

ib ∈ℜ : Constantes ix ∈ℜ : Variables cuyo valor debe determinarse En notación matricial:

1,1 1,2 1,n 1 1

2,1 2,2 2,n 2 2

n,1 n,1 n,n n n

a a ... a x ba a ... a x b... ... ... ...

a a ... a x b

=

Simbólicamente AX = B Siendo

1,1 1,2 1,n 1 1

2,1 2,2 2,n 2 2

n,1 n,1 n,n n n

a a ... a b xa a ... a b x

A ; B ; X... ... ... ...a a ... a b x

= = =

Page 2: Método de Gauss Jordan

58

4.1 Determinantes y sistemas de ecuaciones lineales

Sea A la matriz de coeficientes del sistema AX = B. Sea A-1 su inversa y |A| su determinante. La relación entre |A| y la existencia de la solución X se establece con la siguiente definición:

t

1 [adj(A)]A| A |

− = ,

En donde [adj(A)]t es la transpuesta de la adjunta de la matriz A. Si |A| ≠ 0 , entonces 1A− existe, y se puede escribir: 1 1 1 1AX B A AX A B IX A B X A B− − − −= ⇒ = ⇒ = ⇒ = En donde I es la matriz identidad. En resumen, si |A| ≠ 0 entonces X existe y además es único. 4.2 Método de Gauss - Jordan

La estrategia de este método consiste en transformar la matriz A del sistema AX = B y reducirla a la matriz identidad I. Según el enunciado anterior, esto es posible si | A | ≠ 0. Aplicando simultáneamente las mismas transformaciones al vector B, este se convertirá en el vector solución 1A B− . En caso de que esta solución exista, el procedimiento debe transformar las ecuaciones mediante operaciones lineales que no modifiquen la solución del sistema original, estas pueden ser:

a) Intercambiar ecuaciones b) Multiplicar ecuaciones por alguna constante no nula c) Sumar alguna ecuación a otra ecuación Ejemplo. Con el Método de Gauss-Jordan resuelva el siguiente sistema de ecuaciones lineales correspondiente al problema planteado al inicio del capítulo

1 2 3

1 2 3

1 2 3

4x 2x 5x 18.002x 5x 8x 27.302x 4x 3x 16.20

+ + =+ + =+ + =

Solución: Se define la matriz aumentada A | B para transformar simultáneamente A y B:

4 2 5 18.00A | B 2 5 8 27.30

2 4 3 16.20

=

Las transformaciones sucesivas de la matriz aumentada se describen en los siguientes pasos: Dividir fila 1 para 4

1.0000 0.5000 1.2500 4.5000 2.0000 5.0000 8.0000 27.3000 2.0000 4.0000 3.0000 16.2000

Page 3: Método de Gauss Jordan

59

Restar de cada fila, la fila 1 multiplicada por el elemento de la columna 1 1.0000 0.5000 1.2500 4.5000 0 4.0000 5.5000 18.3000 0 3.0000 0.5000 7.2000 Dividir fila 2 para 4 1.0000 0.5000 1.2500 4.5000 0 1.0000 1.3750 4.5750 0 3.0000 0.5000 7.2000 Restar de cada fila, la fila 2 multiplicada por el elemento de la columna 2 1.0000 0 0.5625 2.2125 0 1.0000 1.3750 4.5750 0 0 -3.6250 -6.5250 Dividir fila 3 para -3.625 1.0000 0 0.5625 2.2125 0 1.0000 1.3750 4.5750 0 0 1.0000 1.8000 Restar de cada fila, la fila 3 multiplicada por el elemento de la columna 3 1.0000 0 0 1.2000 0 1.0000 0 2.1000 0 0 1.0000 1.8000 La matriz de los coeficientes ha sido transformada a la matriz identidad. Simultáneamente, las mismas transformaciones han convertido a la última columna en el vector solución:

1.2

X 2.11.8

=

Como antes, la solución debe verificarse en el sistema

Page 4: Método de Gauss Jordan

60

Práctica computacional Resolver el ejemplo anterior en la ventana de comandos con la notación matricial >> a=[4 2 5; 2 5 8; 2 4 3] Definición de la matriz a = 4 2 5 2 5 8 2 4 3 >> b=[18.0; 27.3; 16.2] Vector de constantes b = 18.0000 27.3000 16.2000 >> a=[a, b] Matriz aumentada a = 4.0000 2.0000 5.0000 18.0000 2.0000 5.0000 8.0000 27.3000 2.0000 4.0000 3.0000 16.2000 >> a(1,1:4)=a(1,1:4)/a(1,1) Normalizar fila 1 a = 1.0000 0.5000 1.2500 4.5000 2.0000 5.0000 8.0000 27.3000 2.0000 4.0000 3.0000 16.2000 >> a(2,1:4)=a(2,1:4)-a(2,1)*a(1,1:4) Reducir fila 2 a = 1.0000 0.5000 1.2500 4.5000 0 4.0000 5.5000 18.3000 2.0000 4.0000 3.0000 16.2000 >> a(3,1:4)=a(3,1:4)-a(3,1)*a(1,1:4) Reducir fila 3 a = 1.0000 0.5000 1.2500 4.5000 0 4.0000 5.5000 18.3000 0 3.0000 0.5000 7.2000 >> a(2,2:4)=a(2,2:4)/a(2,2) Normalizar fila 2 a = 1.0000 0.5000 1.2500 4.5000 0 1.0000 1.3750 4.5750 0 3.0000 0.5000 7.2000 >> a(1,2:4)=a(1,2:4)-a(1,2)*a(2,2:4) Reducir fila 1 a = 1.0000 0 0.5625 2.2125 0 1.0000 1.3750 4.5750 0 3.0000 0.5000 7.2000 >> a(3,2:4)=a(3,2:4)-a(3,2)*a(2,2:4) Reducir fila 3 a = 1.0000 0 0.5625 2.2125 0 1.0000 1.3750 4.5750 0 0 -3.6250 -6.5250 >> a(3,3:4)=a(3,3:4)/a(3,3) Normalizar fila 3 a = 1.0000 0 0.5625 2.2125 0 1.0000 1.3750 4.5750 0 0 1.0000 1.8000

Page 5: Método de Gauss Jordan

61

>> a(1,3:4)=a(1,3:4)-a(1,3)*a(3,3:4) Reducir fila 1 a = 1.0000 0 0 1.2000 0 1.0000 1.3750 4.5750 0 0 1.0000 1.8000 >> a(2,3:4)=a(2,3:4)-a(2,3)*a(3,3:4) Reducir fila 2 a = 1.0000 0 0 1.2000 0 1.0000 0 2.1000 0 0 1.0000 1.8000 >> x=a(1:3,4) Vector solución x = 1.2000 2.1000 1.8000 >> a*x Verificar la solución ans = 18.0000 27.3000 16.2000 4.2.1 Formulación del método de Gauss-Jordan Para establecer la descripción algorítmica, conviene definir la matriz aumentada A con el vector B pues deben realizarse simultáneamente las mismas operaciones:

1,1 1,2 1,n 1,n 1

2,1 2,2 2,n 2,n 1

n,1 n,2 n,n n,n 1

a a ... a aa a ... a a

A | B ... ... ... ... ...a a ... a a

+

+

+

=

En donde se ha agregado la columna n+1 con el vector de las constantes:

ai,n+1 = bi, i = 1, 2, 3, ..., n (columna n+1 de la matriz aumentada)

El objetivo es transformar esta matriz y llevarla a la forma de la matriz identidad I:

1,1 1,2 1,n 1,n 1

2,1 2,2 2,n 2,n 1

n,1 n,2 n,n n,n 1

a a ... a aa a ... a a

A | B ... ... ... ... ...a a ... a a

+

+

+

=

→ . . . →

1,n 1

2,n 1

n,n 1

a1 0 ... 0a0 1 ... 0

...... ... ... ...a0 0 ... 1

+

+

+

Si es posible realizar esta transformación, entonces los valores que quedan en la última columna constituirán el vector solución X Las transformaciones deben ser realizadas en forma sistemática en n etapas, obteniendo sucesivamente en cada etapa, cada columna de la matriz identidad, de izquierda a derecha. En cada etapa, primero se hará que el elemento en la diagonal tome el valor 1. Luego se hará que los demás elementos de la columna tomen el valor 0.

Page 6: Método de Gauss Jordan

62

1,n 1

2,n 1

n,n 1

a1 0 ... 0a0 1 ... 0

...... ... ... ...a0 0 ... 1

+

+

+

Etapa 1 Normalizar la fila 1: (colocar 1 en el lugar del elemento 1,1a

1,j 1,j 1,1a a / a← j=1, 2, ..., n+1; supones que 1,1a 0≠ Reducir las otras filas: (colocar 0 en los otros elementos de la columna 1)

i,j i,j i,1 1,ja a a a← − , j=1, 2, ..., n+1; i=2, 3, ..., n

1,1 1,2 1,n 1,n 1 1,2 1,n 1,n 1

2,1 2,2 2,n 2,n 1 2,2 2,n 2,n 1

n,1 n,1 n,n n,n 1 n,1 n,n n,n 1

a a ... a a 1 a ... a aa a ... a a 0 a ... a a

A | B ... ... ... ... ... ...a a ... a a 0 a ... a a

+ +

+ +

+ +

= →

Etapa 2

Normalizar la fila 2: (colocar 1 en el lugar del elemento 2,2a

2,j 2,j 2,2a a / a← j=2, 3, ..., n+1; 0a 2,2 ≠ Reducir las otras filas: (colocar 0 en los otros elementos de la columna 2 i,j i,j i,2 2,ja a a a← − , j=2, 3, ..., n+1; i=1, 3, ..., n

1,2 1,n 1,n 1 1,n 1,n 1

2,2 2,n 2,n 1 2,n 2,n 1

n,1 n,n n,n 1 n,n n,n 1

1 a ... a a 1 0 ... a a0 a ... a a 0 1 ... a a... ... ... ... ... ...0 a ... a a 0 0 ... a a

+ +

+ +

+ +

La última columna contendrá el vector solución La formulación obtenida en estas dos etapas se puede generalizar y con ella construir el algoritmo:

Valores transformados

Valores transformados

Etapa 1

Etapa 2

Etapa n

Page 7: Método de Gauss Jordan

63

ALGORITMO BÁSICO DE GAUSS-JORDAN 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,ea a / a← Normalizar la fila e ( e,ea 0≠ ) Fin Para i=1, 2, …, i -1, i +1,… n Para j=e, e+1, ..., n+1 i,j i,j i,e e,ja a a a← − Reducir las otras filas Fin Fin Fin Para i=1,2,...,n i i,n 1x a +← La última columna contendrá la solución Fin 4.2.2 Eficiencia del método de Gauss-Jordan

El método de Gauss-Jordan es un método directo. Los métodos directos pueden estar afectados por el error de redondeo, es decir los errores en la representación de los números que se producen en las operaciones aritméticas. Para cuantificar la magnitud del error de redondeo se define la función de eficiencia del método. Sea n el tamaño del problema y T(n) la cantidad de operaciones aritméticas que se realizan En la normalización: T(n) = O(n2) (Dos ciclos anidados) En la reducción: T(n) = O(n3) (Tres ciclos anidados) Por lo tanto, este método es de tercer orden: T(n) = O(n3) Mediante un conteo recorriendo los ciclos del algoritmo, se puede determinar la función de eficiencia para este método directo:

e i j 1 n-1 n+1 2 n-1 n . . . . . . . . .

n-1 n-1 3 n n-1 2

T(n) = (n-1)(2 + 3 + n + (n+1)) = (n-1) (3 + n ) (n/2) = n3/2 + 2n2/2 + 3n/2

Page 8: Método de Gauss Jordan

64

4.2.3 Instrumentación computacional En esta primera versión del algoritmo se supondrá que el determinante de la matriz es diferente de cero y que no se requiere intercambiar filas. La codificación en MATLAB sigue directamente la formulación matemática descrita anteriormente. Se usa notación compacta para manejo de matrices

function x=gaussjordan(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 fila e for i=1:n if i~=e a(i,e:n+1)=a(i,e:n+1)-a(i,e)*a(e,e:n+1); %reducir otras filas end end end x=a(1:n,n+1); %vector solución

Ejemplo. Desde la ventana de comandos de MATLAB, use la función Gauss-Jordan para resolver el sistema:

1

2

3

2 3 7 x 32 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=gaussjordan(a,b) Llamada a la función x =

-0.0556 Solución proporcionada por MATLAB 0.9150

0.0523 >> a*x Verificar la solución ans =

3.0000 La solución satisface al sistema 5.0000 8.0000 Cuando se dispone de la instrumentación computacional de un algoritmo, se puede obtener experimentalmente su eficiencia registrando, para diferentes valores de n, el tiempo de ejecución del algoritmo. Este tiempo depende de la velocidad del procesador del dispositivo computacional, pero es proporcional a T(n). MATLAB dispone de las funciones tic, toc para registrar tiempo de ejecución, mientras que para las pruebas se pueden generar matrices y vectores con números aleatorios. Se presentan algunos resultados con obtenidos con un procesador intel core i5 y la versión 7.01 de MATLAB:

n=100, t=0.0781 seg. n=200, t=0.3859 seg. n=300, t=1.0336 seg. n=400, t=2.0758 seg.

Se observa que T(n) tiene crecimiento tipo potencial

Page 9: Método de Gauss Jordan

65

4.2.4 Obtención de la inversa de una matriz

Para encontrar la matriz inversa se puede usar el método de Gauss-Jordan. Sea A una matriz cuadrada cuyo determinante es diferente de cero. Sean 1 2 m 1 mt ,t , . . . ,t , t− las transformaciones lineales del método de Gauss-Jordan que

transforman la matriz A en la matriz identidad I incluyendo intercambios de filas m m-1 2 1t t . . . t t A = I Entonces se puede escribir m m-1 2 1t t . . . t t 1A− A = 1A− I ⇒ m m-1 2 1t t . . . t t I = 1A− Lo cual significa que las mismas transformaciones que convierten A en la matriz I, convertirán la matriz I en la matriz 1A− . Para aplicar este algoritmo, suponiendo que se desea conocer la matriz 1A− , se debe aumentar la matriz anterior con la matriz I: A | B | I Las transformaciones aplicadas simultáneamente proporcionarán finalmente el vector solución X y la matriz identidad 1A− Ejemplo. Con el Método de Gauss-Jordan resuelva el sistema de ecuaciones siguiente y simultáneamente obtenga la matriz inversa:

1 2 3

1 2 3

1 2 3

4x 2x 5x 18.002x 5x 8x 27.302x 4x 3x 16.20

+ + =+ + =+ + =

Solución. La matriz aumentada es:

4 2 5 18.00 1 0 0

A | B 2 5 8 27.30 0 1 12 4 3 16.20 0 0 1

=

Cálculos Normalizar fila 1 y reducir filas 2 y 3 1.0000 0.5000 1.2500 4.5000 0.2500 0 0 0 4.0000 5.5000 18.3000 -0.5000 1.0000 0 0 3.0000 0.5000 7.2000 -0.5000 0 1.0000

Page 10: Método de Gauss Jordan

66

Normalizar fila 2 y reducir filas 1 y 3 1.0000 0 0.5625 2.2125 0.3125 -0.1250 0 0 1.0000 1.3750 4.5750 -0.1250 0.2500 0 0 0 -3.6250 -6.5250 -0.1250 -0.7500 1.0000 Normalizar fila 3 y reducir filas 1 y 2 1.0000 0 0 1.2000 0.2931 -0.2414 0.1552 0 1.0000 0 2.1000 -0.1724 -0.0345 0.3793 0 0 1.0000 1.8000 0.0345 0.2069 -0.2759 Solución del sistema

1.2

X 2.11.8

=

Matriz inversa

1

0.2931 0.2414 0.1552A 0.1724 0.0345 0.3793

0.0345 0.2069 0.2759

− = − − −