Está en la página 1de 14

Pra on de sistemas de ctica de resoluci ecuaciones lineales con MATLAB

J. Mas, X. Casab an y J. Mar n

Indice
1. Introducci on 1 2. La orden \ de MATLAB para resolver sistemas de ecuaciones 2 lineales 3. Las factorizaciones LU y de Cholesky en MATLAB 3.1. La factorizaci on LU . . . . . . . . . . . . . . . . . . . . . . . 3.2. La factorizaci on de Cholesky . . . . . . . . . . . . . . . . . . . 4. Errores num ericos al aplicar el algoritmo de Gauss 5. La orden linsolve 3 4 9 13 13

1. Introducci on
En toda la pr actica tratamos de resolver el sistema Ax = b (1)

donde suponemos que A es una matriz cuadrada con n las y n columnas invertible. MATLAB dispone de varios programas para resolver sistemas de ecuaciones lineales utilizando m etodos directos o m etodos iterativos basados en subespacios de Krylov. En esta pr actica estudiaremos s olo m etodos directos.

2. La orden \ de MATLAB para resolver sistemas de ecuaciones lineales


Para resolver el sistema (1) utilizando un m etodo directo con el programa MATLAB hay que utilizar el comando \. Descrito brevemente A\B es A1 B , por tanto para resolver (1) basta escribir A\b, en realidad se puede aplicar para obtener la soluci on del sistema AX = B , donde B es una matriz con el mismo n umero de las que A y un n umero cualquiera de columnas. El algoritmo que aplica MATLAB depende de la matriz A. Se procede de la siguiente forma (traducci on casi literal de la ayuda de MATLAB prescindiendo de las referencias a matrices dispersas): Si A es una matriz triangular o una permutaci on de una matriz triangular, entonces X puede calcularse r apidamente por un algoritmo de sustituci on regresiva permutado. Si A es sim etrica o herm tica y tiene elementos positivos en la diagonal principal, se intenta hacer una factorizaci on de Cholesky. Si se encuentra que A es denida positiva, el intento de calcular la factorizaci on de Cholesky tiene exito y requiere menos de la mitad del tiempo que una factorizaci on general. Normalmente las matrices no denidas positivas se detectan casi inmediatamente, por tanto esta comprobaci on requiere poco tiempo. Si tiene exito la factorizaci on de Cholesky es A = RT R, donde R es triangular superior. La soluci on X se calcula resolviendo dos sistemas triangulares X=R\(R\B) Si A es una matriz de Hessenberg (es decir una matriz con los elementos situados por debajo de la diagonal principal nulos, excepto los de la diagonal inmediatamente debajo de la principal: aij = 0, si i > j +1), a partir de la versi on 6 de MATLAB, la matriz se reduce a triangular superior y ese sistema se resuelve por sustituci on regresiva. En versiones anteriores se sigue el procedimiento general, descrito a continuaci on. Si A es cuadrada pero no es una permutaci on de una matriz triangular, o no es herm tica con elementos positivos en la diagonal principal, o la factorizaci on de Cholesky fracasa entonces se calcula una factorizaci on triangular general por el m etodo de eliminaci on gaussiana con pivotamiento parcial (ver la orden lu en la secci on 3). Esto da como resultado A = LU , donde L es una permutaci on de una matriz triangular inferior y U es una matriz triangular superior. Entonces X se calcula resolviendo dos sistemas triangulares permutados X=U\(L\B).

La descripci on de la ayuda de MATLAB sigue puesto que \ tambi en se utiliza para obtener la soluci on de m nimos cuadrados cuando A no es cuadrada. Como se puede ver \ utiliza el mejor algoritmo directo posible en funci on de las propiedades de la matriz A. Podemos comprobar esta armaci on viendo que el tiempo necesario para resolver los diferentes sistemas cambia en funci on de c omo son (de todas formas conviene tener en cuenta que el tiempo de resoluci on depende de muchos factores, algunos de ellos externos a MATLAB, y por tanto es muy variable). Ejercicio 1 Ejecutar las siguientes ordenes y comparar los tiempos, orden andolos de mayor a menor. Tener en cuenta que A es una matriz sin ninguna propiedad especial, B es sim etrica y denida positiva (excepto en el improbable caso de que A no sea invertible) y T es triangular superior y H es una matriz de Hessenberg1 >> >> >> >> >> >> >> >> >> >> n = 1000; A = randn(n); T = triu(A); H = triu(A, -1); B = A*A; b = randn(n,1); tic, A\b; toc tic, T\b; toc tic, H\b; toc tic, B\b; toc

