Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PR Actica de Resoluci On de Sistemas de Ecuaciones Lineales Con MATLAB
PR Actica de Resoluci On de Sistemas de Ecuaciones Lineales Con MATLAB
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.
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.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)
U = 7 0 0 0
2
2 -1.8571 0 0
1 1.5714 -1.7692 0
sol=U\(L\b)
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
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))
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.
R = 2.2361 0 0 0
R*R
-0.44721 1.9494 0 0
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
11
ans = 0 0 0 0
sol-sol2
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
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
Propiedad de la matriz Triangular inferior Triangular superior Hessenber superior Denida positiva Rectangular Indica si hay que resolver A x = b
14