Resolución de sistemas lineales por métodos directos

Anuncio
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
Descargar