3. Las factorizaciones LU y de Cholesky en MATLAB


Como se ha visto en la secci on 2 la orden \ de MATLAB utiliza la factorizaci on LU con pivotamiento parcial o la factorizaci on de Cholesky para resolver el sistema (1) seg un sea la matriz A. De todas formas se pueden calcular estas factorizaciones.
1

La orden spy(H) mostrar a los elementos no nulos de H .

3.1. La factorizaci on LU
La orden para calcular la factorizaci on LU de la matriz A es lu. S olo requiere un dato que es la propia matriz A, pero se le pueden pedir como resultado una, dos o tres matrices. Si se piden tres matrices ([L, U, P] = lu(A)), L es una matriz triangular inferior con unos en la diagonal principal, U es triangular superior y P es una matriz de permutaci on tal que P A = LU . Para resolver (1) se puede utilizar la orden U\(L\(P*b)). Si se le piden dos matrices ([L, U] = lu(A)), L es una matriz psicol ogicamente 2 triangular inferior, en realidad es el producto de la inversa de la matriz de permutaci on que se ha aplicado por la matriz triangular inferior que proporciona la factorizaci on, y U es triangular superior. Se puede ordenes U\(L\b). resolver (1) con las Por u olo se pide una matriz se obtiene una matriz con los ltimo si s elementos no nulos de U y los no nulos y que no corresponden a un uno de la diagonal principal de L. Esta matriz no es en realidad muy u til. Ejemplo 1 Vamos a utilizar la factorizaci on LU para resolver un sistema de ecuaciones lineales
A=[3 -1 2 4; 2 0 -1 3; 7 2 1 4; 0 -1 2 3]; b=[2 -1 3 9]; [L,U]=lu(A)

L = 0.42857 0.28571 1 0 1 0.30769 0 0.53846 0 1 0 -0.65217 0 0 0 1

U = 7 0 0 0
2

2 -1.8571 0 0

1 1.5714 -1.7692 0

4 2.2857 1.1538 2.5217

Seg un la ayuda de MATLAB

sol=U\(L\b)

sol = -3.2931 5.7414 3.0517 2.8793


sol2=A\b

sol2 = -3.2931 5.7414 3.0517 2.8793


sol==sol2

ans = 1 1 1 1 se observa que L no es triangular inferior, pero es muy f acil reordenarla intercambiando las para que lo sea. Tambi en se ha comprobado que la soluci on proporcionada por el comando \ de MATLAB coincide exactamente con la calculada utilizando la factorizaci on LU . Aunque en el c alculo de esta se han realizado m as operaciones que con \ se precisa menos tiempo, esto se debe a que \ realiza una serie de comprobaciones previas. Seguimos ahora calculando con la misma matriz, pero obteniendo la matriz de permutaci on.
[L,U,P]=lu(A)

L = 5

1 0.42857 0.28571 0

0 1 0.30769 0.53846

0 0 1 -0.65217

0 0 0 1

U = 7 0 0 0 2 -1.8571 0 0 1 1.5714 -1.7692 0 4 2.2857 1.1538 2.5217

P = 0 1 0 0
P*A-L*U

0 0 1 0

1 0 0 0

0 0 0 1

ans = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

sol=U\(L\(P*b))

sol = -3.2931 5.7414 3.0517 2.8793

ahora L es realmente triangular inferior. N otese que para calcular la soluci on hay que reordenar el vector b multiplic andolo por P . Por u ltimo
LU=lu(A)

LU = 7 -0.28571 -0.42857 0 2 -1.8571 -0.30769 -0.53846 1 1.5714 -1.7692 0.65217 4 2.2857 1.1538 2.5217

como puede verse est an los elementos de L y de U , pero es dif cil reconstruir ambas matrices, por lo que esta forma de utilizar la orden lu no es recomendable. Ejercicio 2 Si A = LU es la factorizaci on LU de A, entonces
n

aij =
r =1

lir urj ,

pero teniendo en cuenta la estructura triangular de las matrices L y U , la expresi on anterior se reduce a
m n(i,j )

