Eliminación gaussiana y otros algoritmos Departamento de Matemáticas, CCIR/ITESM 10 de enero de 2011 Índice 2.1. Introducción . . . . . . . . . . . . . . . . . . . . 2.2. Objetivos . . . . . . . . . . . . . . . . . . . . . 2.3. Forma escalonada por renglones . . . . . . . . . 2.4. Pivotes de una matriz . . . . . . . . . . . . . . 2.5. Algoritmo de eliminación gaussiana . . . . . . . 2.6. Eliminación Gaussiana: ejemplo . . . . . . . . . 2.7. Análisis de los conjuntos solución . . . . . . . . 2.8. Fórmula para todas las soluciones . . . . . . . . 2.9. Algoritmo de Gauss-Jordan . . . . . . . . . . . 2.10. Algoritmo de Gauss-Jordan: ejemplo . . . . . . 2.11. Método Montante . . . . . . . . . . . . . . . . . 2.12. Método de Montante: ejemplo . . . . . . . . . . 2.13. Diferencias operativas de los métodos . . . . . . 2.14. Complejidad de un algoritmo . . . . . . . . . . 2.15. Complejidad del algoritmo de Gauss . . . . . . 2.16. Complejidad del algoritmo de Gauss-Jordan . . 2.17. Complejidad del algoritmo de Montante . . . . 2.18. Comparativa de los algoritmos . . . . . . . . . 2.19. Algoritmos y computadoras . . . . . . . . . . . 2.20. Y los determinantes del Método de Montante? 2.21. Pero, qué método me conviene seguir? . . . . . 2.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 2 3 3 4 5 8 10 11 12 12 13 14 14 16 17 18 18 19 19 Introducción En esta lectura veremos procedimientos sistemáticos para resolver un sistema de ecuaciones lineales. Estos algoritmos trabajan directamente sobre la matriz aumentada del sistema llevándola a la matriz de un sistema triangular que es equivalente al sistema inicial. La equivalencia del sistema triangular final con el inicial se argumenta debido a que el algoritmo sólo utiliza los tres tipos de operaciones vistos en la lectura anterior y cuya aplicación individual siempre preserva la equivalencia. Los procedimientos que revisaremos son: el algoritmo de Eliminación Gaussiana, el algoritmo de Gauss-Jordan y el método Montante. Finalmente, se realizará una revisión sobre el trabajo computacional realizado por estas estrategias. 2.2. Objetivos Será importante que Usted Entienda los conceptos: matriz escalonada y escalonada reducida. Entienda y mecanice los procedimientos de • Eliminación gaussiana, • Eliminación de Gauss-Jordan, y • El método de Montante. Conozca las diferencias en el proceder entre los algoritmos vistos. Comprenda las reglas para analizar las soluciones a un sistema de ecuaciones. Comprenda el concepto de complejidad de un algoritmo. Conozca las diferencias en los costos de cómputo de los algoritmos vistos. 2.3. Forma escalonada por renglones Los algoritmos que veremos trabajan sobre la matriz aumentada y realizan sobre de ella operaciones elementales de renglón como fueron definidas en la lectura anterior. Esta matriz irá transformándose paulatinamente a una matriz que posee ciertas propiedades. Lo que haremos primeramente es definir éstas. Definición 2.1 Una matriz se dice matriz escalonada si cumple: 1. En caso de tener renglones de ceros, todos ellos están en la parte inferior de la matriz. 2. El elemento delantero de cada renglón no cero (después del primer renglón) se encuentra a la derecha del elemento delantero del renglón anterior. Y se llama matriz escalonada reducida si es escalonada y además cumple: 3. El elemento delantero de cualquier renglón no cero es 1. 4. Todos los elementos arriba y abajo de un 1 delantero son cero. Ejemplo 2.1 Indique porqué las siguientes matrices no son escalonadas: 2 0 0 2 −1 0 , 0 1 0 3 0 0 2 −1 0 2 , 0 1 0 3 5 2 −1 0 2 , 0 2 0 0 3 0 3 0 0 0 −3 , 0 −3 5 0 1 0 0 1 1 3 −3 −3 Solución En el primer ejemplo, tiene un renglón de ceros y no aparece hasta el final; no se cumple la condición 1. En el segundo ejemplo, cuando comparamos la posición del primer elemento no cero del segundo renglón (5) con la posición del primer elemento no cero del tercer renglón (2) vemos que el 2 no está a la derecha del 5; no se cumple la condición 2. En el tercer ejemplo, el renglón de cero aparece hasta abajo, pero cuando se comparan los elementos delanteros de los renglones 2 y 3 el inferior no está a la derecha del elemento delantero superior: se cumple la condición 1 pero no la 2. En el cuarto ejemplo, falla de nuevo la condición 1. En el último ejemplo, recuerde sólo hay escalonada de derecha a izquierda; el elemento delantero del renglón 2 no está a la derecha de delantero del renglón 1 Ejemplo 2.2 Indique porqué las siguientes matrices sı́ son escalonadas: 2 0 0 3 5 0 2 −1 0 2 , 0 1 0 3 1 0 0 −1 0 2 , 0 0 0 0 2 0 0 2 3 1 −3 , 0 0 0 2 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 Solución Observe que las matrices listadas cumplen las condiciones 1 y 2 Ejemplo 2.3 Indique porqué las siguientes matrices son escalonadas pero no reducidas: 1 0 0 3 1 0 −1 1 0 , 0 −2 0 2 1 0 1 −1 0 2 , 0 1 0 0 1 0 0 1 1 0 , 0 1 0 0 1 0 0 3 0 1 , 0 0 0 1 0 0 −3 1 0 Solución En el primer ejemplo, está fallando la condición 3: el elemento delantero del renglón 3 debe ser 1. En el segundo ejemplo, la condición 3 se cumple pero la condición 4 falla: arriba de los 1 delanteros debe haber sólo ceros. En los ejemplos 3, 4 y 5, note que la condición 4 dice que todos los elementos superiores a los elementos delanteros deben ser cero. En estos ejemplos no se cumple tan condición Ejemplo 2.4 Verifique que las siguientes matrices sı́ son escalonadas reducidas: 1 0 0 0 1 0 1 0 0 0 , 0 1 0 0 1 0 0 −3 0 1 , 0 0 0 0 1 0 0 1 0 1 , 0 0 0 3 0 0 0 −4 0 , 0 0 0 0 0 0 0 0 0 Solución Observe que en el ejemplo 2, el elemento (2,3) no es delantero por ello no se impone la condición que el elemento superior sea cero. La matriz es efectivamente escalonada reducida 2.4. Pivotes de una matriz Cuando una matriz está en su forma escalonada, los primeros elementos diferentes de cero de cada renglón reciben el nombre de elementos pivote o simplemente pivotes. Note que por ser el pivote el primer elemento no cero del renglón, no hay forma que un renglón tenga más de un pivote: puede no tener pivote en caso de que sea un renglón de ceros, pero no puede tener dos o más. Note también que por estar escalonada la matriz, no hay forma que dos pivotes queden en la misma columna: puede una columna no tener pivote, pero si tiene pivote no puede tener dos o más. De este hecho, concluimos que una matriz m × n no puede tener mas de m pivotes porque tiene a los más uno por cada renglón. Y por otro lado, no puede tener más de n pivotes pues a lo más tiene un pivote por cada columna. Es decir, el número de pivotes debe ser menor o igual que el mı́nimo número entre m y n. 2.5. Algoritmo de eliminación gaussiana El Algoritmo de Gauss o de Eliminación gaussiana consta de los siguientes pasos: 1. Determine la primer columna (a la izquierda) no cero. 2. Si el primer elemento de la columna es cero, intercámbielo por un renglón que no tenga cero. 3. Obtenga ceros abajo del elemento delantero sumando múltiplos adecuados a los renglones debajo de él. 4. Cubra el renglón y la columna de trabajo y repita el proceso comenzando en el paso 1. Al término del ciclo entre el paso 1 al 4 (es decir cuando se han barrido todos los renglones), la matriz deberá tener forma de escalón. 5. Comenzando con el último renglón no cero avance hacia arriba para que en cada renglón tenga un 1 delantero y arriba de él queden sólo ceros. Para ello deberá sumar múltiplos adecuados del renglón a los renglones correspondientes. 3 Es importante observar que en el método de eliminación Gaussiana: Los pasos del 1 a 4 aplicados repetidamente escalonan la matriz; el paso 5 aplicado repetidamente reduce la matriz. En el paso 2, si el elemento no es cero no se realiza intercambio. En el paso 3, los elementos que se hacen cero son sólo los inferiores al pivote. 2.6. Eliminación Gaussiana: ejemplo Ejemplo 2.5 Aplique el algoritmo de Gauss a la matriz: 3 6 −9 3 2 4 −8 0 −2 −3 4 −1 Solución En nuestro caso la primer columna tiene elementos diferentes de cero, continua entonces en el paso 2. Siendo el elemento (1, 1) diferente de cero se continua con el paso 3. El elemento (1, 1) será usado como pivote para hacer ceros debajo de él; para ello debemos sumar múltiplos adecuados del renglón pivote a los renglones inferiores: 3 6 −9 3 3 3 6 −9 R2 ←R2 −(2/3) R1 2 4 −8 0 −−−−−−−−−−−−→ 0 0 −2 −2 (1) R3 ←R3 −(−2/3) R1 −2 −3 4 −1 0 1 −2 1 El algoritmo procede tapando el renglón de trabajo, en este caso el primero. Al repetir el paso 1, el algoritmo busca la primer columna diferente de cero; en este caso se mueve a la segunda columna y continua con el paso 2. En vista que elemento (2, 2) es cero debemos buscar en la parte inferior de la columna 2 un elemento diferente de cero y realizar un intercambio de renglones: 3 6 −9 3 6 −9 3 3 R2 ↔R3 0 0 −2 −2 − 1 −−−−→ 0 1 −2 (2) 0 1 −2 1 0 0 −2 −2 Continuamos ahora con el paso 3. En este caso los elementos por debajo del elemento (2, 2) son cero, y el algoritmo procede a la siguiente columa. El algortimo termina en sus pasos 1 al 4. Procede al paso 5. La matriz es ahora escalonada, el siguiente paso es hacer 1 cada pivote y posteriormente hacer cero arriba de cada uno de ellos. Hagamos 1 el elemento (3, 3): 3 6 −9 3 3 6 −9 3 R3 ←1/(−2) R3 0 1 −2 1 −−−−−−−−−→ 0 1 −2 1 (3) 0 0 −2 −2 0 0 1 1 Debemos hacer cero por arriba del elemento pivote (3, 3): 3 6 −9 3 3 6 0 12 R1 ←R1 −(−9) R3 0 1 −2 1 − −−−−−−−−−−→ 0 1 0 3 R2 ←R2 −(−2) R3 0 0 1 1 0 0 1 1 4 (4) Procedamos con el siguiente elemento pivote (2, 2); el elemento ya cero por arriba de él: 3 6 0 12 3 0 R1 ←R1 −6 R2 0 1 0 3 − −−−−−−−−→ 0 1 0 0 1 1 0 0 El algoritmo concluye haciendo 3 0 0 2.7. es 1 y ahora debemos proceder a hacer 0 −6 0 3 1 1 1 el pivote del primer renglón: 1 0 0 −2 0 0 −6 R1 ←1/3 R1 3 −−−−−−−→ 0 1 0 3 1 0 0 1 1 0 0 1 1 (5) (6) Análisis de los conjuntos solución Una vez escalonando o reduciendo la matriz aumentada de un sistema, hay que saber con precisión qué se puede decir sobre el conjunto de soluciones. Sólo hay tres posibles resultados en el análisis: El sistema no tiene solución: sistema inconsistente. El sistema tiene una única solución. El sistema tiene infinitas soluciones. Regla de Inconsistencia El sistema es inconsistente si aparece un pivote en la columna de términos constantes. Ejemplo 2.6 Son inconsistentes los sistemas cuya 1 0 0 1 0 0 0 0 matriz aumentada se convierte mediante operaciones elementales en: 0 0 1 0 0 0 2 0 , 0 1 0 0 , 1 1 1 2 0 1 0 0 1 0 0 0 0 3 0 0 0 0 0 1 Regla de Consistencia Es consistente cualquier sistema en cuya matriz escalonada no aparece ningún pivote en la columna de términos constantes. Ejemplo 2.7 Son consistentes los sistemas cuya matriz aumentada 1 0 1 1 1 3 0 1 0 2 2 2 , 0 0 0 0 3 1 0 0 se convierte mediante operaciones elementales en: 3 1 2 1 , 1 1 1 2 1 1 0 1 1 1 0 0 Regla de la Solución Única Siendo un sistema consistente, el sistema tiene solución única si en la matriz escalonada la columna de cada variable hay un pivote. 5 Ejemplo 2.8 Tienen solución única lo sistemas cuya matriz aumentada se convierte mediante operaciones elementales en: 1 0 3 1 1 1 1 3 0 2 2 2 , 0 1 2 1 0 0 1 1 0 0 3 1 0 0 0 0 Regla para Soluciones Infinitas Si un sistema es consistente, el sistema tiene soluciones infinitas si en la matriz escalonada hay una columna de una variable sin pivote. Ejemplo 2.9 Tienen soluciones infinitas lo sistemas cuya matriz aumentada se convierte mediante operaciones elementales en: 1 0 3 1 1 1 1 3 0 1 2 1 1 1 1 3 , 0 2 2 2 , 0 0 0 0 0 2 2 2 0 0 0 0 0 0 0 0 Nota Importante Observe que de los ejemplos anteriores que los renglones de ceros pueden ocurrir en cualquiera de los casos: puede haber renglones de ceros en la matriz y el sistema ser inconsistente, consistente con solución única o consistente con infinitas soluciones. Es decir, los renglones de ceros no dan en general información sobre cómo es el conjunto solución. Pueden ocurrir o no cuando el sistema sea 1 0 0 0 inconsistente: 1 2 0 1 6 2 0 1 3 0 , 0 1 1 0 0 0 1 0 0 0 1 0 0 0 Pueden ocurrir o no cuando el sistema tenga solución única: 1 0 1 4 1 0 1 4 0 1 2 −1 , 0 1 2 −1 0 0 1 1 0 0 1 1 0 0 0 0 Pueden ocurrir o no cuando el sistema tenga infinitas soluciones: 1 0 1 4 4 0 1 2 −1 , 1 0 1 0 1 2 −1 0 0 0 0 Ejemplo 2.10 Se tiene un sistema de ecuaciones que tiene una matriz aumentada 8 × 5 y al reducirla tiene un total de 5 pivotes, entonces .. 6 A es inconsistente. B hay soluciones infinitas. C tiene solución única. D si la última columna hay pivote, inconsistente. Si no, única. E si la última columna hay pivote, inconsistente. Si no, infinitas. Solución Puesto que la matriz escalonada de tiene 5 pivotes y la matriz tiene 5 columnas, entonces toda columna tiene pivote. En particular, la última columna tendrá pivote. Como la matriz es aumentada, entonces la columna correspondiente a las constantes tendrá pivote. Por lo tanto, el sistema original será inconsistente. La opción que describe la situación es A Ejemplo 2.11 Se tiene un sistema de ecuaciones que tiene una matriz aumentada 5 × 5 y al reducirla tiene un total de 4 pivotes, entonces .. A es inconsistente. B tiene solución única. C hay soluciones infinitas. D si en la última columna hay pivote, inconsistente. Si no, única. E si la última columna hay pivote, inconsistente. Si no, infinitas. Solución Puesto que la matriz reducida es 5 × 5 y tiene 4 pivotes, la última columna tiene la posibilidad de tener pivote. En cuyo caso, el sistema será inconsistente. También se tiene la posibilidad de que la última columna no tenga pivote. En cuyo caso, el sistema será consistente y los cuatro pivotes estarán en las primeras columnas. Y por tanto, en este caso la columna de cada variable tendrá pivote y por consiguiente cada variable será fija. Y por lo tanto, en este caso habrá solución única. La respuesta que describe mejor la situación es la D Ejemplo 2.12 Se tiene un sistema homogéneo de ecuaciones que tiene una matriz aumentada 5 × 6 y al reducirla tiene un total de 5 pivotes, entonces .. A tiene solución única. B si la última columna hay pivote, inconsistente. Si no única. C es inconsistente. D hay soluciones infinitas. E si la última columna hay pivote, inconsistente. Si no infinitas. 7 Solución Puesto que el sistema es homogéneo, en la columna de las constantes habrá sólo ceros. Por la naturaleza de las operaciones elementales, en la matriz reducida sólo habrá ceros en tal columna. Por tanto, no habrá pivotes en la columna de las constantes. Por tanto, el sistema será consistente y los 5 pivotes estarán en las primeras columnas y por tanto, en la columna de cada variable habrá pivote. Por tanto, el sistema será consistente con solución única 2.8. Fórmula para todas las soluciones Veamos ahora una estrategia para obtener la fórmula de donde se obtienen todas las soluciones a un sistemas de ecuaciones lineales cuando el sistema tiene infinitas soluciones. Ilustraremos esto mediante un par de ejemplos. Ejemplo 2.13 Manejando el orden x, y, z, w escriba en forma vectorial la solución general al sistema: 4w + 2x + 6y + 2z = 2 w + 3 x + 9 y + 4 z = −14 4 w + 3 x + 9 y + 3 z = −3 3 w + 4 x + 12 y + 4 z = −11 Reporte las coordenadas del vector que multiplica a la variable libre en la solución resultante. Solución (Y método general) Paso 1: Apliquemos Gauss a la matriz aumentada Formamos la matriz aumentada con el orden que sugiere el problema (x, y, z, w): 2 6 3 9 3 9 4 12 2 4 3 4 1 2 4 0 1 −14 → 0 4 −3 3 −11 0 3 0 0 0 0 1 0 0 0 −3 0 −2 1 3 0 0 Al aplicar las reglas de análisis, observamos que el sistema es consistente (al no haber pivote en la columna de las constantes) y con soluciones infinitas (al ser y una variable libre, recuerde que las variables fijas son aquellas en cuya columna hay pivote) Paso 2: Convierta cada renglón no cero en ecuación El renglón 1 de la reducida que: x + 3 y = −3 El renglón 2 queda: z = −2 y el renglón 3 queda: w=3 8 Paso 3: De cada ecuación, despeje la variable delantera. x + 3 y = −3 → x = −3 − 3 y z = −2 → z = −2 w = 3 → w = 3 Paso 4: Se complementan las ecuaciones introduciendo ecuaciones donde cada variable libre es igual a sı́ misma. x y z w = −3 − 3 y = y = −2 = 3 Paso 5: Se reescribe en forma vectorial las soluciones −3 − 3 y x y y z = −2 3 w Paso 6: Se separa el segundo miembro de acuerdo a las constantes y a las variables libres −3 −3 x y 0 +y 1 = 0 z −2 0 3 w Lo anterior es la fórmula general para todas las soluciones del sistema original; el concepto de variable libre indica que se puede tomar cualquier valor y que con él se produce una solución. También, aunque esto no es tan evidente, que cualquier otra solución puede obtenerse de esta fórmula para valores adecuados de las variables libres Ejemplo 2.14 Determine la solución general en forma vectorial para el sistema: 6w − 2x + 3y + 3z = 3 5w + 2x + y − 2z = 2 w − 4x + 2y + 5z = 1 13 w − 8 x + 8 y + 11 z = 7 Solución Sigamos la metodologı́a descrita en el ejemplo anterior: 9 Aplicamos Gauss a la matriz aumentada −2 3 3 6 2 1 −2 5 −4 2 5 1 −8 8 11 13 (orden: x, 3 2 → 1 7 y, z, w): 1 0 0 0 0 −9/8 9/8 3/8 1 1/4 11/4 5/4 0 0 0 0 0 0 0 0 Convertimos cada renglón diferentes de cero de la matriz reducida a una ecuación: x − 9/8 z + 9/8 w = 3/8 y + 1/4 z + 11/4 w = 5/4 Ahora, despejamos las variables fijas (x y y): x = 3/8 + 9/8 z − 9/8 w y = 5/4 − 1/4 z − 11/4 w Complementamos las ecuaciones con ecuaciones donde cada variable libre está igualada a sı́ misma: x y z w = = = = 3/8 + 9/8 z − 9/8 w 5/4 − 1/4 z − 11/4 w z w Ahora, le damos a lo anterior la forma de una igualdad entre vectores: x 3/8 + 9/8 z − 9/8 w y 5/4 − 1/4 z − 11/4w z = z w w Finalmente, separamos el lado izquierdo de acuerdo a las variables libres: x 3/8 9/8 −9/8 y 5/4 −1/4 −11/4 z = 0 +z 1 +w 0 w 0 0 1 2.9. Algoritmo de Gauss-Jordan El Algoritmo de Gauss-Jordan consta de los siguientes pasos: 1. Determine la primer columna (a la izquierda) no cero. 2. Si el primer elemento de la columna es cero, intercámbielo por un renglón que no tenga cero. Multiplicando apropiadamente el renglón, hágalo 1. Este primer 1 será llamado 1 pivote. 3. Obtenga ceros arriba y abajo del 1 pivote sumando múltiplos adecuados a los renglones debajo de renglón pivote en la matriz completa. 4. Cubra la columna y el renglón de trabajo y repita el proceso comenzando en el paso 1 con la columna siguiente. Es importante observar que en el método de Gauss-Jordan: En la idea general, la matriz se va escalonando y reduciendo a la vez. En el paso 2, si el elemento no es cero no se realiza intercambio. En el paso 3, los elementos que se hacen cero no solo son los inferiores al pivote (Eliminación Gaussiana) sino también los superiores. 10 2.10. Algoritmo de Gauss-Jordan: ejemplo Ejemplo 2.15 Aplique el algoritmo de Gauss-Jordan a la matriz: 3 3 6 −9 2 4 −8 0 −2 −3 4 −1 Solución En el paso 1 se ubica la primer columna diferente de cero: es la primer columna. En el paso 2 se revisa si el primer elemento es diferente de cero el cual es nuestro caso. Procedemos ahora con el paso 3. Contrario al algoritmo de Gauss, el algoritmo de Gauss-Jordan primero crea los 1’s pivote: 3 6 −9 3 1 2 −3 1 R1 ←1/3 R1 2 4 −8 0 −−−−−−−→ 2 4 −8 0 (7) −2 −3 4 −1 −2 −3 4 −1 Posteriormente hace cero debajo de él: 1 1 2 −3 1 1 2 −3 R2 ←R2 −2 R1 2 4 −8 0 −−−−−−−−−−−→ 0 0 −2 −2 R3 ←R3 −(−2) R1 0 1 −2 1 −2 −3 4 −1 (8) Cubrimos ahora la primer columna y el primer renglón y repetimos el procedimiento. En el paso 1 identificamos la primer columna diferente de cero de la parte no cubierta. La primer columna cumple. Apliquemos el paso 2 ahora. En este caso el elemento (2, 2) es cero y se deberá buscar un elemento inferior que sea diferente de cero: 1 2 −3 1 1 2 −3 1 R2 ↔R3 0 0 −2 −2 − 1 −−−−→ 0 1 −2 (9) 0 1 −2 1 0 0 −2 −2 El elemento pivote (2, 2) ya es 1; 1 0 0 el algoritmo procede ahora a hacer ceros arriba y debajo de él: 1 2 −3 1 0 1 −1 R ←R1 −2 R2 1 −2 1 −−1−−−− 1 −−−→ 0 1 −2 0 −2 −2 0 0 −2 −2 (10) Cubrimos ahora la segunda columna y el segundo renglón de la matriz. Y procedemos de nuevo con el paso 1. La columna de la matriz descubierta se reduce a un sólo elemento y que no es cero. Procedemos con el paso 2. El pivote es ahora el elemento (3, 3); primero se crea el 1 pivote: 1 0 1 −1 1 0 1 −1 R3 ←1/(−2) R3 0 1 −2 1 −−−−−−−−−→ 0 1 −2 1 (11) 0 0 −2 −2 0 0 1 1 Posteriormente, se hacen ceros 1 0 0 arriba y debajo de él: 0 1 −1 1 0 0 −2 R ←R1 −1 R3 1 −2 1 −−−1−−−− 3 −−−−→ 0 1 0 R2 ←R2 −(−2) R3 0 1 1 0 0 1 1 11 (12) 2.11. Método Montante El Algoritmo Montante es una estrategia desarrollada en los 70s por el profesor Mario René Montante en aquel entonces profesor de FIME de la UANL, México. El método trabaja bajo el supuesto principal que la matriz es sólo de números enteros y que no se realizarı́a ninguna división entre enteros salvo al final. Esto minimiza el total de errores por redondeo. El método procede de una forma semejante al de Gauss-Jordan sin hacer uno los pivotes y forzando a que los elementos que se harán cero sean múltiplos del pivote. El método consta de los siguientes pasos: 1. Determine la primer columna (a la izquierda) no cero. 2. Si el primer elemento de la columna es cero, intercámbielo por un renglón que no tenga cero. Este se llamará elemento pivote x. 3. Obtenga ceros arriba y abajo del pivote x primeramente multiplicando cada renglón por x y posteriormente sumando múltiplos del renglón pivote. En términos de operaciones elementales lo que se realiza es que para cada renglón i diferente del renglón pivote hacer Ri ← xRi Ri ← Ri − ai,m Rm 4. Repita el proceso comenzando en el paso 1 para el renglón siguiente. El principal comentario es que en el paso 3 la instrucción Ri ← xRi tiene la intención de hacer que el elemento a hacer 0 se haga un múltiplo del elemento pivote de forma tal que no se requiere ninguna división en la instrucción de eliminación. 2.12. Método de Montante: ejemplo Ejemplo 2.16 Aplique el algoritmo de Montante a la matriz: 3 6 −9 3 2 0 4 −8 −2 −3 4 −1 Solución Debemos multiplicar el renglón 2 y 3 por el elemento (1, 1): 3 6 −9 3 6 −9 3 3 R ←3 R2 6 12 −24 2 4 −8 0 −−2−−−−→ 0 R3 ←3 R3 −2 −3 4 −1 −6 −9 12 −3 (13) Ahora la cancelación procede utilizando el renglón 1 con los elementos (2, 1) y (3, 1) anteriores a la multiplicación: 3 6 −9 3 3 6 −9 3 R2 ←R2 −(2) R1 6 12 −24 0 −−−−−−−−−−−→ 0 0 −6 −6 (14) R3 ←R3 −(−2) R1 −6 −9 12 −3 0 3 −6 3 Ahora deberemos intercambiar los renglones 2 y 3 para tener 3 6 −9 3 R2 ↔R3 0 0 −6 −6 − −−−−→ 0 3 −6 3 12 un pivote en (2, 2): 3 6 −9 3 0 3 −6 3 0 0 −6 −6 (15) Para eliminar el elemento arriba del pivote (2, 2) el algoritmo procede multiplicando el renglón 1 por el pivote (2, 2): 3 6 −9 3 9 18 −27 9 R ←3 R1 0 3 −6 0 3 −6 3 −−1−−−−→ 3 (16) 0 0 −6 −6 0 0 −6 −6 La cancelación arriba del pivote (2, 2) procede restando al renglón 1 del elemento (1, 2): 9 9 9 18 −27 R1 ←R1 −(6) R2 0 3 −6 3 −−−−−−−−−−→ 0 0 0 −6 −6 0 el renglón pivote por el contenido previo 0 9 −9 3 −6 3 0 −6 −6 (17) Ahora el pivote es el elemento (3, 3) y debemos hacer cero arriba de él. Para ello el algoritmo procede multiplicando los renglónes donde se hará la cancelación por el elemento pivote: 54 9 0 9 −9 −54 0 −54 R ←−6 R1 0 3 −6 3 −−1−−−−−→ 0 −18 36 −18 (18) R2 ←−6 R2 0 0 −6 −6 0 0 −6 −6 La cancelación procede restando los múltiplos del renglón 3 usando los elementos anteriores a la multiplicación: −54 0 −54 54 −54 0 0 108 R1 ←R1 −(9) R3 0 −18 36 −18 −−−−−−−−−−−→ 0 −18 0 −54 (19) R2 ←R2 −(−6) R3 0 0 −6 −6 0 0 −6 −6 Las únicas divisiones proceden al final: R1 ← 1/(−54) R1 −54 0 0 108 −2 1 0 0 R2 ← 1/(−18) R2 0 −18 0 −54 −−−−−−−−−−−−−−−→ 0 1 0 3 R3 ←1/(−6) R3 0 0 −6 −6 0 0 1 1 2.13. Diferencias operativas de los métodos Veamos ahora un ejemplo donde se manifiesta las diferencias de operación entre los métodos Ejemplo 2.17 Para la matriz: 23 13 1 0 11 −3 indique cuál serı́a el siguiente paso de acuerdo a: a) Eliminación Gaussiana b) Método de Gauss-Jordan c) Método de Montante entre las opciones: 1) R1 ← 11 R1 2) R1 ← 1 23 R1 3) R1 ← R1 − 13 11 R2 13 (20) 4) R2 ← 1 11 R2 Respuesta: Recuerde que el algoritmo de eliminación gaussiana primeramente escalona la matriz y luego reduce. En este caso la matriz ya está escalonada: por tanto, eliminación gaussiana prepara la reducción haciendo 1 el elemento pivote inferior. Por tanto, eliminación gaussiana debe hacer 1 el elemento (2, 2), lo cual coincide con la opción 4. En el caso del Gauss-Jordan, se realiza la reducción preparando el pivote de arriba para abajo. Por tanto, Gauss-Jordan debe hacer uno el elemento (1, 1), lo que coincide con la opción 2. El método Montante va escalonando y reduciendo la matriz de arriba hacia abajo evitanto las divisiones. Estando escalonada la matriz, Montante trabajarı́a con el elemento (2, 2) para hacer cero en la parte superior. En este caso particular, Montante harı́a que el elemento (1, 2) fuera múltiplo del pivote (2, 2). Ası́ Montante, debe multiplicar el renglón 1 por el elemento pivote (2, 2). Esto corresponde a la opción 1. Resumiendo: Eliminación Gaussiana → 4, Gauss-Jordan → 2, Montante → 1 2.14. Complejidad de un algoritmo Existen dos medidas importantes de una estrategia de solución o algoritmo en la resolución de un problema. El concepto de algoritmo es el de un procedimento sistemático y muy bien especı́ficado para realizar una tarea determinada. La primer medida de un algoritmo es su certeza, es decir, la total confianza de que cuando el algoritmo es aplicado en un cierto problema, encontrará la solución correcta o bien indicará que el problema no tiene solución. La otra medida es la complejidad de un algoritmo, es decir, la cantidad de trabajo involucrado por aquella persona o sistema de cómputo que lleva a cabo cada uno de los pasos. En los algoritmos donde se buscan soluciones numéricas el principal indicador de la medida de trabajo o complejidad es el conteo total de las operaciones aritméticas realizadas desde el inicio del programa hasta la obtención de la solución. Las operaciones que se contabilizan son las operaciones de suma, multiplicación, sustracción, y división. Puesto que para las computadoras recientes el tiempo invertido por su procesador en una suma es el mismo que el realizado por una multiplicación, resta, o división, en el conteo de operaciones no se especifica si fueron unas u otras. La palabra FLOP (FLoating point OPeration) refiere a una operación entre números reales y abarca suma, resta, multiplicación, o división. Actualmente, en computación la palabra FLOPS es utilizada como acrónimo de FLoating point Operations Per Second, pero en el área de análisis de algoritmos y para nosotros tiene el significado que ya explicamos y FLOPs será el plural de FLOP. El análisis que realizaremos de la complejidad de los algoritmos vistos será contando el número total de FLOPs que se invierte cuando se aplica a un sistema lineal de n ecuaciones con n incógnitas general. Despreciaremos en nuestro análisis el esfuerzo computacional de preguntar si un número es diferente de cero, ası́ como los posibles intercambios entre los renglones para darle la forma escalonada. Sobre este último punto, la mayorı́a de las implementaciones computacionales de los algoritmos poseen trucos de programación para evitar el movimiento de números en la memoria de la computadora utilizando apuntadores y vectores de ı́ndices. Un hecho que asumiremos es que nunca nos encontraremos con una columna de ceros. De encontrarse tal columna el trabajo computacional se reducirı́a porque la matriz con la cual se opera tiene menos números, y esto no es un caso general. Este tipo de suposiciones se conoce como el análisis del peor de los casos. En los siguientes análisis, haremos el truco de introducir la variable m que irá bajando sobre los renglones de la matriz. 2.15. Complejidad del algoritmo de Gauss Supongamos que estamos aplicamos el algoritmo de eliminación gaussiana a un sistema n por n y que estamos trabajando ya con el renglón m. Consideraremos primero el trabajo realizado por los pasos 1 al 4 y posteriormente el trabajo realizado en el paso 5. Es importante notar que el proceso de Gauss avanza dejando 14 la matriz escalonada hasta la columna de trabajo: a1,1 a1,2 · · · a1,m−1 a1,m 0 a2,2 · · · a2,m−1 a2,m .. .. .. .. .. . . . . . 0 0 · · · am−1,m−1 am−1,m 0 0 ··· 0 am,m . .. .. .. .. .. . . . . 0 0 ··· 0 an,m ··· ··· .. . ··· ··· .. . ··· 1 Ciclo del paso 1 al 4 Al asumir que am,m es diferente de cero, pasamos al paso 3. En el paso 3 hay que hacer cero debajo del elemento (m, m), para cada uno de los m − n renglones inferiores Ri ; para ello habrá que calcular el factor f = ai,m /am,m por el cual debe multiplicarse el renglón Rm , lo cual implica realizar una división, y posteriormente realizar la operación: Ri ← Ri − f Rm . En este caso, en el renglón i hay ceros hasta antes de la columna m, en el elemento (i, m) quedará un cero (el factor f fue calculado para ello), ası́ que los únicos elementos que deberán calcularse son los elementos del renglón i desde la columna (m + 1) y hasta terminar, es decir, hasta la columna n + 1, es decir, un total de (n + 1) − (m + 1) + 1 = n − m + 1 elementos, y para cada uno de ellos habrá que hacer am+1,j ← am+1,j − f × am,j , es decir para cada uno de ellos habrá que hacer 2 FLOPs, siendo un total de n − m + 1 elementos, el número total de FLOPs que habrá que realizar para hacer la operación Ri ← Ri − f Rm es, incluyendo la división para calcular f , 2(n − m + 1) + 1 = 2n − 2m + 3. Como esto habrá que aplicarlo a todos los renglones por debajo del renglón m y hasta el n, entonces para realizar un ciclo desde el paso 1 hasta el paso 4 deben hacerse (n − m) (2 n − 2m + 3) FLOPS. El ciclo del paso 1 al paso 4 y su repetición irá avanzando m desde 1 hasta n − 1. Por consiguiente el total de FLOPs será: n−1 X 2 1 7 (n − m) (2 n − 2 m + 3) = n3 + n2 − n. 3 2 6 m=1 El ciclo en el paso 5 inicia en el último renglón, hace 1 el elemento pivote y luego a cada renglón superior el resta el renglón inferior multiplicado por la constante adecuada. Ası́, si asumimos que se está trabajando en el renglón m la matriz se verı́a: a1,1 a1,2 · · · a1,m 0 · · · 0 a1,n+1 0 a2,2 · · · a2,m 0 · · · 0 a2,n+1 .. .. .. .. .. .. .. .. . . . . . . . . 0 0 · · · am,m 0 · · · 0 am,n+1 0 0 ··· 0 1 · · · 0 am+1,n+1 . . . . . . . . . . . . . . . . . . . . . . . . 0 0 ··· 0 ··· 0 1 an,n+1 Es decir, que en el renglón m sólo existirán dos elementos diferentes de cero; el elemento (m, m) y el elemento (m, n + 1). 15 2 Ciclo del paso 5. Las operaciones implicadas en el paso 5 serán 1 Rm ← am,m Rm Por la observación anterior, para esto se requiere sólo una división; la del término constante entre el elemento pivote, la del pivote entre sı́ mismo ya sabemos que dará 1 y no se realizará, simplemente en la posición (m, m) pondremos un 1 Rj ← Rj − aj,m Rm Por la misma observación anterior, esta operación sólo requiere una multiplicación y una resta, estas operaciones sólo tienen que ver con los términos constantes. Los nuevos elementos aj,m serán cero. Como hay m − 1 renglones superiores, el total de operaciones en un ciclo del paso 5 será: 2 (m − 1) + 1 = 2 m − 1 Por consiguiente el total de FLOPs en el paso 5 será: 1 X (2 m − 1) = n2 m=n Por consiguiente, en general cuando se aplica en algoritmo de eliminación gaussiana a un sistema n × n el número de FLOPs es: 2 3 3 2 7 n + n − n (21) 3 2 6 2.16. Complejidad del algoritmo de Gauss-Jordan Supongamos que estamos aplicando el algoritmo a una matriz aumentada n por n + 1 y que estamos trabajando con el renglón m. El algoritmo avanza del primer renglón hasta el último. Es importante notar que el proceso de Gauss-Jordan avanza dejando la matriz reducida hasta el renglón de trabajo Rm : 1 0 ··· 0 1 ··· .. .. . . . . . 0 0 ··· 0 0 ··· .. .. . . . . . 0 0 ··· 0 0 .. . a1,m a2,m .. . ··· ··· .. . 1 am−1,m · · · 0 am,m · · · .. .. .. . . . 0 an,m ··· Supongamos que estamos ubicados en el renglón m, lo que debemos hacer es hacer un uno pivote en la posición (m, m) y posteriormente hacer ceros por arriba y por debajo de él. 1. Paso 2. Lo que debe hacerse es dividir el renglón entre el elemento pivote: en dicho renglón, antes de la columna m hay ceros, en el elemento (m, m) quedará un 1, ası́ que los únicos elementos a calcular en el renglón m son apartir de la columna m + 1 y hasta la columna n + 1. Ası́ deberán hacerse (n + 1) − (m + 1) + 1 = n − m + 1 divisiones. 16 2. Paso 3. Para cada renglón i diferente de m debemos realizar Ri ← Ri − ai,m Rm . Cómo el renglón m tiene ceros antes de la columna m y en ai,m quedará un cero, los únicos elementos que se calcularán son ai,j ← ai,j − ai,m am,j , desde j = m + 1 y hasta j = n + 1, es decir un total de (n + 1) − (m + 1) + 1 = n − m + 1. Como para cada uno de ellos se realizan dos operaciones entonces el total de FLOPs para hacer un cero en un renglón arriba o abajo de (m, m) se requieren 2 (n − m + 1) Como hay en total n renglones , el número total de FLOPs en el paso 3 será: (n − 1) 2 (n − m + 1) Por consiguiente, en una iteración del paso 2 seguido del paso 3 se harán n − m + 1 + (n − 1) 2 (n − m + 1) Como el algoritmo de Gauss-Jordan itera los pasos 2 y 3 recorriendo todos los renglones, el número total de FLOPs será: n X 1 1 (n − m + 1 + (n − 1) 2 (n − m + 1)) = n3 + n2 − n 2 2 m=1 Ası́, la complejidad del algoritmo de Gauss-Jordan es: 1 1 n3 + n2 − n 2 2 2.17. (22) Complejidad del algoritmo de Montante Supongamos que aplicamos el algoritmo a una matriz aumentada n por n + 1. El algoritmo avanza del primer renglón hasta el último. Es importante notar que el proceso de Montante avanza dejando la matriz de la siguiente forma hasta la columna de trabajo: a1,1 0 · · · 0 a1,m ··· 0 a2,2 · · · 0 a2,m ··· .. .. .. .. .. .. . . . . . . 0 0 · · · am−1,m−1 am−1,m · · · 0 0 · · · 0 a · · · m,m . .. .. .. .. .. .. . . . . . 0 0 ··· 0 an,m ··· Supongamos que estamos ubicados en el renglón m, lo que debemos hacer es hacer ceros por arriba y por debajo de él. Multiplicación de los renglones superiores por am,m . Esto implica realizar multiplicaciones por un total de: (m − 1) (n − m + 1) + m − 1 Multiplicación de los renglones inferiores por am,m . Esto implica realizar multiplicaciones por un total de: (n − m) (n − m + 1) A cada renglón diferente de m aplicarle Ri ← Ri − ai,m Rm Esto da un total de: (n − 1) 2 (n − m + 1) 17 Sumando los términos anteriores, el total de FLOPs para el trabajo con el renglón m es: 3 n2 − 3 m n + 4 m − 4 Por consiguiente, al repetir estos pasos desde el primer renglón hasta el último darán un total de FLOPs: n X m=1 3 1 3 n2 − 3 m n + 4 m − 4 = n3 + n2 − 2 n 2 2 Posteriormente habrá que hacer 1 cada elemento pivote realizando n divisiones adicionales. Ası́, la complejidad del algoritmo de Montante es: 3 3 1 2 n + n −n (23) 2 2 2.18. Comparativa de los algoritmos A pesar que la complejidad de los algoritmos indica que el algoritmo de eliminación gaussiana es mejor por tener la menor complejidad, la versión en computadora paralela (muchos procesadores) del algoritmo de Gauss-Jordan tiene una menor complejidad que la versión paralela del algoritmo de Eliminación Gaussiana. Al asignarle a cada procesador la instrucción Ri ← Ri −f ·Rj , eliminación gaussiana los ejecuta de i = j +1, . . . , n mientras que Gauss-Jordan los ejecuta para i 6= j, aprovechando los procesadores más eficientemente. El algoritmo de Montante tiene la ventaja que si se utiliza para matrices con coeficientes enteros las únicas divisiones realizadas serán las últimas, lo cual reduce sustancialmente el error numérico. Una desventaja importante del algoritmo de Montante es que los coeficientes en la matriz pueden crecer considerablemente. En resumen, aunque el mejor algoritmo general para resolver un sistema de ecuaciones lineales es el algoritmo de eliminación gaussiana, puede haber situaciones particulares al problema o al ambiente de computo que haga que otro algoritmo tenga ventajas sobre él. Por ello es que es conveniente conocer otras alternativas para resolver problemas y conocer sus ventajas o desventajas. 2.19. Algoritmos y computadoras Las computadoras operan realizando instrucciones básicas paso a paso. Dichas instrucciones son ejecutadas en forma sı́ncrona con un reloj interno. En nuestros dı́as (año de 2005), es común escuchar que la velocidad de una computadora se mida en algunos pocos gigahertz, digamos por ejemplo 1.3 Gigahertz. Ello quiere decir que el reloj interno de una computadora ejecutará 1.3 × 109 ciclos en un segundo. Lo cual equivale a decir que aproximadamente dicha computadora ejecutará 1.3 × 109 instrucciones básicas en un segundo. El tiempo de ejecución de un FLOP en las computadoras puede variar; en algunas computadoras toma el tiempo de 1, 2 o en algunos casos 3, instrucciones básicas para completar un FLOP. Si seguimos el ejemplo de la computadora de 1.3 Ghz y suponemos que nuestra hipotética computadora tome 2 instrucciones básicas para completar un FLOP, podrı́amos decir que cada FLOP tomarı́a 1/(1.3 × 109 )/2 segundos. Para tener una idea del uso de la complejidad del algoritmo para determinar tiempos de computo, digamos que se desea utilizar un programa que realiza el algoritmo de Gauss en dicha computadora para resolver un sistema de 100 × 100. Entonces, dicho programa realizará 681550 FLOPs, por consiguiente el tiempo que tomará sólo en operaciones de punto flotante será 681550/(1.3 × 109 )/2 ≈ 0.000262 segundos. Mientras que para un sistema 1000 × 1000 será de .256986 segundos y para uno de 10000 × 10000 será de 256.467 segundos. En ambientes de manufactura donde se utiliza el método del elemento finito para hacer simulaciones, es común trabajar con matrices de más de 106 × 106 . Resolver un sistema 106 × 106 en tal computadora se requerirı́a, contando sólo tiempo por operaciones de punto flotante, un poco más de 8 años en ser resuelto. Además, requerirı́a más de 900 terabytes para ser almacenado. Por ello, es que existen algoritmos especializados que aprovechan el hecho de que la matriz tiene una forma particular para economizar operaciones y espacio. 18 2.20. Y los determinantes del Método de Montante? En la definición original del método de Montante como fue propuesto por su creador, se hacı́a referencia a determinantes de 2 por 2. En la presentación dada en esta lectura hemos omitido tal referencia y hemos preferido reducir el método a operaciones elementales de renglón las cuales creemos que hacen el método más claro y que no requieren ningún otro concepto. Para corroborar la equivalencia, vea los siguientes cálculos al aplicar el método Montante en la matriz dada y compare los contenidos de la matriz intermedia en la posición (2, 2) o (3, 2) con la matriz inicial. Primeramente obligamos a que sean múltiplos de (1, 1) los contenidos de (2, 1) y (3, 1): a11 a12 · · · a11 a12 ··· R2 ←a11 R2 a21 a22 · · · − −−−−−−→ a11 a21 a11 a22 · · · (24) R3 ←a11 R3 a31 a32 · · · a11 a31 a11 a32 · · · Posteriormente, se procede a hacerlos cero utilizando el elemento pivote (1, 1): a11 a12 ··· R2 ←R2 −a21 R1 a11 a21 a11 a22 · · · − −−−−−−−−−→ R3 ←R3 −a31 R3 a11 a31 a11 a32 · · · a11 a12 ··· 0 a11 a22 − a21 a12 · · · 0 a11 a32 − a31 a12 · · · (25) Viendo los contenidos finales de (2, 2) o de (3, 2) la referencia a los determinantes 2 por 2 en la matriz inicial es obvia, aunque consideramos que también innecesaria. 2.21. Pero, qué método me conviene seguir? Como se verá más adelante en el curso, debido al significado de cada número en la reducida, la matriz reducida obtenida de una matriz dada es única. Esto significa que cualquier procedimiento basado en operaciones elementales de renglón debe llevar al mismo resultado. Por tanto, esto nos da la posibilidad de seguir cualquier estrategia basada en operaciones elementales de renglón para reducir una matriz. Lo que normalmente se hace es revisar a simple vista en cada momento aquél elemento que conviene que sea pivote de manera que involucre o menor número de operaciones o bien operaciones menos complejas. Sin duda, el hacer un número razonable de ejemplos le irá construyendo la intuición del camino personal de reducción de una matriz. 19