Está en la página 1de 14

Practica de resolucin de sistemas de o ecuaciones lineales con MATLAB

J. Mas, X. Casabn y J. Mar a n

ndice I
1. Introduccin o 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 factorizacin LU . . . . . . . . . . . . . . . . . . . . . . . o 3.2. La factorizacin de Cholesky . . . . . . . . . . . . . . . . . . . o 4. Errores numricos al aplicar el algoritmo de Gauss e 5. La orden linsolve 3 4 9 13 13

1. Introduccin o
En toda la prctica tratamos de resolver el sistema a 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 mtodos directos o mtodos iterativos basados en e e subespacios de Krylov. En esta prctica estudiaremos slo mtodos directos. a o e

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


Para resolver el sistema (1) utilizando un mtodo directo con el programa e 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 solucin del sistema AX = B, donde B es una matriz con el o mismo nmero de las que A y un nmero cualquiera de columnas. El algou u ritmo que aplica MATLAB depende de la matriz A. Se procede de la siguiente forma (traduccin casi literal de la ayuda de MATLAB prescindiendo de las o referencias a matrices dispersas): Si A es una matriz triangular o una permutacin de una matriz triano gular, entonces X puede calcularse rpidamente por un algoritmo de a sustitucin regresiva permutado. o Si A es simtrica o herm e tica y tiene elementos positivos en la diagonal principal, se intenta hacer una factorizacin de Cholesky. Si se encueno tra que A es denida positiva, el intento de calcular la factorizacin de o Cholesky tiene xito y requiere menos de la mitad del tiempo que una e factorizacin general. Normalmente las matrices no denidas positivas o se detectan casi inmediatamente, por tanto esta comprobacin requiere o poco tiempo. Si tiene xito la factorizacin de Cholesky es A = RT R, e o donde R es triangular superior. La solucin X se calcula resolviendo o 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 versin 6 de MATLAB, la matriz se reduce a triangular suo perior y ese sistema se resuelve por sustitucin regresiva. En versiones o anteriores se sigue el procedimiento general, descrito a continuacin. o Si A es cuadrada pero no es una permutacin de una matriz triangular, o o no es herm tica con elementos positivos en la diagonal principal, o la factorizacin de Cholesky fracasa entonces se calcula una factoro izacin triangular general por el mtodo de eliminacin gaussiana con o e o pivotamiento parcial (ver la orden lu en la seccin 3). Esto da como o resultado A = LU , donde L es una permutacin de una matriz triano gular inferior y U es una matriz triangular superior. Entonces X se calcula resolviendo dos sistemas triangulares permutados X=U\(L\B).