aij =
r =1

lir urj ,

que si se ordenan adecuadamente, y recordando que lkk = 1 son sencillas de resolver. Supongamos pues que A Rmn , donde m n y que L Rmn es trapezoidal inferior (lij = 0, si i < j ) y que U Rnn . Si se conocen las primeras k 1 columnas de L y las primeras k 1 las de U , como lkk = 1, se tiene: akj = lkj u1j + + lk,k1 uk1,j + ukj , aik = li1 u1k + + lik ukk , j = k, k + 1, . . . , n.

i = k + 1, . . . , m.

donde los elementos recuadrados pueden calcularse f acilmente. Este proceso se conoce con el nombre de m etodo de Doolittle y da lugar al algoritmo 1. Escribir un programa MATLAB que implemente el algoritmo de Doolittle. 7

Algoritmo 1 M etodo de Doolittle Este algoritmo calcula la factorizaci on LU , A = LU , A Rmn , m n (suponiendo que existe) por el m etodo de Doolittle. ENTRADA: La matriz A SALIDA: Las matrices L y U 1: para k = 1 : n hacer 2: para j = k : n hacer 1 3: ukj = akj k i=1 lki uij 4: n para 5: para i = k + 1 : m hacer 1 6: lik = aik k j =1 lij ujk /ukk 7: n para 8: n para Nota: Los sumatorios de las l neas 3 y 6 son en realidad productos escalares. En el caso de la l nea 3, es el producto escalar de parte de la la k de L (los primeros k 1 elementos) por parte de la columna j de U (los primeros k 1 elementos). Este producto escalar puede hacerse en MATLAB con la orden L(k, 1:k-1) * U(1:k-1, j), siendo esta la forma m as eciente de calcularla. Ejercicio 3 Comprobar el funcionamiento del programa con las siguientes matrices 3 1 2 3 1 2 4 2 1 7 2 1 , , 2 1 5 7 8 3 a) b) c) 4 5 0 1 0 4 7 1 0 3 1 2 Ejercicio 4 Qu e ocurre al aplicar el programa a la matriz c) del ejercicio anterior? Modicar el programa para que en caso de producirse esta situaci on se detecte y se muestre un mensaje de error. Ejercicio 5 Qu e matrices tienen factorizaci on LU ? (Se entiende sin realizar ninguna permutaci on) Ejercicio 6 Calcular mediante el m etodo de Doolittle la factorizaci on LU

de la matriz

A=

4 8

1 5

1 16 44 23 6

aplicar el resultado para resolver el sistema Ax = b donde b = 14 . 37 Calcular la soluci on utilizando la factorizaci on LU con pivotamiento parcial (es decir usando la orden lu de MATLAB) y comparar los resultados sabiendo que la soluci on exacta es el vector con todas las componentes iguales a 1.

3.2. La factorizaci on de Cholesky


La factorizaci on de Cholesky de una matriz sim etrica denida positiva A puede calcularse con MATLAB con la orden chol. Esta funci on s olo precisa un dato que es la matriz de la que quiere calcularse la factorizaci on. Debe tenerse en cuenta que chol no comprueba si la matriz es sim etrica, s olo usa su parte triangular superior, esto puede dar lugar a errores, como se ilustra en el siguiente ejemplo. Ejemplo 2
A=[ 5 -1 2 1; 0 4 2 -1; 0 0 5 1; 0 0 0 3]; spy(A) R=chol(A)

R = 2.2361 0 0 0
R*R

-0.44721 1.9494 0 0

0.89443 1.2312 1.6384 0

0.44721 -0.41039 0.67462 1.4753

ans = 5 -1 -1 4 9 2 2 1 -1

2 1
spy(ans) chol(ans)

2 -1

5 1

1 3

ans = 2.2361 0 0 0 -0.44721 1.9494 0 0 0.89443 1.2312 1.6384 0 0.44721 -0.41039 0.67462 1.4753

