Resolución de sistemas lineales por métodos directos Descomposición LU Si la matriz del sistema Ax = b se expresa como producto de una matriz triangular inferior, L, y de una superior, U, la resolución del mismo se reduce a hallar las soluciones de los sistemas Ly = b y Ux = y. Veamos un ejemplo. La matriz A = 881, 2, 4<, 82, 9, 7<, 8−1, 8, −2<<; es el producto de las matrices L = 881, 0, 0<, 82, 1, 0<, 8−1, 2, 4<<; U = 881, 2, 4<, 80, 5, −1<, 80, 0, 1<<; Entonces, la solución del sistema que tiene a A como matriz de coeficientes y b = 810, 9, −2<; como vector de términos independientes se resuelve en dos etapas: primero un sistema triangular inferior y luego uno superior. Si A es una matriz, Dimensions[A] produce una lista de dos componentes: la primera posición es el número de filas de A y la segunda el de columnas. Si A es una matriz cuadrada, el orden de la misma aparece como primera componente (o segunda) de dicha lista. n = Dimensions@ADP1T; y = Table@0, 8i, n<D; bP1T yP1T = ; LP1, 1T ForAi = 2, i ≤ n, i ++, yPiT = bPiT − ⁄i−1 k=1 LPi, kT yPkT x = Table@0, 8i, n<D; yPnT xPnT = ; UPn, nT ForAi = n − 1, i ≥ 1, i −−, xPiT = x 9− LPi, iT E; yPiT − ⁄nk=i+1 UPi, kT xPkT 93 7 15 ,− , = 5 10 2 Es fácil, y rápido, verificar la corrección de la solución: UPi, iT E; A.x == b True ü Casos usuales El problema es, evidentemente, hallar la descomposición LU de la matriz. ü Factorización de Doolittle La diagonal de la matriz L es unitaria. Veamos un ejemplo. A = 8860, 30, 20<, 830, 20, 15<, 820, 15, 12<<; n = Dimensions@ADP1T; U = Table@0, 8i, n<, 8j, n<D; L = Table@0, 8i, n<, 8j, n<D; For@i = 1, i ≤ n, i ++, LPi, iT = 1D; UP1, 1T = AP1, 1T; For@j = 2, j ≤ n, j ++, UP1, jT = AP1, jTD; APi, 1T E; ForAi = 2, i ≤ n, i ++, LPi, 1T = UP1, 1T ForAk = 2, k ≤ n − 1, k ++, UPk, kT = APk, kT − ‚ LPk, rT UPr, kT; k−1 r=1 ForAj = k + 1, j ≤ n, j ++, UPk, jT = APk, jT − ‚ LPk, rT UPr, jTE; k−1 APi, kT − ⁄k−1 r=1 LPi, rT UPr, kT r=1 ForAi = k + 1, i ≤ n, i ++, LPi, kT = E; UPn, nT = APn, nT − ‚ LPn, rT UPr, nT; n−1 r=1 MatrixForm@LD MatrixForm@UD 1 0 0y i j z j j z 2 1 0z j z j z j z k −1 2 1 { 1 2 4 y i j z j z j 0 5 −1 z j z z j j z 0 0 4 k { Es inmediato comprobar que la factorización es correcta, pues UPk, kT E L.U == A True Comentemos el código. En la primera línea se define una variable que corresponde al orden de la matriz; a continuación, se inicializan las matrices L y U que, al final, serán las matrices de la factorización de Doolittle; en la primera etapa del método, se determina el primer elemento de la diagonal de U y, luego, los elementos de la primera columna de L bajo la diagonal, y los restantes elementos de la primera fila de U. Seguidamente, se establece un bucle para calcular desde el segundo elemento de la diagonal de U hasta el penúltimo: calculado uno de ellos, se determinan los restantes de la correspondiente columna de L y de la correspondiente fila de U. Por último, se calcula el último elemento de la diagonal de U. ü Factorización de Crout La diagonal de la matriz U es unitaria. Se trata de forma análoga a la factorización de Crout. ü Factorización de Cholesky La matriz A que se pretende factorizar debe ser simétrica y definida positiva. La factorización de A debe ser de la forma A = L LT . Veamos un ejemplo A = 882., −1., 0., 0.<, 8−1., 2., −1., 0.<, 80., −1., 2., −1.<, 80., 0., −1., 2.<<; MatrixForm@AD Es simétrica. Además, las submatrices diagonales principales tienen determinantes positivos: n = Dimensions@ADP1T; detprincipales = Table@Det@Table@Table@APi, jT, 8j, k<D, 8i, k<DD, 8k, n<D Por tanto, es definida positiva. Es aplicable el método de Cholesky. L = Table@0, 8i, n<, 8j, n<D; è!!!!!!!!!!!!!!!!!! AP1, 1T ; LP1, 1T = ForAi = 2, i ≤ n, i ++, LPi, 1T = APi, 1T LP1, 1T E; ForAk = 2, k ≤ n − 1, k ++, 2% %%%%%%%%%rT %%%%%%% LPk, kT = $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% APk, kT − ⁄ LPk, ; k−1 r=1 ForAi = k + 1, i ≤ n, i ++, LPi, kT = 2% %%%%%%%%%rT %%%%%%% ; LPn, nT = $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% APn, nT − ⁄ LPn, n−1 r=1 MatrixForm@LD Es inmediato ver que la factorización es correcta, pues L.Transpose@LD == A APi, kT − ⁄k−1 r=1 LPi, rT LPk, rT LPk, kT EE; Se puede modificar el procedimiento anterior para, como es lógico, no tener necesidad de estudiar previamente si la matriz es definida positiva o no. Aprovechamos la factorización para resolver el sistema Ax = b, donde b = 81, 2, 3, 4<; Su solución se calcula de la siguiente manera: U = Transpose@LD; y = Table@0, 8i, n<D; bP1T yP1T = ; LP1, 1T ForAi = 2, i ≤ n, i ++, yPiT = bPiT − ⁄i−1 k=1 LPi, kT yPkT x = Table@0., 8i, n<D; xPnT = yPnT UPn, nT ; ForAi = n − 1, i ≥ 1, i −−, xPiT = LPi, iT E; yPiT − ⁄nk=i+1 UPi, kT xPkT UPi, iT E; N@x, 10D Podemos comprobarlo: A.N@xD == b Ejercicios 1.- Halle la descomposición LU correspondiente a Crout de la matriz ij jj jj j A1 = jjjj jj jj k 39 ÅÅÅÅ ÅÅ 8 39 ÅÅÅÅ ÅÅ 4 1 2 0 3 6 1 117 117 ÅÅÅÅ ÅÅÅÅÅÅ - ÅÅÅÅ ÅÅÅÅÅÅ y 8 4 z zz 1 0 zzzz zz . 1 -1 zzzz z -1 10 { 2.- i) Apoyándose en la descomposición anterior, resuelva el sistema A1 x = b1 , donde b1 = H2, -6, 1, 9LT . ii) Utilice, asimismo, los comandos LinearSolve e Inverse para resolver el mismo sistema. 3.- Obtenga la descomposición de Doolittle de A1 y, apoyándose en ella, vuelva a obtener la solución del sistema A1 x = b1 . 4.- Estudie si la matriz i j j j j j j j A2 =j j j j j j j j k 3025 64 165 4 55 8 0 165 4 37 7 0 0 y z z z z 7 0 z z z z z z 6 18 z z z z z 18 90 { 55 8 es definida positiva. 5.- Apoyándose en el ejercicio 4, resuelva el sistema A2 x = b2 , donde b2 = H2, 6, 1, 9LT . 6.- Aproveche la estructura tridiagonal y diagonalmente dominante de la matriz ij 40 jj jj 6 jj jj jj 0 A3 = jjj jj 0 jj jj jjj 0 j k 0 2 0 0 0 0 y zz 79 1 0 0 0 zzzz zz 9 117 2 0 0 zzz zz 0 -2 117 6 0 zzzz zz 0 0 -6 117 1 zzzz z 0 0 0 -1 38 { para hallar la correspondiente descomposición de Doolittle con el programa del ejercicio 1, y aplíquela para resolver el sistema A3 x = b3 , siendo 39 b3 = H2, -6, 2.45, ÅÅÅÅ ÅÅ , 1.365 .0L . 8 T