Métodos directos de solución de sistemas de ecuaciones lineales
1. 1/118
Métodos Matemáticos de Especialidad
Ingeniería Eléctrica
Sistemas de ecuaciones lineales
Métodos directos de solución
José Luis de la Fuente O’Connor
jldelafuente@etsii.upm.es
joseluis.delafuente@upm.es
Escuela Técnica Superior de Ingenieros Industriales
Universidad Politécnica de Madrid
Clase_sisli_11.pdf
2. 2/118
Índice
Cuál es el problema; consideraciones teóricas
Eliminación de Gauss
Pivotación
Algoritmo
Número de operaciones
Método de Gauss-Jordan
Matlab y los sistemas de ecuaciones lineales
Factorización LU
Métodos explícitos para su obtención
ı Método de Crout
ı Método de Doolittle
Matlab y la factorización LU
Solución de sistemas modificados
3. 3/118
Refinamiento iterativo
Sistemas con matrices especiales
Matrices simétricas
ı Factorización LDLT
ı Factorización de Cholesky: matrices simétricas definidas positivas
˘ Matlab y la factorización de Cholesky
ı Matrices simétricas semidefinidas positivas
ı Matrices simétricas indefinidas
4. 4/118
Cuál es el problema; consideraciones
teóricas
– Se trata de dar solución a sistemas de ecuaciones del tipo
a11x1 C a12x2 C C a1nxn D b1
a21x1 C a22x2 C C a2nxn D b2
::: ::: ::: :::
am1x1 C am2x2 C C amnxn D bm;
lo que significa determinar los valores de las variables x1; : : : ; xn
que hacen que se cumplan todas las igualdades.
– A los números aij se les denomina coeficientes del sistema y a
los bi términos independientes.
5. 5/118
– Si se introducen las matrices
A D
2
6
6
6
4
a11 a12 a1n
a21 a22 a2n
::: ::: :::
am1 am2 amn
3
7
7
7
5
; x D
2
6
6
6
4
x1
x2
:::
xn
3
7
7
7
5
y b D
2
6
6
6
4
b1
b2
:::
xm
3
7
7
7
5
;
el sistema se puede representar de forma más compacta por
Ax D b:
– En general se supondrá que la matriz de coeficientes A 2 Rm n
,
x 2 Rn
y b 2 Rm
.
6. 6/118
– Casos posibles:
· =
m < n
rango(A) = m < n
· =
m < n
rango(A) < m < n
· =m > n
rango(A) = n < m
· =m > n
rango(A) < n < m
· =
m = n
rango(A) = m = n
· =
m = n
rango(A) < m = n
2a 2b
1a 1b
· =
m < n
rango(A) = m < n
· =
m < n
rango(A) < m < n
· =m > n
rango(A) = n < m
· =m > n
rango(A) < n < m
· =
m = n
rango(A) = m = n
· =
m = n
rango(A) < m = n
3a 3b
2a 2b
1a 1b
· =
m < n
rango(A) = m < n
· =
m < n
rango(A) < m < n
· =m > n
rango(A) = n < m
· =m > n
rango(A) < n < m
· =
m = n
rango(A) = m = n
· =
m = n
rango(A) < m = n
3a 3b
2a 2b
1a 1b
7. 7/118
– Recordemos algunos resultados de la teoría de álgebra lineal.
Teorema. (Compatibilidad de un sistema de ecuaciones lineales) La
ecuación Ax D b admite solución si y sólo si
rango.Ajb/ D rango.A/:
Corolario. Si Am n
tiene rango m, Ax D b siempre tiene solución.
Teorema. Si x0 es una solución de Ax D b, el conjunto de soluciones
de la ecuación está dado por x0 C ker.A/.
Corolario. Una solución de Ax D b es única si y sólo si ker.A/ D ;.
8. 8/118
Teorema. La ecuación Ax D 0, Am n
, n > m, siempre tiene una
solución no trivial.
Teorema. Si A es una matriz cuadrada de orden n, las siguientes
condiciones son equivalentes:
1. rango.A/ D n.
2. ker.A/ D ;.
3. Los vectores columna de A son linealmente independientes.
4. Los vectores fila de A son linealmente independientes.
5. Existe una matriz de orden n, A 1
, tal que
A 1
A D AA 1
D I:
9. 9/118
Ejemplo
– Hay que modelizar el sistema de refrigeración de una tarjeta
electrónica para poder usar un reloj con la mayor frecuencia de
oscilación posible.
– Simplificadamente, adoptamos el modelo físico y matemático de
la figura en el que se esquematiza un tiristor o un transistor
montado en una placa disipadora de calor.
Objective: Find the temperature of an integrated circuit (IC)
package mounted on a heat spreader. The system of equations is
obtained from a thermal resistive network model.
Physical Model: Mathematical Model:
Tp Tw
aire
temperatura Ta
c
Qc
Τa
Q3 R3
Τp
Τa
Τw
Τa
Q4 R4 Q5 R5
Q1 Q2
R2
10. 10/118
– Si el sistema necesita Qc watios de potencia, suponiendo un
modelo resistivo del flujo de aire entre los nudos del sistema,
aplicando los principios de conservación de la energía, se
obtienen las ecuaciones que siguen.
Q1 D
1
R1
.Tc Tp/ Q4 D
1
R4
.Tp Ta/ Qc D Q1 C Q3
Q2 D
1
R2
.Tp Tw/ Q2 D
1
R5
.Tw Ta/ Q1 D Q2 C Q4
Q3 D
1
R3
.Tc Ta/
– Se conoce Qc, al igual que Ta. Las resistencias se pueden
conocer sabiendo el material de las placas y sus propiedades.
– Las incógnitas son entonces Q1, Q2, Q3, Q4, Tc, Tp y Tw.
11. 11/118
– Como hay siete ecuaciones, reagrupando las ecuaciones para
aislar las incógnitas se llega al siguiente sistema:
R1Q1 Tc C T9 D 0
R2Q2 Tp C Tw D 0
R3Q3 Tc D Ta
R4Q4 Tp D Ta
R5Q2 Tw D Ta
Q1 C Q3 D Qc
Q1 Q2 Q4 D 0:
– En forma matricial, el sistema tiene la siguiente expresión:
2
6
6
6
6
6
6
6
4
R1 0 0 0 1 1 0
0 R2 0 0 0 1 1
0 0 R3 0 1 0 0
0 0 0 R4 0 1 0
0 R5 0 0 0 0 1
1 0 1 0 0 0 0
1 1 0 1 0 0 0
3
7
7
7
7
7
7
7
5
2
6
6
6
6
6
6
6
4
Q1
Q2
Q3
Q4
Tc
Tp
Tw
3
7
7
7
7
7
7
7
5
D
2
6
6
6
6
6
6
6
4
0
0
Ta
Ta
Ta
Qc
0
3
7
7
7
7
7
7
7
5
– Los flujos de calor se obtendrán resolviendo este sistema.
12. 12/118
– En Matlab, si R1 D 100, R2 D 200, R3 D 50, R4 D 100 y R5 D 300;
Ta D 50 y Qc D 25, por ejemplo, los datos a suministrarle para
resolver el sistema serían:
» A=[100 0 0 0 -1 1 0; 0 200 0 0 0 -1 1; 0 0 50 0 -1 0 0;...
0 0 0 100 0 -1 0; 0 300 0 0 0 0 -1; 1 0 1 0 0 0 0;1 -1 0 -1 0 0 0]
A =
100 0 0 0 -1 1 0
0 200 0 0 0 -1 1
0 0 50 0 -1 0 0
0 0 0 100 0 -1 0
0 300 0 0 0 0 -1
1 0 1 0 0 0 0
1 -1 0 -1 0 0 0
» b=[0;0;-50;-50;-50;25;0]
b =
0
0
-50
-50
-50
25
0
>> x=Ab
x =
1.0e+003 *
0.00535714285714
0.00089285714286
0.01964285714286
0.00446428571429
1.03214285714286
0.49642857142857
0.31785714285714
13. 13/118
– Interpretemos geométricamente el problema de resolver en dos
dimensiones un sistema de ecuaciones lineales cualquiera
a11x1 C a12x2 D b1
a21x1 C a22x2 D b2:
Cada una de las ecuaciones que componen el sistema
representa una recta en el espacio euclídeo de dimensión dos,
según se describe en la figura.
x1
x2
a21x1 + a22x2 = b2
a11x1 + a12x2 = b1
La resolución del sistema tiene como objetivo la búsqueda de
las coordenadas del punto donde se cortan esas dos rectas.
15. 15/118
– Interpretemos geométricamente el problema en el subespacio
Im.A/.
Si se escribe el sistema de dos ecuaciones con dos incógnitas
de la forma Ä
a11
a21
x1 C
Ä
a12
a22
x2 D
Ä
b1
b2
;
el problema es el de descomponer linealmente el vector b en
los vectores columna que definen las dos columnas de la
matriz de coeficientes.
b1
b2
a12
a22
a11
a21
16. 16/118
– En Rn
, el problema se refiere a la búsqueda de la descomposición
lineal de un vector de n componentes según n vectores dados: los
que forman la base de Im.A/ que definen los vectores columna
de A.
17. 17/118
Índice
Cuál es el problema; consideraciones teóricas
Eliminación de Gauss
Matlab y los sistemas de ecuaciones lineales
Factorización LU
Solución de sistemas modificados
Refinamiento iterativo
Sistemas con matrices especiales
18. 18/118
Métodos directos: Eliminación de
Gauss
– Los métodos directos resuelven el problema en un número de
etapas fijo.
– De ellos, el método clásico del álgebra lineal numérica para
resolver Ax D b, A 2 Rn n
, x 2 Rn
y b 2 Rn
, es el debido a Carl
Friedrich Gauss (1777-1855), quien lo aplicó por primera vez en
1809 con motivo de unos estudios sobre órbitas de ciertos
cuerpos celestes.
– Supondremos que la matriz A es de rango completo, por lo
tanto invertible, y que si eventualmente no lo es el
procedimiento deberá detectarlo.
19. 19/118
– La mecánica del método consiste en aplicar al sistema
a11x1 C a12x2 C C a1nxn D b1
a21x1 C a22x2 C C a2nxn D b2
::: ::: ::: :::
an1x1 C an2x2 C C annxn D bn
n transformaciones lineales que lo conviertan en otro más fácil
de resolver.
Concretamente, transformarlo en un sistema triangular
superior de la forma
u11x1 C u12x2 C C u1nxn D b0
1
u22x2 C C u2nxn D b0
2
::: :::
unnxn D b0
n;
o, escrito en forma matricial,
U x D b0.
20. 20/118
– Un sistema triangular superior, siempre y cuando se satisfagan
las condiciones
uii ¤ 0; i D 1; : : : ; n;
es fácilmente resoluble de manera recurrente mediante las
fórmulas
xk D
1
ukk
b0
k
nX
iDkC1
ukixi
!
; k D 1; : : : ; n:
Este proceso se conoce como sustitución inversa.
– El método de Gauss comporta pues n etapas con:
a) Multiplicación de una cualquiera de las ecuaciones del sistema
por un número distinto de cero.
b) Sustitución de una ecuación cualquiera del sistema por la que
resulta de sumarle otra cualquiera.
c) Permutación del orden en que aparecen en el sistema dos
ecuaciones cualesquiera del mismo.
21. 21/118
Ejemplo
– Se desea resolver el sistema
2x1 C x2 C 4x4 D 2
4x1 2x2 C 3x3 7x4 D 9
4x1 C x2 2x3 C 8x4 D 2
3x2 12x3 x4 D 2:
– Escrito en forma matricial, Ax D b, los distintos componentes
son
A D
2
6
6
6
4
2 1 0 4
4 2 3 7
4 1 2 8
0 3 12 1
3
7
7
7
5
; b D
2
6
6
6
4
2
9
2
2
3
7
7
7
5
y x D
2
6
6
6
4
x1
x2
x3
x4
3
7
7
7
5
:
22. 22/118
– Reconfiguremos inicialmente la matriz A aumentándola una
columna más: la que define el término independiente b, y
llamemos a la nueva matriz resultante bA; es decir,
bA D ŒAjb D
2
6
6
6
4
2 1 0 4 2
4 2 3 7 9
4 1 2 8 2
0 3 12 1 2
3
7
7
7
5
:
Apliquemos ahora la mecánica del método en n D 3 etapas.
Etapa 1
– Comprobemos que el elemento Oa11 —denominado elemento
pivote— no es cero.
Si es distinto de cero, eliminemos los elementos de la primera
columna por debajo de ese Oa11.
23. 23/118
– Para ello, definamos para cada fila 2; : : : ; n los factores o
multiplicadores
ri D
Oai1
Oa11
; i D 2; : : : ; n:
– A continuación, restemos de las filas i D 2; : : : ; n, la primera
multiplicada por ri.
Todos los elementos debajo de la diagonal principal de la
columna 1 se anularán.
Los demás elementos de bA debajo de la primera fila también
se verán afectados de acuerdo con la siguiente expresión:
Oaij Oaij ri Oa1j ; i D 2; : : : ; nI j D 2; : : : ; n C 1:
– En el ejemplo que venimos manejando, los multiplicadores son
r2 D Oa21=Oa11 D 4=2 D 2
r3 D Oa31=Oa11 D 4=2 D 2
r4 D Oa41=Oa11 D 0=2 D 0:
24. 24/118
– Los coeficientes de la matriz bA que cambian de valor son:
en la 2a fila: Oa21 0
Oa22 Oa22 r2 Oa12 D 2 C 2 1 D 0
Oa23 Oa23 r2 Oa13 D 3 C 2 0 D 3
Oa24 Oa24 r2 Oa14 D 7 C 2 4 D 1
Oa25 Oa25 r2 Oa15 D 9 C 2 2 D 5I
en la 3a fila: Oa31 0
Oa32 Oa32 r3 Oa12 D 1 2 1 D 1
Oa33 Oa33 r3 Oa13 D 2 2 0 D 2
Oa34 Oa34 r3 Oa14 D 8 2 4 D 0
Oa35 Oa35 r3 Oa15 D 2 2 2 D 2I
en la 4a fila: Oa41 0
Oa42 Oa42 r3 Oa12 D 3 0 1 D 3
Oa43 Oa43 r4 Oa13 D 12 0 0 D 12
Oa44 Oa44 r4 Oa14 D 1 0 4 D 1
Oa45 Oa45 r4 Oa15 D 2 0 2 D 2:
25. 25/118
– La nueva matriz bA1, resultado de transformar bA, es:
bA1 D
2
6
6
6
4
2 1 0 4 2
0 0 3 1 5
0 1 2 0 2
0 3 12 1 2
3
7
7
7
5
:
– Se hubiese obtenido exactamente el mismo resultado de haber
premultiplicado bA por la denominada transformación de Gauss
que define la matriz
L1 D
2
6
6
4
1 0 0 0
2 1 0 0
2 0 1 0
0 0 0 1
3
7
7
5 :
Matriz triangular inferior unitaria, denominada matriz de
transformación de Gauss.
26. 26/118
– La matriz L1 también se puede escribir de la forma L1 D I ˛eT
1 ,
donde
˛ D
2
6
6
6
4
0
2
2
0
3
7
7
7
5
y e1 D
2
6
6
6
4
1
0
0
0
3
7
7
7
5
:
– En efecto,
L1bA D
2
6
4
1 0 0 0
2 1 0 0
2 0 1 0
0 0 0 1
3
7
5
2
6
4
2 1 0 4 2
4 2 3 7 9
4 1 2 8 2
0 3 12 1 2
3
7
5 D
2
6
4
2 1 0 4 2
0 0 3 1 5
0 1 2 0 2
0 3 12 1 2
3
7
5 :
– En resumen, bA1 D L1
cA.
27. 27/118
– La inversa de la matriz L1, por otro lado, como se puede
comprobar fácilmente, es
L 1
1 D
2
6
6
4
1 0 0 0
2 1 0 0
2 0 1 0
0 0 0 1
3
7
7
5 :
Obsérvese que es idéntica a L1 salvo por lo que respecta al signo
de los coeficientes de la primera columna debajo de la diagonal
principal.
Etapa 2
– Hagamos cero los elementos debajo de la diagonal principal de la
2a columna de bA1.
– Al intentar hacerlo observamos que el elemento pivote Oa1
22 es
cero, lo que nos impide proceder como en la etapa anterior.
28. 28/118
– Comprobemos en este caso si algún elemento de la columna 2
por debajo de Oa1
22 es distinto de cero:
Si no hay ninguno, esta columna es combinación lineal de la
primera y por tanto la matriz es singular.
Si hay varios, escojamos el de mayor valor absoluto e
intercambiemos la fila de ese elemento con la segunda.
– En el ejemplo, el elemento de mayor valor absoluto debajo de la
diagonal principal en la segunda columna, 3, se encuentra en la
fila 4. Intercambiamos esa fila 4 con la 2. Se obtendrá
bA0
1 D
2
6
6
6
6
4
2 1 0 4 2
0 3 12 1 2
0 1 2 0 2
0 0 3 1 5
3
7
7
7
7
5
:
29. 29/118
– Esto mismo se obtiene premultiplicando bA1 por la permutación
P1 D
2
6
6
4
1 0 0 0
0 0 0 1
0 0 1 0
0 1 0 0
3
7
7
5 :
– Recapitulemos: la matriz con la que vamos a operar a
continuación, bA0
1, es:
bA0
1 D P1L1
c
A:
– Apliquemos a continuación a la columna 2 la misma idea que a
la columna 1 y hagamos cero sus elementos 3 a n.
30. 30/118
– Los nuevos multiplicadores saldrán de la expresión
ri D
Oa10
i2
Oa10
22
; i D 3; 4:
– Los nuevos valores de los elementos de la matriz bA0
1 por debajo
de la segunda fila se obtendrán aplicando la expresión
Oa10
ij Oa10
ij ri Oa10
2j ; i D 3; 4I j D 3; : : : ; 5:
– Los valores de los multiplicadores para el ejemplo son
r3 D Oa10
32=Oa10
22 D 1=3 y
r4 D Oa10
42=Oa10
22 D 0:
31. 31/118
– Los nuevos elementos de la matriz bA0
1 resultante:
en la 3a fila: Oa10
32 0
Oa10
33 Oa10
33 r3 Oa10
23 D 2 C 1
3
12 D 2
Oa10
34 Oa10
34 r3 Oa10
24 D 0 C 1
3
1 D 1=3
Oa10
35 Oa10
35 r3 Oa10
25 D 2 1
3
2 D 8=3I
en la 4a fila: Oa10
42 0
Oa10
43 Oa10
43 r4 Oa10
23 D 3 0 12 D 3
Oa10
44 Oa10
44 r4 Oa10
24 D 1 0 1 D 1
Oa10
45 Oa10
45 r4 Oa10
25 D 5 0 2 D 5:
– Obsérvese que, al ser r4 D 0, los cálculos para adaptar la cuarta
fila podrían haberse evitado.
32. 32/118
– La nueva matriz resultado de estas transformaciones es
bA2 D
2
6
6
6
4
2 1 0 4 2
0 3 12 1 2
0 0 2 1=3 8=3
0 0 3 1 5
3
7
7
7
5
;
matriz que se expresa a partir de la inicial como
bA2 D L2P1L1
cA;
donde L2 D
2
6
4
1 0 0 0
0 1 0 0
0 1=3 1 0
0 0 0 1
3
7
5 :
33. 33/118
Etapa 3
– Para conseguir transformar el sistema original en uno triangular
superior sólo resta anular el elemento Oa2
43.
– El elemento de la diagonal principal Oa2
33 es distinto de cero, luego
procedemos a calcular el multiplicador r4:
r4 D Oa2
43=Oa2
33 D 3=2:
– Los nuevos valores de los elementos de la matriz bA2 por debajo
de la tercera fila se obtendrán aplicando la expresión
Oa2
ij Oa2
ij ri Oa2
3j ; i D 4I j D 4; 5:
34. 34/118
– En concreto, en la cuarta fila:
Oa2
43 0
Oa2
44 Oa2
44 r4 Oa2
34 D 1 3
2
1
3
D 1=2
Oa2
45 Oa2
45 r4 Oa2
35 D 5 C 3
2
8
3
D 1:
– La nueva matriz resultado de estas transformaciones es
bA3 D
2
6
6
6
6
4
2 1 0 4 2
0 3 12 1 2
0 0 2 1=3 8=3
0 0 0 1=2 1
3
7
7
7
7
5
:
35. 35/118
– A este resultado se ha llegado después de aplicar a la matriz
inicial bA una serie de transformaciones; concretamente:
bA3 D L3L2P1L1
cA;
donde
L3 D
2
6
6
6
4
1 0 0 0
0 1 0 0
0 0 1 0
0 0 3=2 1
3
7
7
7
5
:
– En conclusión, la matriz original que definía el sistema, A, se
puede transformar en la triangular superior U aplicándole las
mismas transformaciones que a bA. Es decir,
U D L3L2P1L1A:
36. 36/118
– Como a b también se le han efectuado las mismas
transformaciones llegándose a b0
, resolver el sistema de
ecuaciones original es equivalente a resolver
U x D b0
:
– En el ejemplo,
2
6
6
6
6
4
2 1 0 4
0 3 12 1
0 0 2 1=3
0 0 0 1=2
3
7
7
7
7
5
2
6
6
6
6
4
x1
x2
x3
x4
3
7
7
7
7
5
D
2
6
6
6
6
4
2
2
8=3
1
3
7
7
7
7
5
:
– La solución se lleva a cabo mediante sustitución inversa.
37. 37/118
x4 D 2;
sustituyendo en la tercera ecuación,
x3 D
8=3 . 2/.1=3/
2
D 1;
y, a su vez, haciéndolo en la segunda,
x2 D
2 . 1/. 2/ . 12/. 1/
3
D 4:
– Por último, sustituyendo los valores de las variables ya calculados
en la primera ecuación se obtiene
x1 D
2 4. 2/ 1.4/
2
D 3:
39. 39/118
Pivotación
– Veamos qué ocurre si resolvemos con el procedimiento estudiado
Ä
10 4 1
1 1
„ ƒ‚ …
A
Ä
x1
x2„ƒ‚…
x
D
Ä
1
2
„ƒ‚…
b
;
en una máquina con tres dígitos significativos que efectúe
redondeos.
– Aplicando la mecánica apuntada, en la primera etapa se
obtendría una nueva matriz A1 y un nuevo vector b1; son:
A1 D
Ä
10 4
1
0 1 104 y b1 D
Ä
1
2 104 :
40. 40/118
– El número 1 104
D 9999, la máquina lo redondearía a 104
; de
la misma forma procedería con 2 104
. La solución del sistema
sería
x2 D
104
104
D 1
x1 D
1 x2
10 4
D 0;
muy distinta de la real Œ0;99989999; 1;00010001T
.
– La elección del pivote busca que los multiplicadores no sean en
magnitud mucho mayores que 1 con el fin de tener en cuenta los
errores de redondeo y la estabilidad numérica del procedimiento,
Es por esto por lo que se escoge el de mayor magnitud de
entre los debajo de la diagonal principal.
41. 41/118
– Para el caso de este último ejemplo, en la primera etapa, en
lugar de operar sobre la matriz anterior, como el valor absoluto
del elemento a21 es mayor que el del a11, se intercambiaría la fila
1 con la 2, obteniéndose
A0
D
Ä
1 1
10 4
1
y b0
D
Ä
2
1
:
– Continuando con el procedimiento normal, después de la primera
etapa, se llegará a
A0
1 D
Ä
1 1
0 1 10 4 y b0
1 D
Ä
2
1 2 10 4 :
Por redondeos internos, la máquina representaría
A0
1 D
Ä
1 1
0 1
y b0
1 D
Ä
2
1
:
42. 42/118
– La la solución de este sistema de ecuaciones sería
Ä
x1
x2
D
Ä
1
1
:
Solución mucho mejor que la anterior, pues la real es
x2 D
0,9998
0,9999
D 0,99989999
x1 D 1,00010001:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
– El proceso descrito se denomina pivotación parcial.
– Su por qué radica en la aritmética de precisión finita con la que
trabajan todos los ordenadores y en el hecho de que los factores
o multiplicadores antes introducidos son inversamente
proporcionales al elemento pivote: si éste es demasiado pequeño
puede amplificar los errores de redondeo a lo largo del proceso de
solución.
43. 43/118
– Una segunda estrategia de pivotación es la conocida como
pivotación total.
– Consiste en buscar en una etapa i no sólo el elemento de mayor
valor absoluto en la columna correspondiente, sino en todo lo
que queda por tratar de la matriz: el mKaxiÄkÄn; iÄjÄn jakj j.
Partial Pivoting
To avoid division by zero, swap the row having the zero pivot
with one of the rows below it.
0
*
Rows completed in
forward elimination.
Rows to search for a
more favorable pivot
element.
Row with zero pivot element
To minimize the effect of roundoff, always choose the row that
puts the largest pivot element on the diagonal, i.e., find ip such
Pivotación parcial
Full Pivoting
0
*
Rows c
forwar
Columns to search for a more
favorable pivot element.
Row
Row
more
elem
*
Pivotación total
– La pivotación total proporciona la estrategia óptima para
minimizar errores de redondeo.
44. 44/118
– Desde un punto de vista teórico, la eliminación de Gauss con
pivotación total es, en general, un algoritmo numéricamente
estable.
– En la práctica, la pivotación parcial produce buenos resultados y
excelentes prestaciones numéricas por lo que rara vez se usa la
total.
45. 45/118
Algoritmo
Transformación de la Matriz Aumentada ŒAjb
for i D 1 to n 1
Determinar índice p 2 fi; i C 1; : : : ; ng tal que ja.p; i/j D mKaxiÄjÄn ja.j; i/j.
Intercambiar filas p e i.
for j D i C 1 to n
Á D a.j; i/=a.i; i/
for k D i C 1 to n C 1
a.j; k/ a.j; k/ Á a.i; k/
end
end
end
Sustitución Inversa.
for j D n to 1
x.j/
0
@b.j/
nX
kDjC1
a.j; k/ x.k/
1
A a.j; j/
end
46. 46/118
– En código Matlab para cualquier sistema.
function [x]=Gauss(A,b)
% Solución de Ax=b mediante eliminación de Gauss
n=size(A,1); x=zeros(n,1);
for i=1:n-1 % Transformación matriz A
[p maxk]=max(abs(A(i:n,i)));
maxk=maxk+i-1;
if i~=maxk
A([i maxk],:)=A([maxk i],:);
b([i maxk]) =b([maxk i]);
end
j=i+1:n;
A(j,i)=A(j,i)/A(i,i);
A(j,j)=A(j,j)-A(j,i)*A(i,j);
b(j)=b(j)-b(i)*A(j,i);
end
for i=n:-1:1 % Sustitución inversa
x(i)=(b(i)-A(i,i+1:n)*x(i+1:n))/A(i,i);
end
47. 47/118
– De esta codificación conviene destacar dos elementos
mejorables.
No es realmente necesario intercambiar las filas una vez
elegido el elemento pivote de cada etapa; basta con tener
constancia en cada momento dónde están las filas que se
intercambian.
Tal como está estructurado el programa sólo se podría
resolver un sistema —el definido por el b dado— y no, como
es lo más habitual, distintos sistemas con la misma matriz A
y diversos términos independientes.
48. 48/118
– El primero se puede paliar mediante la introducción de vector
índice, IPIV, de dimensión el número de ecuaciones, inicializado a
la posición inicial en el sistema de cada una de las ecuaciones; es
decir,
IPIV D
2
6
6
6
6
6
4
1
2
3
:::
n
3
7
7
7
7
7
5
:
– Cuando haya que intercambiar dos filas en un etapa, no se hará
intercambiando físicamente los elementos de esas dos filas, sino
haciéndolo en las correspondientes de IPIV.
49. 49/118
– Si por ejemplo, en la primera etapa hay que utilizar como pivote
un elemento de la cuarta fila, una vez efectuado el cambio, el
vector IPIV quedará:
IPIV D
2
6
6
6
6
6
6
6
4
4
2
3
1
:::
n
3
7
7
7
7
7
7
7
5
:
– Si al final de un proceso de resolución de un sistema de cinco
ecuaciones con cinco incógnitas, el vector puntero resultase
IPIV D
2
6
6
6
6
6
4
4
2
5
1
3
3
7
7
7
7
7
5
;
50. 50/118
la matriz A0
que se obtendría no resultaría ser estrictamente
triangular superior.
Tendría la forma que sigue.
– Para resolver el sistema que define Ax D b habría que aplicar
esas mismas manipulaciones de filas al vector b o tenerlo en
cuenta.
51. 51/118
– Para evitar el segundo inconveniente, habría que guardar
adecuadamente la información que definen los multiplicadores
asociados a cada fila de cada etapa.
Los i 1 multiplicadores se pueden guardar en los lugares
vacíos —o mejor dicho, que se hacen cero— que provocan las
transformaciones que definen: en la etapa i, debajo de la
diagonal principal en la columna i.
En el ejemplo, con esta idea, al final del proceso la matriz A
sería:
A D
2
6
6
6
4
2 1 0 4
2 3 12 1
2 1=3 2 1=3
0 0 3=2 1=2
3
7
7
7
5
:
Los multiplicadores distintos de cero que se han calculado en
todo el proceso son -2, 2, 1/3 y 3/2.
52. 52/118
Número de operaciones del método
– Dos de los factores más importantes que influyen en las
prestaciones de un algoritmo son:
Su estabilidad numérica ante los diversos errores.
La cantidad de tiempo necesaria para completar los cálculos
que conlleva.
– Ambos factores dependen del número de operaciones aritméticas
necesarias para la aplicación del algoritmo.
– Los tiempos necesarios para realizar en un ordenador la
multiplicación y la división de dos números son aproximadamente
iguales y considerablemente mayores, en términos relativos, que
los requeridos para realizar la suma o diferencia, que también
son muy semejantes entre sí.
53. 53/118
– La eliminación de Gauss para resolver un sistema de ecuaciones
lineales, en la primera etapa, realiza las operaciones que se
representan simbólicamente en el esquema que sigue.
::: ::: ::: ::: ::: !
0 2 2 2 2
::: ::: ::: ::: :::
0 2 2 2 2
0 2 2 2 2
– El símbolo 2 designa los elementos de la matriz que se ven
afectados en esa etapa y que, en principio, son distintos de cero.
54. 54/118
– Si en la etapa i se está transformando una matriz n n, las
operaciones que en ella se realizan son:
n i divisiones para el cálculo de los multiplica-
dores;
.n i/.n i C 1/ multiplicaciones y restas para modificar los
elementos de la matriz por debajo de la fila
i que no están en la propia columna i.
– En cada etapa se efectúan,
.n i/ C .n i/.n i C 1/ D .n i/.n i C 2/
multiplicaciones y divisiones y
.n i/.n i C 1/
sumas y restas.
55. 55/118
– En n 1 etapas de que consta el proceso, se harán
n 1X
iD1
.n i/.n i C 2/ D .n2
C 2n/
n 1X
iD1
1 2.n C 1/
n 1X
iD1
i C
n 1X
iD1
i2
D .n2
C 2n/.n 1/ 2.n C 1/
.n 1/n
2
C
.n 1/n.2n 1/
6
D
2n3
C 3n2
5n
6
multiplicaciones y divisiones y
n 1X
iD1
.n i/.n i C 1/ D .n2
C n/
n 1X
iD1
1 .2n C 1/
n 1X
iD1
i C
n 1X
iD1
i2
D .n2
C n/.n 1/ .2n C 1/
.n 1/n
2
C
.n 1/n.2n 1/
6
D
n3
n
3
sumas y restas.
56. 56/118
– El comportamiento de estos valores para n grande tiende a
1
3
n3.
– El proceso de sustitución inversa requiere .n i/ multiplicaciones
y .n i 1/ sumas, para cada término del sumatorio, y una resta
y una división.
El número total de operaciones de todo el proceso es
1 C
n 1X
iD1
..n i/ C 1/ D
n2
C n
2
multiplicaciones y divisiones y
n 1X
iD1
..n i 1/ C 1/ D
n2
n
2
sumas y restas.
57. 57/118
– Contando la totalidad de la transformación de la matriz del
sistema y la sustitución inversa, la eliminación de Gauss requiere
2n3
C 3n2
5n
6
C
n2
C n
2
D
n3
C 2n2
n
3
multiplicaciones y divisiones y
n3
n
3
C
n2
n
2
D
2n3
C 3n2
5n
6
sumas y restas.
– El comportamiento de estas expresiones para valores grandes de
n es como
1
3
n3
lo que da idea de la importante magnitud del número de
operaciones.
58. 58/118
– Aunque la cantidad n3
=3 puede parecer muy grande, recordemos
las fórmulas de Cramer para la solución de sistemas:
xi D
det.Bi/
det.A/
; donde Bi D
2
6
6
6
4
a11 a1i 1 b1 a1iC1 a1n
a21 a2i 1 b2 a2iC1 a2n
::: ::: ::: ::: :::
an1 ani 1 bn aniC1 ann
3
7
7
7
5
:
Mediante estas fórmulas se requieren:
8
<
:
.n C 1/Š sumas,
.n C 2/Š multiplicaciones y
n divisiones.
Para diez ecuaciones con diez incógnitas se requerirán:
8
<
:
740 operaciones utilizando eliminación de Gauss.
500.000.000 operaciones, aproximadamente, aplicando
las fórmulas de Cramer.
59. 59/118
Método de Gauss-Jordan
– Es una extensión natural de la eliminación de Gauss que consiste
en eliminar de cada columna de la matriz de coeficientes del
sistema no sólo los elementos no nulos que están debajo de la
diagonal sino también los que están encima.
– Una etapa i de la eliminación de Gauss estaba caracterizada por
la matriz
Li D I ˛ieT
i ;
donde
˛i D
2
6
6
6
6
6
4
0
:::
ai
iC1 i=ai
ii
:::
ai
ni=ai
ii
3
7
7
7
7
7
5
fila i C 1 y ei D
2
6
6
6
6
6
4
0
:::
1
:::
0
3
7
7
7
7
7
5
fila i :
60. 60/118
– En la etapa i de este método, la matriz de transformación de
Gauss-Jordan es la dada por
T i D I ˛ieT
i ;
donde
˛i D
2
6
6
6
6
6
4
ai
1i=ai
ii
:::
1=ai
ii
:::
ai
ni=ai
ii
3
7
7
7
7
7
5
fila i y ei D
2
6
6
6
6
6
4
0
:::
1
:::
0
3
7
7
7
7
7
5
fila i :
– Si se tiene en cuenta que A0
D A y An
D I, se tendrá que
T n 1 T 2T 1A D I;
por lo que el método obtiene directamente la matriz inversa:
A 1
D T n 1 T 2T 1:
– Las multiplicaciones y divisiones, y sumas y restas, son O.n3
=2/ .
61. 61/118
Índice
Cuál es el problema; consideraciones teóricas
Eliminación de Gauss
Matlab y los sistemas de ecuaciones lineales
Factorización LU
Solución de sistemas modificados
Refinamiento iterativo
Sistemas con matrices especiales
62. 62/118
Matlab y los sistemas de ecuaciones
lineales
– Para resolver un sistema Ax D b con Matlab sólo hay que hacer
x D Anb
– Con el ejemplo que estamos manejando:
>> A=[2 1 0 4;0 -3 -12 -1;0 -1 -2 0;0 0 3 1];
>> b=[2;2;-2;-5];
>> Ab
ans =
3.0000
4.0000
-1.0000
-2.0000
63. 63/118
– Utilizando el script Gauss que hemos presentado:
>> Gauss(A,b)
ans =
3.0000
4.0000
-1.0000
-2.0000
64. 64/118
Índice
Cuál es el problema; consideraciones teóricas
Eliminación de Gauss
Matlab y los sistemas de ecuaciones lineales
Factorización LU
Solución de sistemas modificados
Refinamiento iterativo
Sistemas con matrices especiales
65. 65/118
Factorización LU
– El cálculo de A D LU se conoce como factorización o
descomposición LU .
Para resolver un sistema de ecuaciones lineales Ax D b, si
A D LU , el problema se convierte en el de resolver LU x D b
a través de dos sistemas de ecuaciones triangulares:
U x D y y Ly D b:
Esto es muy útil cuando se requiere resolver sistemas de
ecuaciones en los que la matriz A es siempre la misma y sólo
cambia es el término independiente.
66. 66/118
La factorización LU y la eliminación de Gauss
– Una forma indirecta de conseguir esta factorización LU es la
propia eliminación de Gauss.
En efecto, mediante unas permutaciones y unas
transformaciones definidas por matrices elementales
triangulares inferiores el método conseguía:
Ln 1Pn 1 L1P1A D U :
De este proceso, haciendo
P D Pn 1 P1 y
L D P.Ln 1Pn 1 L2P2L1P1/ 1
;
se puede comprobar que se obtiene la factorización
PA D LU :
67. 67/118
Existencia y unicidad de la factorización LU
Teorema. Sea A una matriz cuadrada regular de orden n. Existe una
matriz de permutación P y dos matrices, una triangular inferior y
otra triangular superior, L y U , respectivamente, tales que
PA D LU :
La matriz L tiene todos los elementos de la diagonal principal igual
a 1 (triangular inferior unitaria).
Lema. La matriz A admite una factorización LU si y sólo si se
cumple que det.Ak/ ¤ 0; k D 1; : : : ; n:
Teorema. Si una matriz regular A de orden n admite una factoriza-
ción A D LU , donde L es una matriz triangular inferior de elemen-
tos diagonales 1 y U una triangular superior, esa factorización es
única.
68. 68/118
Métodos numéricos directos para la
obtención de factorizaciones LU
Método de Crout. Versión LU 1
– Supongamos que se desea obtener la factorización en la forma
LU 1, donde U 1 designa una matriz triangular superior en la que
todos los elementos de la diagonal principal son 1.
69. 69/118
– Si la matriz A es de orden 3 y se quiere factorizarla de la forma
2
4
a11 a12 a13
a21 a22 a23
a31 a32 a33
3
5 D
2
4
l11 0 0
l21 l22 0
l31 l32 l33
3
5
2
4
1 u12 u13
0 1 u23
0 0 1
3
5 ;
usando las reglas de multiplicación de matrices se obtendrá:
1a col. de L: l11 D a11
l21 D a21
l31 D a31I
2a fila de U :
l11u12 D a12
l11u13 D a13
! u1j D a1j =l11; j D 2; 3I
2a col. de L:
l21u12 C l22 D a22
l31u12 C l32 D a32
! li2 D ai2 li1u12; i D 2; 3I
2a fila de U : l21u13 C l22u23 D a23 ! u2j D .a2j l21u1j /=l22; j D 3I
3a col. de L: l31u13 C l32u23 C l33 D a33 ! li3 D ai3
i 1X
j D1
lij uji; i D 3:
70. 70/118
– En general, las fórmulas de recurrencia que se pueden deducir de
este proceso, denominado factorización LU de Crout, son:
li1 D ai1; i D 1; 2; : : : ; n;
u1j D a1j =l11; j > 1;
lik D aik
k 1X
pD1
lipupk; i k;
ukj D
0
@akj
k 1X
pD1
lkpupj
1
A lkk; j > k:
71. 71/118
– Plasmadas en el algoritmo de Crout para factorizar una matriz
regular An n
en la forma LU 1 resulta el de la tabla.
for k D 1 to n
for i D k to n
l.i; k/ a.i; k/
k 1X
pD1
l.i; p/u.p; k/
end
for i D k C 1 to n
u.k; i/
0
@a.k; i/
k 1X
pD1
l.k; p/u.p; i/
1
A l.k; k/
end
end
72. 72/118
– La versión Matlab de este algoritmo es la que sigue.
function [L U]=LUCrout(a)
% Factorización LU por Crout
n=size(a,1); L=zeros(n); U=eye(n);
for k=1:n
for i=k:n
L(i,k)=a(i,k)-L(i,1:k-1)*U(1:k-1,k);
end
for i=k+1:n
U(k,i)=(a(k,i)-L(k,1:k-1)*U(1:k-1,i))/L(k,k);
end
end
73. 73/118
– Ahora bien, como apuntábamos en la eliminación de Gauss, se
puede aprovechar la estructura de la matriz A para guardar en
ella las nuevas matrices L y U . El mismo algoritmo quedaría así.
function [L U]=Crout_1(A)
% Factorización LU por Crout
n=size(A,1);
for k=1:n
i=k:n; A(i,k)=A(i,k)-A(i,1:k-1)*A(1:k-1,k);
i=k+1:n; A(k,i)=(A(k,i)-A(k,1:k-1)*A(1:k-1,i))/A(k,k);
end
L=tril(A,0); U=triu(A,1)+eye(n,n);
75. 75/118
Ejemplo
– Se desea factorizar la matriz
A D
2
4
0,001 2,000 3,000
-1,000 3,712 4,623
-2,000 1,072 5,643
3
5
en una máquina u ordenador con cuatro dígitos significativos.
76. 76/118
– Las operaciones que se realizan en la máquina son:
l11 D 0,001I
l21 D -1,000I
l31 D -2,000I
u12 D f l
Â
2,000
0,001
Ã
D 2000I
u13 D f l
Â
3,000
0,001
Ã
D 3000I
l22 D f l Œ3,712 C .1,000/.2000/ D 2004I
l32 D f l Œ1,072 C .2,000/.2000/ D 4001I
u23 D f l
Â
4,623 C .1,000/.3000/
2004
Ã
D 1,500 y
l33 D f lŒ5,643 C (2,000)(3,000) (4,001)(1,500) D 5,642:
– Obsérvese que el cálculo de l33 conlleva la pérdida de tres dígitos
por redondeo: el valor que debería obtenerse es 5,922.
77. 77/118
Pivotación
– El ejemplo pone de manifiesto que, aunque se sepa que una
matriz no es singular y que su factorización LU existe
teóricamente, los errores de redondeo que se pueden producir al
trabajar en una máquina pueden dar al traste con el resultado.
– Es aconsejable realizar pivotación. Al final de un proceso con
pivotación se obtendría
PA D LU
es decir, no la factorización LU de la matriz original sino de PA.
78. 78/118
– El algoritmo de Crout con pivotación parcial es el de la tabla
for k D 1 to n
for i D k to n
l.i; k/ a.i; k/
k 1X
pD1
l.i; p/u.p; k/
end
Determinar índice p 2 fk; k C 1; : : : ; ng tal que ja.p; i/j D mKaxiÄj Än ja.j; i/j.
Intercambiar filas p y k.
for i D k C 1 to n
u.k; i/
0
@a.k; i/
k 1X
pD1
l.k; p/u.p; i/
1
A l.k; k/
end
end
function [L U p]=CroutP(a)
% Factorización LU por Crout con pivotación
n=size(a,1); p=1:n;
for k=1:n
i=k:n; a(i,k)=a(i,k)-a(i,1:k-1)*a(1:k-1,k);
[r,m]=max(abs(a(k:n,k))); m=m+k-1;
if a(m,k)==0, continue, end
if k~=m, a([k m],:)=a([m k],:); p([k m])=p([m k]); end
i=k+1:n; a(k,i)=(a(k,i)-a(k,1:k-1)*a(1:k-1,i))/a(k,k);
end
L=tril(a,0); U=triu(a,1)+eye(n,n);
79. 79/118
– Si se factoriza la matriz
2
4
10 10 20
20 25 40
30 50 61
3
5 ;
al final de este proceso, el vector IPVT. /, que indica las
pivotaciones realizadas, es Œ3, 2, 1T
.
>> A=[10 10 20;20 25 40;30 50 61];
>> [L U p]=CroutP(A)
L =
30.0000 0 0
20.0000 -8.3333 0
10.0000 -6.6667 0.2000
U =
1.0000 1.6667 2.0333
0 1.0000 0.0800
p =
3 2 1
>>
80. 80/118
– La matriz PA realmente factorizada es
2
6
4
30 50 61
20 25 40
10 10 20
3
7
5 D
2
6
4
30
20 8;3333
10 6;6667 0; 2
3
7
5
2
6
4
1 1;6667 2;0333
1 0;0800
1
3
7
5 :
– El algoritmo de Crout requiere O.n3
=3/
multiplicaciones/divisiones y sumas/restas para la factorización
de la matriz.
81. 81/118
Método de Crout. Versión L1U
– Si se quiere conseguir la factorización L1U de una matriz 3 3,
2
4
a11 a12 a13
a21 a22 a23
a31 a32 a33
3
5 D
2
4
1 0 0
l21 1 0
l31 l32 1
3
5
2
4
u11 u12 u13
0 u22 u23
0 0 u33
3
5 ;
operando:
1a fila de U : u11 D a11
u12 D a12
u13 D a13I
1a col. de L:
l21u11 D a21
l31u11 D a31
! li1 D ai1=u11; i D 2; 3I
2a fila de U :
l21u12 C u22 D a22
l21u13 C u32 D a23
! u2j D a2j l21u1j ; j D 2; 3I
2a col. de L: l31u12 C l32u22 D a32 ! li2 D .ai2 li1u12/=u22; i D 3I
3a fila de U : l31u13 C l32u23 C u33 D a33 ! u3j D a3j
j 1
X
iD1
l3iuij ; j D
82. 82/118
– Las fórmulas de recurrencia que se pueden deducir de este
proceso son:
u1j D a1j ; j D 1; 2; : : : ; n;
li1 D ai1=u11; j > 1;
ukj D akj
k 1X
pD1
lkpupj ; j k;
lik D
0
@aik
k 1X
pD1
lipupk
1
A ukk; i > k:
83. 83/118
– El algoritmo de Crout para factorizar una matriz regular An n
en
la forma L1U es el que sigue.
for k D 1 to n
for j D k to n
u.k; j/ a.k; j/
k 1X
pD1
l.k; p/u.p; j/
end
for i D k C 1 to n
l.i; k/
0
@a.i; k/
k 1X
pD1
l.i; p/u.p; k/
1
A u.k; k/
end
end
84. 84/118
– Su implementación en Matlab:
function [L,U]=Croutl1u(a)
% Factorización L1U por Crout
n=size(a,1);
for k=1:n-1
i=k+1:n;
a(i,k)=a(i,k)/a(k,k);
a(i,i)=a(i,i)-a(i,k)*a(k,i);
end
L=tril(a,-1)+eye(n,n); U=triu(a);
El resultado con la matriz precedente es:
>> [L U]=Croutl1u(A)
L =
1 0 0
2 1 0
3 4 1
U =
10 10 20
0 5 0
0 0 1
>> L*U
ans =
10 10 20
20 25 40
30 50 61
85. 85/118
– La versión del algoritmo con pivotación en Matlab es esta.
function [L U p]=CroutP1(a)
% Factorización L1U por Crout con pivotación
n=size(a,1); p=1:n;
for k=1:n-1
[r,m]=max(abs(a(k:n,k)));
m=m+k-1;
if a(m,k)==0, continue, end
if k~=m, a([k m],:)=a([m k],:); p([k m])=p([m k]); end
i=k+1:n; a(i,k)=a(i,k)/a(k,k);
j=k+1:n; a(i,j)=a(i,j)-a(i,k)*a(k,j);
end
L=tril(a,-1)+eye(n,n); U=triu(a);
86. 86/118
– El resultado con este script para el último ejemplo:
>> [L U p]=CroutP1(A)
L =
1.0000 0 0
0.6667 1.0000 0
0.3333 0.8000 1.0000
U =
30.0000 50.0000 61.0000
0 -8.3333 -0.6667
0 0 0.2000
p =
3 2 1
>> L(p,:)*U
ans =
10 10 20
20 25 40
30 50 61
87. 87/118
– Con los recursos de Matlab:
>> [L U P]=lu(A)
L =
1.0000 0 0
0.6667 1.0000 0
0.3333 0.8000 1.0000
U =
30.0000 50.0000 61.0000
0 -8.3333 -0.6667
0 0 0.2000
P =
0 0 1
0 1 0
1 0 0
>> P*L*U
ans =
10 10 20
20 25 40
30 50 61
88. 88/118
Matlab y la factorización LU
– Como acabamos de ver, para resolver un sistema lineal de
ecuaciones Ax D b con Matlab, mediante la factorización LU ,
sólo hay que utilizar [L U P]=lu(A), obteniéndose la solución
del sistema original haciendo
x=U(L(P’*b))
89. 89/118
– Apliquemos esta idea a uno de los ejemplos que manejamos:
>> A=[2 1 0 4;0 -3 -12 -1;0 -1 -2 0;0 0 3 1];
>> b=[2;2;-2;-5];
>> [L U P]=lu(A)
L =
1.0000 0 0 0
0 1.0000 0 0
0 0 1.0000 0
0 0.3333 0.6667 1.0000
U =
2.0000 1.0000 0 4.0000
0 -3.0000 -12.0000 -1.0000
0 0 3.0000 1.0000
0 0 0 -0.3333
P =
1 0 0 0
0 1 0 0
0 0 0 1
0 0 1 0
>> x=U(L(P’*b))
x =
3.0000
4.0000
-1.0000
-2.0000
90. 90/118
Índice
Cuál es el problema; consideraciones teóricas
Eliminación de Gauss
Matlab y los sistemas de ecuaciones lineales
Factorización LU
Solución de sistemas modificados
Refinamiento iterativo
Sistemas con matrices especiales
91. 91/118
Solución de sistemas modificados
– Si en un sistema Ax D b se modifica el vector b pero no la
matriz, no es necesario rehacer la factorización LU para resolver
el nuevo sistema.
– Si se modifica ligeramente la matriz A, por ejemplo el elemento
(j; k), con lo que A D A ˛ej eT
k , puede que no sea necesario
tampoco recalcular la factorización en su totalidad.
La fórmula de Sherman-Morrison-Woodbury proporciona la
inversa de una matriz en términos de los vectores de una
modificación de rango uno –uvT
– a la misma:
A uvT
Á 1
D
A 1 C A 1u 1 vT A 1u
Á 1
vT A 1:
92. 92/118
– Para resolver el nuevo sistema .A uvT
/x D b, usando la
fórmula, se obtendría
x D A uvT
Á 1
b
D A 1b C A 1u 1 vT A 1u
Á 1
vT A 1b;
operación que podría hacerse por partes:
1. Resolviendo Az D u, obteniendo z.
2. Resolviendo Ay D b, obteniendo y.
3. Calculando x D y C ..vT
y/=.1 vT
z//z.
– Como A ya está factorizada, este procedimiento requiere solo
sustituciones inversas y productos interiores; es decir O.n2
/
operaciones frente a las O.n3
=3/ de la factorización.
93. 93/118
Ejemplo
– Consideremos la matriz
A D
2
4
2 4 2
4 9 3
2 3 7
3
5 D
2
4
1 0 0
2 1 0
1 1 1
3
5
„ ƒ‚ …
L
2
4
2 4 2
0 1 1
0 0 4
3
5
„ ƒ‚ …
U
a la que se le efectúa una modificación consistente en cambiar el
coeficiente (3,2) por un -1.
– En este caso
u D
2
4
0
0
2
3
5 y v D
2
4
0
1
0
3
5 ;
con lo que la matriz resultante es A uvT
.
94. 94/118
– Con la factorización LU de A, se resuelve Az D u y Ay D b,
dando
z D
2
4
3=2
1=2
1=2
3
5 y y D
2
4
1
2
2
3
5 :
– Por último,
x D y C
vT
y
1 vT z
z D
2
4
1
2
2
3
5 C
2
1 1=2
2
4
3=2
1=2
1=2
3
5 D
2
4
7
4
0
3
5 :
u
95. 95/118
Índice
Cuál es el problema; consideraciones teóricas
Eliminación de Gauss
Matlab y los sistemas de ecuaciones lineales
Factorización LU
Solución de sistemas modificados
Refinamiento iterativo
Sistemas con matrices especiales
96. 96/118
Refinamiento iterativo
– Si se tiene una solución x0 del sistema de ecuaciones lineales
Ax D b, el vector de residuos es
r0 D b Ax0:
– Si este vector no cumple unos requisitos de precisión que nos
interesen, se pude resolver el sistema Az0 D r0 y hacer
x1 D x0 C z0:
– Esta nueva solución será mejor que la anterior pues
Ax1 D A.x0 C z0/ D Ax0 C Az0
D .b r0/ C r0 D b:
97. 97/118
– Esta forma de actuar sugiere seguir iterando hasta conseguir que
la solución se aproxime tanto como se quiera a la esperada,
teniendo en cuenta, claro, los estándares de precisión de la
máquina donde se esté trabajando.
% Script de Refinamiento Iterativo
n=6;
format short
A=hilb(n); % Matriz de Hilbert (muy mal condicionada)
b=A*ones(n,1); % Elegimos término independiente para sol. x=1.
pause
x=Ab % Solución, evidentemente, =1
B=A; % En B está A perturbada un poquito
B(6,1)=B(6,1)+1.e-06;
pause
x1=Bb % Veamos la nueva solución; difiere bastante
pause
xex=ones(n,1); % Calculemos cuánto
norm(xex-x1,2) % Como magnitud calculemos la norma 2 de la desviaci.
norm(xex-x,2)
pause
98. 98/118
res=b-A*x1; % Hagamos una iteración del Refinamiento iterativo
x1=x1+Bres
norm(xex-x1,2)
pause
res=b-A*x1; % Hagamos otra iteración del Refinamiento iterativo
format long
x1=x1+Bres
norm(xex-x1,2)
pause
res=b-A*x1; % Hagamos otra iteración del Refinamiento iterativo
x1=x1+Bres
norm(xex-x1,2)
99. 99/118
Índice
Cuál es el problema; consideraciones teóricas
Eliminación de Gauss
Matlab y los sistemas de ecuaciones lineales
Factorización LU
Solución de sistemas modificados
Refinamiento iterativo
Sistemas con matrices especiales
100. 100/118
Sistemas con matrices especiales
Matrices simétricas
Factorización LDLT
Lema. Si todas las submatrices principales de una matriz A 2 Rn n
son regulares, existen dos matrices triangulares inferiores unitarias
únicas, L y M, y otra diagonal también única, D D diag.d1; : : : ; dn/,
tales que A D LDMT
.
Teorema. Si A admite una factorización LDMT
y es simétrica, L D
M.
101. 101/118
– Para derivar unas fórmulas de recurrencia, a partir de un ejemplo
simbólico de orden 3,
2
4
a11 a12 a13
a21 a22 a23
a31 a32 a33
3
5 D
2
4
1 0 0
l21 1 0
l31 l32 1
3
5
2
4
d11
d22
d33
3
5
2
4
1 l21 l31
0 1 l32
0 0 1
3
5 ;
operando de acuerdo con las reglas de multiplicación matricial se
obtiene que
a11 D d11
a21 D l21d11
a31 D l31d11
a22 D l2
21d11 C d22
a32 D l31l21d11 C l32d22
a33 D l2
31d11 C l2
32d22 C d33:
102. 102/118
– Generalizando se obtiene el algoritmo de la tabla.
for k D 1 to n
d.k/ a.k; k/
k 1X
pD1
a2
.k; p/d.p/
if d.k/ D 0 then stop
for i D k C 1 to n
a.i; k/
0
@a.i; k/
k 1X
pD1
a.i; p/a.k; p/d.p/
1
A d.k/
end
end
– Requiere O.n3
=6/ multiplicaciones y divisiones y sumas y restas.
– Si no se efectúan pivotaciones, los métodos expuestos hasta
ahora para factorizar una matriz pueden fallar por la posible
presencia de elementos pivote muy pequeños, o por la
acumulación de errores de redondeo importantes.
103. 103/118
Factorización de Cholesky
– Recordemos que una matriz se dice definida positiva, si para
todo x ¤ 0 se cumple que
xT Ax > 0:
Todos los valores propios de una matriz definida positiva son
positivos.
– Las matrices simétricas definidas positivas admiten una
descomposición de la forma
A D GT G;
donde G es una matriz triangular superior.
– Esta descomposición fue formulada por André Louis Cholesky
(1875-1918), comandante del ejército francés de la época,
durante la ocupación internacional de Creta en 1906–09.
104. 104/118
– Las matrices simétricas definidas positivas se presentan
habitualmente en:
Problemas relacionados con el análisis de sistemas eléctricos
de generación y transporte de energía.
Ajuste de funciones por mínimos cuadrados.
Análisis de estructuras mecánicas.
En muchos procedimientos de optimización lineal y no lineal.
– En general, en todas aquellas aplicaciones donde al modelizar un
sistema, la expresión xT
Ax mide la energía presente o disponible
en un entorno determinado: esta energía habitualmente es una
cantidad positiva.
105. 105/118
Lema. Las submatrices principales de una matriz definida positiva
son definidas positivas.
Teorema. Si A es una matriz definida positiva de orden n, tiene una
descomposición de la forma LDMT
, siendo todos los elementos de
la matriz diagonal D positivos.
Teorema. Si A es una matriz simétrica definida positiva de orden
n, existe una única matriz triangular superior, G, con todos sus
elementos diagonales positivos, tal que A D GT
G.
106. 106/118
– Para determinar el algoritmo de descomposición de Cholesky de
una forma directa, procedamos a simularlo con la
descomposición simbólica de una matriz 3 3.
– Si se desea obtener la factorización
2
4
a11 a12 a13
a12 a22 a23
a13 a23 a33
3
5 D
2
4
g11 0 0
g12 g22 0
g13 g23 g33
3
5
2
4
g11 g12 g13
0 g22 g23
0 0 g33
3
5 ;
operando de acuerdo con las reglas de multiplicación matricial se
obtiene que:
a11 D g2
11
a12 D g11g12
a13 D g11g13
a22 D g2
12 C g2
22
a23 D g12g13 C g22g23
a33 D g2
13 C g2
23 C g2
33:
107. 107/118
– Generalizando este proceso se obtiene el algoritmo que describe
la tabla.
for i D 1 to n
g.i; i/
v
u
u
u
ta.i; i/
i 1X
kD1
g2
.k; i/
for j D i C 1 to n
g.i; j/
0
B
@a.i; j/
i 1i
kD1
g.k; i/g.k; j/
1
C
A g.i; i/
end
end
– El algoritmo requiere O.n3
=6/ operaciones de
multiplicación+división y de suma+resta.
108. 108/118
– Este algoritmo en Matlab sería como sigue.
function G=Chols_1(A)
% Factorización de Cholesky
n=size(A,1);
for i=1:n, j=i+1:n;
A(i,i)=sqrt(A(i,i));
A(i,j)=A(i,j)/A(i,i);
A(j,j)=A(j,j)-A(i,j)’*A(i,j);
end
G=triu(A);
110. 110/118
Matlab y la factorización de Cholesky
– Para resolver un sistema lineal de ecuaciones Ax D b con
Matlab utilizando la factorización de Cholesky hay que utilizar
la función G=chol(A).
– La solución del sistema correspondiente se puede obtener,
teniendo en cuenta que se realiza A D GT
G, haciendo
x=G(G’b)
111. 111/118
– Para utilizar esta operación con un ejemplo de los que estamos
manejando, habría que hacer algo parecido a lo que sigue.
>> A=[5 1 -2 0;1 2 0 0;-2 0 4 1;0 0 1 3];
>> b=[1;5;14;15];
>> G=chol(A)
G =
2.2361 0.4472 -0.8944 0
0 1.3416 0.2981 0
0 0 1.7638 0.5669
0 0 0 1.6366
>> x=G(G’b)
x =
1.0000
2.0000
3.0000
4.0000
112. 112/118
Matrices simétricas semidefinidas positivas
– Una matriz A se dice semidefinida positiva, si para todo x ¤ 0,
xT
Ax 0.
Teorema. Si A 2 Rn n
es simétrica semidefinida positiva, se cumple
jaij j Ä .aii C ajj /=2
jaij j Ä
p
aiiajj .i ¤ j/
mKax
i;j
jaij j D mKax
i
aii
aii D 0 ) aij D aji D 0; j D 1; : : : ; n:
– Si el algoritmo de Cholesky se aplica a una matriz semidefinida
positiva, y en un paso akk es cero, entonces ajk D 0; j D k; : : : n,
por lo que no habría que hacer nada más en la columna k.
En la práctica, los errores de redondeo internos impiden los
ceros exactos por lo que se recurre a la pivotación.
113. 113/118
Pivotación
– Para mantener la simetría, las pivotaciones han de ser
simétricas: si se intercambian dos filas, también hay que
intercambiar las columnas simétricas: A PAPT
.
– La pivotación en Cholesky se lleva adelante así:
En cada etapa k del proceso se determina el ele-
mento de mayor valor de la diagonal principal,
mKaxkÄjÄn ajj :
Si no es cero, se intercambian las fi-
las/columnas p y k, siempre y cuando k ¤ p;
si es cero, el resto de la matriz a factorizar
sería nula y no se haría nada más.
114. 114/118
– Este es el algoritmo de Cholesky con pivotación para matrices
semidefinidas positivas.
for i D 1 to n
Determinar índice p 2 fi; i C 1; ng tal que ja.p; p/j D mKaxiÄj Änfja.j; j/jg
if a.p; p/ > 0
Intercambiar filas/columnas p y i.
g.i; i/
s
a.i; i/
i 1X
kD1
g2
.k; i/
for j D i C 1 to n
g.i; j/
0
B
B
@a.i; j/
i 1i
kD1
g.k; i/g.k; j/
1
C
C
A g.i; i/
end
end
end
115. 115/118
Matrices simétricas indefinidas
– Una matriz A se dice indefinida si para algún vector x ¤ 0 la
forma cuadrática xT
Ax es positiva y para otros negativa.
– Para factorizar este tipo de matrices se recurre a
descomposiciones de pivotación diagonal en bloques de la forma
PAPT
D LBLT
donde la matriz L es triangular inferior unitaria y la matriz B es
tridiagonal, o diagonal en bloques, con bloques de dimensión
1 1 ó 2 2, bidiagonal en este caso.
– Casi todos los códigos modernos utilizan alguna variedad de
matriz bidiagonal B en bloques, aunque todavía se usan mucho
rutinas que implementan algún método en el que esa matriz es
tridiagonal (T ).
116. 116/118
– Los métodos más conocidos se citan a continuación.
Método Estrategia Operaciones
Parlett y Reid PAPT
D LT LT
O.n3
=3/
Aasen PAPT
D LT LT
O.n3
=6/
Bunch y Parlett PAPT
D LBLT
O.n3
=6/ C O.n3
=6/ compara.
Bunch y Kaufman PAPT
D LBLT
O.n3
=6/ C .n2
1/ compara.
– El del Bunch y Kaufman (1977), en alguna de sus variantes, es
el más utilizado y el que emplean los códigos profesionales para
factorizar matrices simétricas.
117. 117/118
function [L D P rho] = diagpiv(A)
%DIAGPIV Diagonal pivoting factorization with pivoting of a symetric A.
% P*A*P’=L*D*L’; L is triangular and D a block diagonal D 1x1 or 2x2.
% Rho is the growth factor. This routine does not exploit symmetry.
% Bunch and Kaufman (1977), Some stable methods for calculating inertia
% and solving symmetric linear systems, Math. Comp. 31(137):163-179.
if norm(triu(A,1)’-tril(A,-1),1), error(’Matrix must be symmetric.’), end
n = max(size(A)); k = 1; D = eye(n); L = eye(n); pp = 1:n;
normA = norm(A(:),inf); rho = normA; alpha = (1 + sqrt(17))/8;
while k < n
[lambda r] = max(abs(A(k+1:n,k)));
r = r(1) + k;
if lambda > 0
swap = 0;
if abs(A(k,k)) >= alpha*lambda
s = 1;
else
temp = A(k:n,r); temp(r-k+1) = 0; sigma = norm(temp, inf);
if alpha*lambda^2 <= abs(A(k,k))*sigma
s = 1;
elseif abs(A(r,r))>=alpha*sigma
swap = 1; m1 = k; m2 = r; s = 1;
else
swap = 1; m1 = k+1; m2 = r; s = 2;
end
end
if swap
A([m1 m2],:) = A([m2 m1],:); L([m1 m2],:) = L([m2 m1],:);
A(:,[m1 m2]) = A(:,[m2 m1]); L(:,[m1 m2]) = L(:,[m2 m1]);
pp([m1 m2]) = pp([m2 m1]);
end
if s == 1 % s = 1
D(k,k) = A(k,k);
A(k+1:n,k) = A(k+1:n,k)/A(k,k); L(k+1:n,k) = A(k+1:n,k);
i = k+1:n; A(i,i) = A(i,i) - A(i,k)*A(k,i);
else % s = 2
E = A(k:k+1,k:k+1); D(k:k+1,k:k+1) = E;
C = A(k+2:n,k:k+1); temp = C/E;
L(k+2:n,k:k+1) = temp;
A(k+2:n,k+2:n) = A(k+2:n,k+2:n) - temp*C’;
end
if k+s <= n
rho = max(rho,max(max(abs(A(k+s:n,k+s:n)))));
end
else % Nothing to do, lambda=0
s = 1; D(k,k) = A(k,k);
end
k = k + s;
if k == n, D(n,n) = A(n,n); break, end
end
if nargout >= 3, P = eye(n); P = P(pp,:); end
rho = rho/normA;