como puede verse la matriz A no es sim etrica y MATLAB s olo utiliza la parte triangular superior, por lo que obtiene un resultado incorrecto. Es por tanto necesario asegurarse de que la matriz sea sim etrica. Si no estamos seguros de que la matriz A es sim etrica podemos comprobarlo escribiendo all(all(A==A)), si el resultado es 1 es sim etrica, si es 0 no lo es. Por otra parte, si la matriz A no es denida positiva chol devuelve un mensaje de error. En general no es f acil comprobar si una matriz sim etrica es denida positiva o no (una matriz sim etrica denida positiva tiene todos los elementos de la diagonal principal positivos, por tanto si alguno de ellos es negativo o nulo no se trata de una matriz denida positiva, pero puede suceder que todos los elementos de la diagonal principal sean positivos y la matriz no sea denida positiva). Una de las formas de comprobar si una matriz sim etrica es denida positiva es intentar calcular su factorizaci on de Cholesky. Ejemplo 3 Dada la siguiente matriz (con elementos positivos en la diagonal principal) al intentar calcular su factorizaci on de Cholesky se comprueba que no es denida positiva. >> A=[2 -1 1;-1 2 2;1 2 2] A = 2 -1 1 -1 2 2 1 2 2 10

>> R=chol(A) ??? Error using ==> chol Matrix must be positive definite. Como se ha visto chol calcula el factor triangular superior. Si se quiere utilizar el resultado para resolver el sistema (1) se puede utilizar el factor con la orden R\(R\b) Ejemplo 4
A=[ 10 -1 2 1; -1 8 2 -1; 2 2 10 1; 1 -1 1 6]; b=[3 -1 2 4]; R=chol(A)

R = 3.1623 0 0 0
sol=R\(R\b)

-0.31623 2.8107 0 0

0.63246 0.78272 2.9979 0

0.31623 -0.32021 0.35046 2.3822

sol = 0.2132 -0.049392 0.10673 0.60511


sol2=A\b

sol2 = 0.2132 -0.049392 0.10673 0.60511


sol==sol2

11

ans = 0 0 0 0
sol-sol2

ans = -5.5511e-017 2.7756e-017 -4.1633e-017 1.1102e-016


R*R-A

ans = 1.7764e-015 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.8818e-016

Ejercicio 7 Decir cu ales de las siguientes matrices tienen factorizaci on de Cholesky. En caso armativo obtenerla y en caso negativo indicar las razones por las que no la tiene. 4 1 2 3 1 2 5 1 2 5 1 , A = 1 1 0 , B= 1 C= 1 6 1 2 0 2 2 1 4 2 0 3 7 1 2 3 1 3 5 4 2 5 1 , 1 D = 1 6 0 , E= 1 F = 4 6 2 0 3 3 1 4 2 1 1 Ejercicio 8 Para las matrices anteriores que tienen factorizaci on de Cholesky utilizarla para resolver el sistema con b = 1 1 1 . 12

4. Errores num ericos al aplicar el algoritmo de Gauss


Ejecutando el chero errGauss podemos ver un ejemplo de sistema que si se resuelve sin usar ninguna t ecnica de pivotamiento da lugar a un error considerable, si en cambio se utiliza pivotamiento parcial el resultado obtenido es correcto.

5. La orden linsolve
A partir de la versi on 7 de MATLAB se incorpora la orden linsolve. Esta orden es similar a \. De hecho si A es una matriz cuadrada y b es un vector sol = linsolve(A, b) resuelve el sistema Ax = b por el algoritmo de Gauss con pivotamiento parcial. La diferencia entre usar \ y linsolve es que esta u ltima orden no hace las comprobaciones que mencion abamos en la secci on 2. De hecho si la matriz tiene alguna propiedad que se pueda aprovechar se debe indicar a la orden linsolve como una opci on. Por ejemplo si la matriz es triangular inferior podemos denir opcion.LT = true y luego resolver sol = linsolve(A, b, opcion) Las opciones que se pueden utilizar de esta forma son las del cuadro 1. Todas ellas admiten los valores falso, false, que es el valor que tienen por defecto y verdadero, true. Aunque se pueden indicar varias opciones como verdaderas hay restricciones l ogicas. Es muy importante tener en cuenta que MATLAB no comprueba si la matriz tiene la propiedad en cuesti on o no. Esto es lo que permite que esta orden sea m as r apida.

13

Opci on LT UT UHESS POSDEF RECT TRANSA

Propiedad de la matriz Triangular inferior Triangular superior Hessenber superior Denida positiva Rectangular Indica si hay que resolver A x = b

Cuadro 1: Opciones de la orden linsolve.

14

También podría gustarte