La descripcin de la ayuda de MATLAB sigue puesto que \ tambin o e se utiliza para obtener la solucin de m o nimos cuadrados cuando A no es cuadrada. Como se puede ver \ utiliza el mejor algoritmo directo posible en funcin de las propiedades de la matriz A. Podemos comprobar esta armacin o o viendo que el tiempo necesario para resolver los diferentes sistemas cambia en funcin de cmo son (de todas formas conviene tener en cuenta que el o o tiempo de resolucin depende de muchos factores, algunos de ellos externos o a MATLAB, y por tanto es muy variable). Ejercicio 1 Ejecutar las siguientes rdenes y comparar los tiempos, oro denndolos de mayor a menor. Tener en cuenta que A es una matriz sin a ninguna propiedad especial, B es simtrica y denida positiva (excepto en el e 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 seccin 2 la orden \ de MATLAB utiliza la faco torizacin LU con pivotamiento parcial o la factorizacin de Cholesky para o o resolver el sistema (1) segn sea la matriz A. De todas formas se pueden u calcular estas factorizaciones.
1

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

3.1. La factorizacin LU o
La orden para calcular la factorizacin LU de la matriz A es lu. Slo o o 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 permutacin tal que P A = LU . Para resolver (1) se puede o utilizar la orden U\(L\(P*b)). Si se le piden dos matrices ([L, U] = lu(A)), L es una matriz psicolgio camente 2 triangular inferior, en realidad es el producto de la inversa de la matriz de permutacin que se ha aplicado por la matriz triangular inferio or que proporciona la factorizacin, y U es triangular superior. Se puede o o resolver (1) con las rdenes U\(L\b). Por ultimo si slo se pide una matriz se obtiene una matriz con los o 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 util. Ejemplo 1 Vamos a utilizar la factorizacin LU para resolver un sistema o 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

Segn la ayuda de MATLAB u

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 fcil reordenarla a intercambiando las para que lo sea. Tambin se ha comprobado que la e solucin proporcionada por el comando \ de MATLAB coincide exactamente o con la calculada utilizando la factorizacin LU . Aunque en el clculo de sta o a e se han realizado ms operaciones que con \ se precisa menos tiempo, esto se a debe a que \ realiza una serie de comprobaciones previas. Seguimos ahora calculando con la misma matriz, pero obteniendo la matriz de permutacin. o
[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. Ntese que para calcular la solucin o o hay que reordenar el vector b multiplicndolo por P . a Por ultimo
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 estn los elementos de L y de U , pero es dif recona cil struir ambas matrices, por lo que esta forma de utilizar la orden lu no es recomendable. Ejercicio 2 Si A = LU es la factorizacin LU de A, entonces o
n

aij =
r=1

lir urj ,

pero teniendo en cuenta la estructura triangular de las matrices L y U , la expresin anterior se reduce a o
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 fcilmente. Este proceso a se conoce con el nombre de mtodo de Doolittle y da lugar al algoritmo 1. e Escribir un programa MATLAB que implemente el algoritmo de Doolittle. 7

Algoritmo 1 Mtodo de Doolittle e Este algoritmo calcula la factorizacin LU , A = LU , A Rmn , m n o (suponiendo que existe) por el mtodo de Doolittle. e ENTRADA: La matriz A SALIDA: Las matrices L y U 1: para k = 1 : n hacer 2: para j = k : n hacer 3: ukj = akj k1 lki uij i=1 4: n para 5: para i = k + 1 : m hacer 6: lik = aik k1 lij ujk /ukk j=1 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 sta la forma e ms eciente de calcularla. a Ejercicio 3 Comprobar el funcionamiento del programa con las siguientes matrices 3 1 2 3 1 2 4 2 1 7 2 1 , 7 8 , 3 a) 5 b) c) 2 1 4 5 0 1 0 4 7 1 0 3 1 2 Ejercicio 4 Qu ocurre al aplicar el programa a la matriz c) del ejercicio e anterior? Modicar el programa para que en caso de producirse esta situacin o se detecte y se muestre un mensaje de error. Ejercicio 5 Qu matrices tienen factorizacin LU ? (Se entiende sin e o realizar ninguna permutacin) o Ejercicio 6 Calcular mediante el mtodo de Doolittle la factorizacin LU e o

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 solucin utilizando la factorizacin LU con pivotamiento parcial o o (es decir usando la orden lu de MATLAB) y comparar los resultados sabiendo que la solucin exacta es el vector con todas las componentes iguales a 1. o

3.2. La factorizacin de Cholesky o


La factorizacin de Cholesky de una matriz simtrica denida positiva A o e puede calcularse con MATLAB con la orden chol. Esta funcin slo precisa o o un dato que es la matriz de la que quiere calcularse la factorizacin. Debe o tenerse en cuenta que chol no comprueba si la matriz es simtrica, e slo usa su parte triangular superior, esto puede dar lugar a errores, como o 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 simtrica y MATLAB slo utiliza la parte e o triangular superior, por lo que obtiene un resultado incorrecto. Es por tanto necesario asegurarse de que la matriz sea simtrica. Si no e estamos seguros de que la matriz A es simtrica podemos comprobarlo ese cribiendo all(all(A==A)), si el resultado es 1 es simtrica, si es 0 no lo e es. Por otra parte, si la matriz A no es denida positiva chol devuelve un mensaje de error. En general no es fcil comprobar si una matriz simtrica a e es denida positiva o no (una matriz simtrica denida positiva tiene todos e 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 simtrica es denida positiva es intentar calcular su factorizacin de e o Cholesky. Ejemplo 3 Dada la siguiente matriz (con elementos positivos en la diagonal principal) al intentar calcular su factorizacin de Cholesky se comprueba que o 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 cules de las siguientes matrices tienen factorizacin de a o 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 factorizacin de Cholesky o utilizarla para resolver el sistema con b = 1 1 1 . 12

4. Errores numricos al aplicar el algoritmo e de Gauss


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

5. La orden linsolve
A partir de la versin 7 de MATLAB se incorpora la orden linsolve. o 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 ultima orden no hace las comprobaciones que mencionbamos en la seccin 2. De hecho si la matriz a o tiene alguna propiedad que se pueda aprovechar se debe indicar a la orden linsolve como una opcin. o 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 lgicas. Es muy importante tener en cuenta que o MATLAB no comprueba si la matriz tiene la propiedad en cuestin o no. o Esto es lo que permite que esta orden sea ms rpida. a a

13

Opcin o 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