Está en la página 1de 128

Universidad Politécnica de Madrid–Escuela Técnica Superior de Ingenieros Industriales 1/128

Grado en Ingeniería en Tecnologías Industriales. Curso 2015-2016-3º


Matemáticas de Especialidad–Ingeniería Eléctrica

Sistemas de ecuaciones lineales


Métodos directos de resolución

José Luis de la Fuente O’Connor


jldelafuente@etsii.upm.es
joseluis.delafuente@upm.es
Clase_sistemas_ecuaciones_lineales_2016.pdf
2/128

Índice
 El problema y consideraciones teóricas

 Métodos directos: Eliminación de Gauss

 Pivotación
 Algoritmo
 Número de operaciones
 Método de Gauss-Jordan
 Condicionamiento de sistemas de ecuaciones lineales

 Errores en la 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


3/128

El problema y sus aspectos teóricos

 Se trata de obtener la solución de un sistema de ecuaciones lineales como


a11x1 C a12x2 C    C a1nxn D b1
a21x1 C a22x2 C    C a2nxn D b2
::: ::: ::: :::
am1x1 C am2x2 C    C amnxn D bm:

Hay que obtener el valor del vector x D Œx1; : : : ; xnT que hace que se cumplan
simultáneamente todas las igualdades.

 Los números aij son los coeficientes del sistema y b D Œb1; : : : ; bmT el término
independiente.
4/128

 Si se introducen las matrices


2 3 2 3 2 3
a11 a12    a1n x1 b1
6 7 6 7 6 7
6 a21 a22    a2n 7 6x 7 6b 7
A D 6 :: :: ::: 7 ; x D 6 ::2 7 y b D 6 ::2 7 ;
4 : : 5 4:5 4 : 5
am1 am2    amn xn xm

el sistema se puede representar de forma más compacta por

Ax D b:

 En general A 2 Rmn, x 2 Rn y b 2 Rm, pero también pueden pertenecer al


cuerpo de los números complejos.
 Casos posibles de sistemas lineales, una vez más
 m = n de ecuaciones lineales:
Casos posibles de sistemas 5/128

m=n · = m=n
rango(A) = m = n
m=n · = m=n · =
rango(A) = m = n rango(A) < m = n
· = · =
rango(A) = m = n rango(A) < m = n
1a 1b
1a 1b
m>n · = m>n · =
m>n · = m>n · =
rango(A) = n < m rango(A) < n < m
m>n · = m>n · =
rango(A) = n < m rango(A) < n < m

rango(A) = n < m rango(A) < n < m

2a 2b
2a 2b
m<n m<n
m<n · = m<n · =
rango(A) = m < n · = rango(A) < m < n · =
m<n m<n
rango(A) = m < n = rango(A) < m < n =
· ·
rango(A) = m < n rango(A) < m < n
3a 3b 5/101

3a 3b
6/128

 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 A mn tiene rango m, Ax D b siempre tiene solución.

Teorema Si x 0 es una solución de Ax D b, el conjunto de soluciones de la ecuación


está dado por x 0 C ker.A/.

Corolario Una solución de Ax D b es única si y sólo si ker.A/ D ;.


7/128

Teorema La ecuación Ax D 0, A mn, 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
DI
8/128

Objective: Find the temperature of an integrated circuit (IC)


 Ejemplo Hay que modelizar el sistema de refrigeración de una tarjeta
package mounted on a heat spreader. The system of equations is
electrónica para poder usar un reloj de impulsos con la mayor frecuencia de
obtained from a thermal resistive network model.
oscilación posible.

 Physicaladoptamos
Simplificadamente, Model: el modelo físico Mathematical
y matemático deModel:
la figura en el
que se esquematiza un tiristor o un transistor montado en una placa disipadora
de calor.
aire
Q1 Q2
c Τp Τw
Qc
R2

Q3 R3 Q4 R4 Q5 R5

Tp
Tw
Τa Τa Τa
temperatura exterior Ta
9/128

 Si el sistema necesita Qc watios de potencia y se supone un modelo resistivo del


flujo de aire entre los nudos del sistema, aplicando los principios de conservación
de la energía se obtienen estas ecuaciones:
1 1
Q1 D .Tc Tp / Q4 D .Tp Ta / Q c D Q1 C Q3
R1 R4
1 1
Q2 D .Tp Tw / Q2 D .Tw Ta / Q1 D Q2 C Q4
R2 R5
1
Q3 D .Tc Ta /
R3

 Se conocen Qc y 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 .


 Como hay siete ecuaciones, reagrupando las ecuaciones para aislar las incógnitas:
10/128

R1 Q1 Tc C T9 D0
R2 Q2 Tp C Tw D0
R3 Q3 Tc D Ta
R4 Q4 Tp D Ta
R5 Q2 Tw D Ta
Q1 C Q3 D Qc
Q1 Q2 Q4 D 0:

 En forma matricial, el sistema tiene la siguiente expresión:


2 32 3 2 3
R1 0 0 0 1 1 0 Q1 0
6 0 R2 0 0 0 1 17 6Q2 7 6 0 7
6 0 0 R3 0 1 0 07 6Q3 7 6 Ta 7
6 0 0 0 R4 07 6Q4 7 D 6 Ta 7
6 0R 0 0 0 1
76 7 6 T7
4 5 0 0 15 4 Tc 5 4 a5
1 0 1 0 0 0 0 Tp Qc
1 1 0 1 0 0 0 Tw 0

 Los flujos de calor se obtendrán resolviendo este sistema.


 En Matlab, si R1 D 100, R2 D 200, R3 D 50, R4 D 100, R5 D 300, 11/128

Ta D 50 y Qc D 25, en su zona de trabajo habría que hacer esto:


» 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=A\b
x =
1.0e+003 *
0.00535714285714
0.00089285714286
0.01964285714286
0.00446428571429
1.03214285714286
0.49642857142857
0.31785714285714
12/128
 Analicemos geométricamente el problema de resolver un sistema de dos
ecuaciones lineales con dos incógnitas:
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.
x2

a11 x 1 + a12 x 2 = b1

a21 x 1 + a22 x 2 = b2

x1

 El proceso de obtener la solución del sistema tiene como objeto determinar


las coordenadas del punto donde se cortan.
13/128

 Expresión gráfica de diversas formas que pueden adoptar los sistemas de


ecuaciones lineales.

 Generalizando a Rn, la resolución de un sistema de ecuaciones lineales consiste


en determinar las coordenadas del(os) punto(s) de intersección de los
www.FreeLibros.me
hiperplanos asociados a cada una de las ecuaciones.
x3 D 3
3
 En R , por ejemplo, el sistema 14/128
1RZ KDYLQJFOHDQHGRXWWKHFROXPQDERYH
x1 2x2 C x3 D 0 HTXDWLRQDQGXVHLWWRHOLPLQDWHWKH "2x2
x3  WKHUHLVQRZQRDULWKPHWLFLQYROYLQJ x3
2x2 8x3 D 8 DQGREWDLQWKHV\VWHP
4x1 C 5x2 C 9x3 D 9 8̂
<x1 D 29
tiene por solución, única, x D Œ29; 16; 3T . x2 D 16

x3 D 3

7KHZRUNLVHVVHQWLDOO\GRQH ,WVKRZVWKD
.29; 16; 3/ +RZHYHU VLQFHWKHUHDUHVRPDQ
WRFKHFNWKHZRUN 7RYHULI\WKDW .29; 16;
WKHOHIWVLGHRIWKHRULJLQDOV\VWHP DQGFRP

.29/ " 2.16/ C .3/ D


(29, 16, 3) 2.16/ " 8.3/ D
(DFKRIWKHRULJLQDOHTXDWLRQV "4.29/ C 5.16/ C 9.3/ D
GHWHUPLQHVDSODQHLQWKUHH
GLPHQVLRQDOVSDFH 7KHSRLQW 7KHUHVXOWVDJUHHZLWKWKHULJKWVLGHRIWKH
.29; 16; 3/ OLHVLQDOOWKUHHSODQHV RIWKHV\VWHP
 El punto x D Œ29; 16; 3T está en los tres planos que definen las ecuaciones del
([DPSOHLOOXVWUDWHVKRZRSHUDWLRQVR
sistema. RSHUDWLRQVRQWKHDSSURSULDWHURZVRIWKHDX
>> A=[1 -2 1;0 2 -8;-4 5 9];
>> b=[0;8;-9]; OLVWHGHDUOLHUFRUUHVSRQGWRWKHIROORZLQJRS
>> A\b
ans =
29
16 &-&.&/5"3: 308 01&3"5*0/4
3
 5HSODFHPHQW 5HSODFHRQHURZE\W
URZ
15/128

 Geométricamente, en el subespacio Im.A/, si se escribe el sistema de dos


ecuaciones con dos incógnitas de la forma
     
a11 a12 b
x1 C x2 D 1 ;
a21 a22 b2
el problema es el de descomponer linealmente el vector b en los dos vectores
columna de la matriz de coeficientes.

 
b1
b2

 
a11
a21

 
a12
a22

 En Rn el problema es el de la búsqueda de la descomposición lineal de un vector


según los n vectores de la base de Im.A/: los vectores columna de A.
16/128

Índice
 El problema; consideraciones teóricas

 Métodos directos. Eliminación de Gauss


 Condicionamiento de sistemas de ecuaciones lineales

 Errores en la 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


17/128

Métodos directos. Eliminación de Gauss

 Los métodos directos resuelven el problema en etapas, siendo el número de


éstas fijo y función de la dimensión del problema.

 El más clásico es el debido a Gauss, quien lo aplicó por primera vez en 1809 con
motivo de unos estudios sobre órbitas de cuerpos celestes.

Carl Friedrich Gauss, Alemania, 1777-1855

 Supondremos que la matriz cuadrada A es de rango completo –regular–, por lo


tanto invertible, y que si eventualmente no lo es el procedimiento deberá
detectarlo.
18/128

 La mecánica del método consiste en aplicar al sistema


9
a11x1 C a12x2 C    C a1nxn D b1 > >
>
=
a21x1 C a22x2 C    C a2nxn D b2
::: ::: ::: ::: > Ax D b
>
>
an1x1 C an2x2 C    C annxn D bn ;

n 1 transformaciones lineales que lo conviertan en otro más fácil de resolver.

 Concretamente, en uno triangular superior de la forma

9
u11x1 C u12x2 C    C u1nxn D b10 =
b20
U x D b0:
u22x2 C    C u2nxn D
;
::: :::
0
unnxn D bn;
19/128

 Un sistema triangular superior, siempre y cuando se satisfaga que

ui i ¤ 0; i D 1; : : : ; n;

es fácilmente resoluble de manera recurrente mediante las fórmulas


!
1 X n
0
xk D b uki xi ; k D 1; : : : ; n:
ukk k
i DkC1

Este proceso se conoce como sustitución inversa.


20/128

 En cada una de esas n 1 etapas, con otras tantas transformaciones lineales,


hay que llevar a cabo:
1. Una multiplicación de una de las ecuaciones del sistema por un número
distinto de cero.
2. Una sustitución de una ecuación del sistema (o varias) por la que resulta de
sumarle otra multiplicada por un factor.
3. Una posible permutación del orden en que aparecen en el sistema las
ecuaciones del mismo.
21/128

 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


2 3 2 3 2 3
2 1 0 4 2 x1
6 7 6 7 6 7
6 4 2 3 77 6 97 6x27
AD6 7; b D 6 7 y x D 6 7:
4 4 1 2 85 4 25 4x35
0 3 12 1 2 x4
22/128

 Reconfiguremos inicialmente la matriz A, añadiéndole a su derecha la columna


b es decir,
del término independiente b, y llamemos a la nueva matriz A;
2 3
2 1 0 4 2
6 7
b D ŒAjb D 6 6 4 2 3 7 9 7
A 7:
4 4 1 2 8 25
0 3 12 1 2

Apliquemos ahora la mecánica del método en 3 etapas.

Etapa 1

 Comprobemos el valor del coeficiente aO 11 —denominado pivote—.


Si es distinto de cero, pivotando sobre él, hagamos cero los coeficientes de la
primera columna por debajo de ese aO 11.
 Para ello, calculamos para cada fila 2; : : : ; n los factores o multiplicadores 23/128

aO i1
ri D ; i D 2; : : : ; n:
aO 11

 A continuación, restamos de las filas i D 2; : : : ; n, la primera multiplicada por


ri . El resultado es que todos los coeficientes debajo de la diagonal principal de
la columna 1 se anularán.

 b debajo de la primera fila se verán afectados


Los demás coeficientes de A
como indica esta expresión:

aO ij aO ij ri  aO 1j ; i D 2; : : : ; nI j D 2; : : : ; n C 1:

 En el ejemplo, los multiplicadores son


r2 D aO 21=aO 11 D 4=2 D 2
r3 D aO 31=aO 11 D 4=2 D 2
r4 D aO 41=aO 11 D 0=2 D 0:
24/128

 b que cambian de valor son:


Los coeficientes de la matriz A
en la 2a fila: aO 21 0
aO 22 aO 22 r2  aO 12 D 2C21D 0
aO 23 aO 23 r2  aO 13 D 3C20D 3
aO 24 aO 24 r2  aO 14 D 7C24D 1
aO 25 aO 25 r2  aO 15 D 9C22D 5I
en la 3a fila: aO 31 0
aO 32 aO 32 r3  aO 12 D 1 21D 1
aO 33 aO 33 r3  aO 13 D 2 20D 2
aO 34 aO 34 r3  aO 14 D 8 24D 0
aO 35 aO 35 r3  aO 15 D 2 22D 2I
en la 4a fila: aO 41 0
aO 42 aO 42 r3  aO 12 D 3 01D 3
aO 43 aO 43 r4  aO 13 D 12 00D 12
aO 44 aO 44 r4  aO 14 D 1 04D 1
aO 45 aO 45 r4  aO 15 D 2 02D 2:
 b 1 , resultado de transformar A,
La nueva matriz A b es:
2 3
25/128

2 1 0 4 2
b1 D 60
40
0 3 1 57
25
A
1 2 0
:
0 3 12 1 2

 Obsérvese que se hubiese obtenido exactamente el mismo resultado de haber


b por la denominada transformación de Gauss que define la
premultiplicado A
matriz triangular inferior unitaria
2 3
1000
6 7
6 2 1 0 07
L1 D 6 7;
4 2 0 1 05
0001
denominada matriz de transformación de Gauss.

2 32 3 2 3
1 0 0 0 2 1 0 4 2 2 1 0 4 2
6 2 07 6 97 6 0 57
L1b
1 0 4 2 3 7 0 3 1
AD4
05 4 25 4 0 25
 En efecto, 2 0 1 4 1 2 8
D
1 2 0
.
0 0 0 1 0 3 12 1 2 0 3 12 1 2
26/128

 La matriz L1 también se puede escribir de la forma L1 D I ˛e T1 , donde


23 2 3
0 1
6 27 607
˛D6 7
4 25 y e1 D 6 7
405 :
0 0

 Su inversa es 2 3
1000
6 7
6 2 1 0 07
L1 1 D6 7:
4 2 0 1 05
0001
La única diferencia con L1 es el signo de los coeficientes de la primera columna
debajo de la diagonal principal.

 b 1 D L1 A.
En resumen, A b
27/128

Etapa 2

 Hagamos cero los coeficientes debajo de la diagonal principal de la 2a columna


b 1.
de A

1
 Al tratar de hacerlo, vemos que el coeficiente pivote aO 22 es cero, lo que nos
impide proceder como en la etapa anterior.

1
 Comprobemos si algún coeficiente de la columna 2 por debajo de aO 22 no es 0:
 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 coeficiente con la segunda.
28/128

 En el ejemplo, el coeficiente 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á
2 3
2 1 0 4 2
6 7
b 60 3 12 1 27
A1 D 6
0
7:
40 1 2 0 25
0 0 3 1 5

 b 1 por la permutación
Esto mismo se obtiene premultiplicando A
2 3
1000
6 7
60 0 0 17
P1 D 6 7:
40 0 1 05
0100
29/128

b 0 , es:
 Recapitulemos: la matriz con la que vamos a operar a continuación, A 1

b 0 D P 1 L1 A:
A b
1

 Apliquemos a continuación a la columna 2 la misma idea que a la columna 1 y


hagamos cero sus coeficientes 3 a n.

 Los nuevos multiplicadores saldrán de la expresión


1 0
aO i2
ri D 10 ; i D 3; 4:
aO 22

 b 0 por debajo de la segunda


Los nuevos valores de los coeficientes de la matriz A 1
fila se obtendrán aplicando la expresión
0 0 0
aO ij1 aO ij1 1
ri  aO 2j ; i D 3; 4I j D 3; : : : ; 5:
30/128

 Los valores de los multiplicadores para el ejemplo son


1 0 1 0
r3 D aO 32 =aO 22 D 1=3 y
1 0 1 0
r4 D aO 42 =aO 22 D 0:

 b 0 resultante:
Los nuevos coeficientes de la matriz A 1

en la 3a fila:
0
1
aO 32 0
10 10 0
1 1
aO 33 aO 33 r3  aO 23 D 2C 3
 12 D 2
10 10 10 1
aO 34 aO 34 r3  aO 24 D 0C 3
1 D 1=3
10 10 10 1
aO 35 aO 35 r3  aO 25 D 2 3
2 D 8=3I

en la 4a fila:
0
1
aO 42 0
10 10 0
1
aO 43 aO 43 r4  aO 23 D 3 0  12 D 3
10 10 10
aO 44 aO 44 r4  aO 24 D 1 01 D 1
10 10 10
aO 45 aO 45 r4  aO 25 D 5 02 D 5:

 Al ser r4 D 0, los cálculos para adaptar la cuarta fila podrían haberse evitado.
31/128

 La nueva matriz resultado de estas transformaciones es


2 3
2 1 0 4 2
6 7
b 60 3 12 1 27
A2 D 6 7;
40 0 2 1=3 8=35
0 0 3 1 5

matriz que se expresa a partir de la inicial como


b 2 D L2 P 1 L1 A;
A b
2 3
1 000
6 7
60 1 0 07
donde L2 D 6 7:
40 1=3 1 05
0 001
32/128

Etapa 3

 Para conseguir transformar el sistema original en uno triangular superior sólo


2
resta anular el coeficiente aO 43 .

2
 El coeficiente de la diagonal principal aO 33 es distinto de cero, luego procedemos
a calcular el multiplicador r4:
2 2
r4 D aO 43 =aO 33 D 3=2:

 b 2 por debajo de la tercera


Los nuevos valores de los coeficientes de la matriz A
fila se obtendrán aplicando la expresión

aO ij2 aO ij2 2
ri  aO 3j ; i D 4I j D 4; 5:
33/128

 En concreto, en la cuarta fila:


2
aO 43 0
2
aO 44 2
aO 44 2
r4  aO 34 D 1 23  13 D 1=2
2
aO 45 2
aO 45 2
r4  aO 35 D 5 C 32  83 D 1:

 La nueva matriz resultado de estas transformaciones es


2 3
2 1 0 4 2
6 7
Ab3 D 66
0 3 12 1 27
7:
40 0 2 1=3 8=35
0 0 0 1=2 1
34/128

 b una serie
A este resultado se ha llegado después de aplicar a la matriz inicial A
de transformaciones; concretamente:
b 3 D L3 L2 P 1 L1 A;
A b

donde 2 3
10 0 0
6 7
60 1 0 07
L3 D 6 7:
40 0 1 05
0 0 3=2 1

 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 A. b
Es decir,
U D L3L2P 1L1A:
35/128

 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 32 3 2 3
2 1 0 4 x1 2
6 76 7 6 7
60 3 12 17 6x27 6 27
6 76 7 D 6 7:
40 0 2 1=35 4x35 4 8=35
0 0 0 1=2 x4 1
36/128

 La solución se lleva a cabo mediante sustitución inversa:

x4 D 2;

sustituyendo en la tercera ecuación,


8=3 . 2/.1=3/
x3 D D 1;
2
y, a su vez, haciéndolo en la segunda,
2 . 1/. 2/ . 12/. 1/
x2 D D 4:
3

 Por último, sustituyendo los valores de las variables ya calculados en la primera


ecuación se obtiene
2 4. 2/ 1.4/
x1 D D 3:
2
37/128

 La solución de nuestro ejemplo es pues


2 3 2 3
x1 3
6 7 6 7
6x27 6 47
6 7D6 7:
4x35 4 15
x4 2
38/128

Pivotación

 Veamos qué ocurre si resolvemos con el procedimiento estudiado


     
10 4 1 x1 1
˜
D ;
1 1 x2 2
„ƒ‚… „ƒ‚…
A x b

en una máquina teórica con sólo tres dígitos significativos que redondea.

 Aplicando la mecánica apuntada, como 10 4 no es cero, en una primera etapa


ordinaria se obtendría una nueva matriz A 1 y un nuevo vector b1 así:
   
10 4 1 1
A1 D y b1 D :
0 1 104 2 104
39/128

 Ahora bien, 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
104
x2 D D1
104
1 x2
x1 D D 0;
10 4
muy distinta de la real Œ0;99989999; 1;00010001T .

 La elección del pivote, y su uso, además de que el multiplicador no salga de un


posible ai i D 0, también tiene por objeto que ese multiplicador no tenga una
magnitud mucho mayor que 1 con el fin de aumentar la estabilidad numérica del
procedimiento,
 Es por esto por lo que siempre se escoge el coeficiente pivote de mayor
magnitud de entre los de debajo de la diagonal principal.
40/128

 Para el caso de este último ejemplo, en la primera etapa en vez de operar sobre
la matriz anterior, como el valor absoluto del coeficiente a21 es mayor que el del
a11, se intercambiaría la fila 1 con la 2, obteniéndose
   
1 1 2
A0 D y b0
D :
10 4 1 1

 Continuando con el procedimiento normal, después de la primera etapa, se


llegará a    
1 1 2
A 01 D 4 y b01 D :
0 1 10 1 2  10 4
Por redondeos internos, la máquina representaría
   
1 1 2
A 01 D y b01 D :
01 1
 La solución de este sistema de ecuaciones sería
   
41/128

x1 1
D :
x2 1
0,9998
Solución mucho mejor que la anterior, pues la real es x2 D D 0,99989999
0,9999
x1 D 1,00010001:

 La diferencia entre las dos formas de proceder anteriores es importante. En la


primera, al usar el multiplicador 104, el efecto de restar 104 veces la ecuación
superior de la ecuación inferior hace que la primera domine la ecuación final.

 Aunque al principio del proceso había dos ecuaciones, o fuentes de información


independientes, actuando de la primera manera, después de la primera
eliminación quedan en esencia dos copias de la ecuación superior pues la
inferior, a efectos prácticos, ha desaparecido. La solución obtenida con esa
primera forma de actuar, como es lógico, no satisface la ecuación inferior.
A este efecto se le conoce como dominancia.
42/128

 El proceso descrito de intercambiar filas 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 coeficiente pivote: si éste es
demasiado pequeño puede amplificar los errores de redondeo a lo largo del
proceso de solución y favorecer la dominancia que se ha descrito.
 Una segunda estrategia de pivotación es la pivotación total. Consiste en buscar
Full Pivoting 43/128
To avoid division by zero, swap the row having the zero pivot
en una etapa i with
noonesólo elrows
of the coeficiente
below it. de mayor valor absoluto en esa columna
sino en todo lo que queda de la submatriz activa: mKaxikn; ij n jakj j.
Rows completed in Rows completed in
forward elimination. forward elimination.

0 Row with zero pivot 0element * Row with zero pivot element

Rows to search for a


more favorable pivot Rows to search for a
* element. * more favorable pivot
element.

Columns to search for a more


favorable pivot element.
To minimize the effect of roundoff, always choose the row that
 La pivotación total es la estrategia óptima para minimizar errores.
puts the largest pivot element on the diagonal, i.e., find ip such
that |aip,i| = max(|ak,i |) for k = i, . . . , n

 Una tercera estrategia de pivotación es la denominada rook pivoting ,


consistente en escoger como pivote cualquiera de los coeficientes de mayor valor
absoluto de las filas de la submatriz activa.
NMM: Solving Systems of Equations page 37

 En la práctica, la pivotación parcial produce buenos resultados y excelentes


NMM: Solving Systems of Equations page 39

prestaciones numéricas por lo que rara vez se usa otra.


44/128

Algoritmo

 Resolución de Ax D b
 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 to01 1
X
n 
x.j / @b.j / a.j; k/  x.k/A a.j; j /
kDj C1
end
 En código de Matlab, para cualquier sistema. 45/128

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 en n-1 etapas
[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
end

>> A=randn(4000);
>> x=ones(4000,1);
>> A=[2 1 0 4;-4 -2 3 -7;4 1 -2 8;0 -3 -12 -1]; >> b=A*x;
>> Gauss(A,b) >> tic,norm(x-Gauss(A,b)),toc

 El sistema del ejemplo y otro: ans =


3.0000
4.0000
ans =
4.2042e-11
Elapsed time is 173.586543 seconds.
-1.0000 >> tic,norm(x-A\b),toc
-2.0000 ans =
6.6135e-11
Elapsed time is 0.827066 seconds.
46/128

 Desde el punto de vista de la codificación del algoritmo, conviene mejorar:

 Que no es realmente necesario intercambiar las filas una vez elegido el


coeficiente pivote de cada etapa; basta con tener constancia en cada
momento dónde están las filas que se intercambian.
 Que 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.
 Lo primero se puede paliar mediante la introducción de vector índice, IPIV, de 47/128

dimensión el número de ecuaciones, inicializado a la posición inicial en el


sistema de cada una de las ecuaciones; es decir,
2 3
1
627
6 7
IPIV D 63 7 :
4 ::: 5
n

 Cuando haya que intercambiar dos filas en un etapa, no se hará intercambiando


físicamente los coeficientes de esas dos filas, sino las correspondientes de IPIV.

 Si en una primera etapa hay se utilizar como pivote el de la cuarta fila,


2 3
4
627
6 7
637
IPIV D 61 7 :
6:7
4 :: 5
n
48/128

 Si al final de un proceso de resolución de un sistema de cinco ecuaciones con


cinco incógnitas, el vector puntero resultase
2 3
4
627
6 7
IPIV D 657 ;
415
3

la matriz A 0 que se obtendría no resultaría ser estrictamente triangular superior.


Tendría la forma que sigue.

 Para obtener Ax D b habría que aplicar esas mismas manipulaciones de filas a


b, o tenerlo en cuenta.
 Para evitar el segundo inconveniente, habría que guardar adecuadamente la 49/128

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:
2 3
2 1 0 4
6 7
6 2 3 12 17
AD6 7:
4 2 1=3 2 1=35
0 0 3=2 1=2

Los multiplicadores eran 2, 2, 1=3 y 3=2.


>> I=eye(4); L1=I; L2=I; L3=I;
>> L1(2:3,1)=[-2 2]; L2(3,2)=1/3; L3(4,3)=3/2; P=I([1 4 3 2],:);
>> U=[2 1 0 4;0 -3 -12 -1;0 0 2 1/3; 0 0 0 1/2];
>> L=L1*P*L2*L3; L*U, A
ans =
2 1 0 4
Ojo, verifiquemos: -4
4
-2
1
3
-2
-7
8
0 -3 -12 -1
A =
2 1 0 4
-4 -2 3 -7
4 1 -2 8
0 -3 -12 -1
50/128

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í.
51/128

 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 2222
:: :: :: :: :: ! :: :: :: :: ::
 0 2222
 0 2222

 El símbolo 2 designa los coeficientes de la matriz que se ven afectados en esa


etapa y que, en principio, son distintos de cero.
52/128

 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 multiplicadores;


.n i /.n i C 1/ multiplicaciones y restas para modificar los coeficientes
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.
 En n 1 etapas de que consta el proceso, se harán 53/128

X
n 1 X
n 1 X
n 1 X
n 1
.n i /.n 2
i C 2/ D .n C 2n/ 1 2.n C 1/ iC i2
i D1 i D1 i D1 i D1
.n 1/n
D .n2 C 2n/.n 1/ 2.n C 1/
2
.n
1/n.2n 1/
C
6
2n3 C 3n2 5n
D
6

multiplicaciones y divisiones y
X
n 1 X
n 1 X
n 1 X
n 1
.n i /.n 2
i C 1/ D .n C n/ 1 .2n C 1/ iC i2
i D1 i D1 iD1 i D1
.n 1/n
D .n2 C n/.n 1/ .2n C 1/
2
.n 1/n.2n 1/
C
6
n3 n
D
3
sumas y restas.
54/128
 El comportamiento de estos valores para n grande tiende a
1 3
n.
3

 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
X
n 1
n2 C n
1C ..n i / C 1/ D
i D1
2

multiplicaciones y divisiones y
X
n 1
n2 n
..n i 1/ C 1/ D
i D1
2

sumas y restas.
55/128

 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 n2 C n n3 C 2n2 n
C D
6 2 3
multiplicaciones y divisiones y
n3 n n2 n 2n3 C 3n2 5n
C D
3 2 6
sumas y restas.

 Para valores de n, estas expresiones tienden a

1 3
n  O.n3=3/
3

lo que refleja la importante magnitud del número de operaciones.


 Aunque la cantidad n3=3 puede parecer muy grande, recordemos las fórmulas de 56/128

Cramer para la solución de sistemas:


2 3
a11    a1i 1 b1 a1iC1    a1n
6 7
det.B i / 6a21    a2i 1 b2 a2i C1    a2n 7
xi D ; donde B i D 6 :: ::: ::: ::: ::: 7 :
det.A/ 4 : 5
an1    ani 1 bn ani C1    ann

 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.
57/128

Método de Gauss-Jordan Wilhelm Jordan, Alemania, 1842-1899.

 Es una extensión natural de la eliminación de Gauss para obtener A 1. Consiste


en hacer cero de cada columna de A no sólo los coeficientes que están debajo
de la diagonal sino también los de arriba.

 Una etapa i de la eliminación de Gauss estaba caracterizada por la matriz

Li D I ˛i e Ti ;

donde 2 3 2 3
0 0
6 :: 7 6 ::: 7
6 : 7 6 7
6 i i 7 6 7
˛i D 6ai C1 i =ai i 7 fila i C 1 y e i D 617 fila i :
6 :: 7 6:7
4 : 5 4 :: 5
i
ani =aii i 0
58/128

 En la etapa i de este método, la matriz de transformación de Gauss-Jordan es

Ti D I ˛i e Ti ;

donde 2 i
3 2 3
a1i =aii i 0
6 ::: 7 6 ::: 7
6 7 6 7
6 i 7 6 7
˛i D 6 1=ai i 7 fila i y e i D 617 fila i :
6 : 7 6:7
4 :: 5 4 :: 5
i
ani =aii i 0

 Si se tiene en cuenta que A 0 D A y A n D I, se tendrá que

Tn 1    T 2T 1A D I;
1
y por tanto A D Tn 1    T 2T 1:

 Las multiplicaciones y divisiones, y sumas y restas, son O.n3=2/ .


Condicionamiento de sistemas 59/128

 En un sentido general se dice que un problema o un algoritmo está bien


condicionado si pequeñas perturbaciones en los parámetros que lo definen
producen pequeños cambios en los resultados.

 Consideremos el ejemplo de una carga sujeta a una superficie firme mediante un


cable o una barra de hierro.
 Aumentando la carga en pequeñas cantidades el cable sufre unos pequeños
estiramientos proporcionales a los incrementos de esa carga.
 Alcanzado el umbral de la zona de fluencia del material del cable,
incrementos muy pequeños de la carga suponen, proporcionalmente, grandes
estiramientos del cable.
 Antes de este umbral, el problema estiramiento/carga se puede decir que
está bien condicionado; en la zona de fluencia el problema está mal
condicionado.
60/128

 El condicionamiento de un sistema de ecuaciones lineales Ax D b lo


caracterizará la sensibilidad del vector solución x a pequeños cambios, tanto en
el término de la derecha b, como en los coeficientes que definen la matriz A.

 Como sabemos, el ordenador o máquina que resuelve Ax D b, al no trabajar


más que con una precisión determinada, resolverá una aproximación

.A C A/x D b C b:

 Si el algoritmo utilizado es estable y el sistema también, el resultado


obtenido debe ser muy parecido al real.
 Si el sistema está mal condicionado, sin embargo, o el algoritmo no es
numéricamente estable, la solución puede diferir sustancialmente de la real.
61/128

 Ejemplo Consideremos los dos sistemas de ecuaciones lineales


    
8 5 x1 3
Ax D b ! D
4 10 x2 14
y     
b xO D bO ! 0;66 3;34 xO 1 4
A D :
1;99 10;01 xO 2 12
La solución de ambos es el vector Œ1; 1T .

 Si introducimos una perturbación b D Œ 0,04; 0,06T en el término


independiente del primer sistema, su solución pasará a ser Œ0,993; 0,9968T .
62/128

 El cambio relativo en la norma euclídea del vector b es


q
kbk2 0;042 C 0;062
D q  0,0050:
kbk2
32 C 142

 Por lo que respecta al vector solución, ese cambio relativo en la norma euclídea
es q
kxk2 .1 0;993/2 C .1 0;9968/2
D q  0;0054:
kxk2 2 2
1 C1

 Como se puede ver, un pequeño cambio en el vector b induce un cambio


pequeño en el vector solución.
63/128

 Introduciendo el mismo cambio bO D Œ 0,04; 0,06T en el término


O su solución pasa a ser Œ6; 0T .
independiente del segundo sistema, b,

 Es decir, un cambio relativo en la norma euclídea de bO igual a


q
0;042 C 0;062
q D 0,0057;
42 C 122
produce un cambio en el vector solución igual a:
q
52 C 12
q D 3,6055:
2 2
1 C1

 Evidentemente, el segundo sistema es mucho más sensible a cambios en el


término independiente que el primero.
64/128

x2 x2

x1 x1

 La figura representa a la izquierda el primer sistema; el segundo a la derecha.


 Como se aprecia las dos rectas que representan las ecuaciones del primer
sistema se cortan nítidamente en el punto Œ1; 1T .
 En el caso del segundo sistema, aun usando una resolución gráfica mayor,
apenas se diferencian las dos rectas y mucho menos dónde se cortan.
65/128

 Estudiemos cómo cuantificar la sensibilidad de Ax D b a pequeñas


modificaciones tanto en el término independiente como en los coeficientes de la
matriz de coeficientes.

 Analicemos en primer lugar el caso de una modificación b del término


independiente.

 Veamos cómo se relaciona la solución de

A.x C x/ D b C b

con la de
Ax D b:

 Designemos por k  k cualquier norma vectorial y su norma matricial consistente


correspondiente.
66/128

 De las igualdades

A.x C x/ D b C b y Ax D b;

se obtiene, restando y despejando x, que

x D A 1b:

 De la definición de norma matricial consistente con una norma vectorial se tiene


que
kxk  kA 1k kbk (1)
y que kbk  kAk kxk o, lo que es lo mismo, que
1 kAk
 : (2)
kxk kbk
 Combinando (1) y (2) se deduce que el error relativo, kxk=kxk, de la solución 67/128

del sistema Ax D b al modificar el término independiente de b a b C b es


kxk kbk
 kAk kA 1k :
kxk kbk

Definición Sea kk una norma matricial consistente con una norma vectorial. Asociado
a esa norma, el número de condición de una matriz invertible A, .A/, es:
.A/ D kAk kA 1 k:

El número de condición de una matriz expresa lo cerca que


esa matriz está de la singularidad

 Las matrices con números de condición pequeños –próximos a la unidad–, se


dicen bien condicionadas; las que tienen números de condición altos, mal
condicionadas.
68/128

 Si los datos de un sistema Ax D b son exactos con la precisión de la máquina,


el error relativo de la solución cumple que
jjx  xjj
 .A/:
jjxjj

 El concepto de número de condición de una matriz se generaliza a cualquier


matriz A (no necesariamente cuadrada) de rango completo mediante la
expresión
.A/ D kAk kA Žk;
donde A Ž es la matriz pseudoinversa de la matriz A.
 El número de condición de una matriz A es un indicador del error de 69/128

amplificación que produce en un vector x el someterlo a la transformación que


define dicha matriz A.

 Concretamente, si la esfera unidad se somete a esa transformación el número de


condición 2 asociado a la norma euclídea será igual al cociente de las longitudes
de los semiejes mayor y menor, 1 y 2, del hiperelipsoide resultante de esa
transformación.

σ2 σ1

x Ax
70/128
 Estudiemos ahora la sensibilidad a pequeñas perturbaciones en los coeficientes
de A. Comparemos la solución de

Ax D b y .A C A/.x C x/ D b:

De la segunda igualdad, como Ax D b, haciendo x D A 1A.x C x/


resulta, despreciando el producto A  x, que

kxk  kA 1k kAk kxk:

 Expresión que también se puede escribir como


kxk 1 kAk
 kA k kAk :
kxk kAk

 Así pues el error relativo que resulta de perturbar ligeramente los coeficientes de
la matriz del sistema Ax D b está también acotado en términos del número de
condición de la matriz A.
Teorema Para toda matriz A de rango completo: 71/128

1. Su número de condición .A/  1.


2. .A/ D .A Ž /.
3. .˛A/ D .A/ para todo escalar ˛ ¤ 0.
n .A/
4. 2 .A/ D , donde n y 1 son, respectivamente, los valores singulares mayor y menor de la
1 .A/
matriz A.
mKax ji .A/j
5. 2 .A/ D i , si A es simétrica.
mKın ji .A/j
i

6. 2 .A T A/ D 22 .A/.
7. Su número 2 .A/ D 1 si la matriz es la identidad o se trata de una matriz ortogonal.
8. Su número de condición 2 .A/ es invariante frente a transformaciones ortogonales.

 Los distintos números de condición de una matriz A 2 Rnn asociados con las
normas matriciales más habituales cumplen que:
2 .A/=n  1 .A/  n 2 .A/I
1 .A/=n  2 .A/  n 1 .A/I
1 .A/=n2  1 .A/  n2 1 .A/:
 Volvamos al ejemplo que utilizábamos para concretar estos conceptos. La 72/128

matriz  
8 5
AD ;
4 10
cuya inversa es  
1 0;10 0;05
A D ;
0;04 0;08
tiene un número de condición 1.A/ D kAk1 kA 1k1 D 15  0,14 D 2,1.

 El de  
bD 0,66 3,34
A ;
1,99 10,01
cuya inversa es  
b 1 250,25 83,5
A D ;
49,75 16,5
b D kAk
es 1.A/ b 1 kA
b 1 k1 D 13,35  300 D 4.005: tres órdenes de magnitud
superior.
73/128

 Un error que se comete con frecuencia es asimilar el concepto de número de


condición de una matriz con el de su determinante y que, en ese sentido, a
mayor determinante, mayor número de condición; nada más lejos de la realidad.

 Ejemplo 1 Sea A una matriz diagonal de orden 100 definida por

a11 D 1I ai i D 0,1 2  i  100:

De esta matriz, kAk2 D 1 y kA 1k2 D 10.

 El número de condición 2.A/ D 10. Por el contrario, su determinante es


det.A/ D 1  .0; 1/99 D 10 99. u
 Ejemplo 2 Sea A una matriz bidiagonal de la forma 74/128

2 3
12
6 12 7
6 7
6 1 2 7
6 7:
6 ::: :::
7
4 1 25
1

Su inversa es 2 3
1 2 4    . 2/n 1

6 1 2 . 2/n 2
7
6 :: 7
6 1 : 7:
4 ::: ::
:
5
1

 Sus diversas normas son kAk1 D kAk1 D 3 y kA 1k1 D kA 1k1 D


D 1 C 2 C 4 C    C 2n 1 D 2n 1.

 Sus números de condición, 1.A/ D 1.A/  3  2n. Su determinante, 1.


75/128

Cálculo del número de condición

 Calcular directamente el número de condición de una matriz es una tarea


numérica muy costosa: O.n3/.

 No obstante, como .A/ es un buen diagnóstico de las implicaciones que el uso


de esa matriz puede comportar en un proceso numérico, se puede realizar una
estimación de su orden de magnitud.

 Existen diversos buenos algoritmos para estimar el número de condición de


una matriz en O.n2/ operaciones.
 En Matlab lo estiman condest y rcond; lo calcula exactamente cond.
 Siempre que se usa el operador “n”, Matlab usa rcond para comprobar la
condición de la matriz afectada.
76/128

Errores en la eliminación de Gauss

 Conviene disponer de otros indicadores, además del número de condición de la


matriz A, para conocer la fuente de los posibles errores en la solución de un
sistema de ecuaciones lineales mediante la eliminación de Gauss.

Definición Sea x a una solución aproximada del sistema lineal Ax D b. El vector


residuo es r D b Ax a . El error hacia atrás de esa solución es la norma del vector residuo,
kb Ax a k, y el error hacia delante kx x a k.
 Si se tiene el sistema 77/128

x1 C x2 D 2
1;0001x1 C x2 D 2;0001
cuya solución es Œ1; 1T , y queremos calcular los errores hacia atras y hacia
delante de la solución aproximada Œ 1; 3;0001, se tendrá que,

 Error hacia atrás:


    
2 1 1 1
b Ax D
2;0001 1;0001 1 3;00001
     :
2 2;0001 0;0001
D D
2;0001 2 0;0001
Si utilizamos la norma infinito, por ejemplo, este error es 0;0001.
 Error hacia delante
     
1 1 2
x xa D D :
1 3;0001 2;0001
Con el mismo tipo de norma, este error es 2;0001.
which is 2.0001. 

78/128
Figure 2.2 helps to clarify how there can be a small backward error and large forward
error at the same time. Even though the “approximate root’’ (−1, 3.0001) is relatively far
from the exact root (1, 1), it nearly lies on both lines. This is possible because the two lines
are almost parallel. If the lines are far from parallel, the forward and backward errors will
 La figura aclara cómo puede haber un error pequeño hacia atrás y uno grande
be closer in magnitude.
hacia delante al mismo tiempo.
y
3

2
x
–1 1

Figure 2.2 The geometry behind Example 2.11. System (2.17) is represented by
the lines x2 = 2 – x1 and x2 = 2.0001 – 1.0001x1 , which intersect at (1,1). The point
( –1, 3.0001) nearly misses lying on both lines and being a solution. The differences
 El punto Œ 1; 3;0001 está relativamente lejos de la solución, pero cerca de
between the lines is exaggerated in the figure—they are actually much closer.

ambas rectas, pues casi son paralelas.


Denote the residual by r = b − Ax . The relative backward error of system Ax = b
a
is defined to be
||r||∞
 El número de condición 1.A/ D 40:004;0001.
||b||∞
,

and the relative forward error is


||x − xa ||∞
.
||x||∞
krk 79/128
 El error relativo hacia atrás del sistema Ax D b es .
kbk
kx xak
El error relativo hacia delante, .
kxk

 El factor de magnificación o amplificación del error para Ax D b es la razón de


los dos:
kx x a k
error relativo hacia delante kx k
factor de amplificación del error D D kr k :
error realtivo hacia atrás
kbk

 Para el sistema anterior, con normas infinito, el error relativo hacia atrás es
0;0001
 0;00005 D 0;005 %
2;0001
y el error relativo hacia adelante
2;0001
D 2;0001  200 %:
1
80/128

 El factor de amplificación del error es


kx x a k1
kx k1
kr k1
D 2;0001=.0;0001=2;0001/ D 40004;0001:
kbk1

 El número de condición de una matriz cuadrada es el factor de magnificación


del error máximo posible para resolver Ax D b sobre todos los posibles b.
81/128

Matlab y los sistemas de ecuaciones lineales

 Repasamos un poco: 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;-4 -2 3 -7;4 1 -2 8;0 -3 -12 -1];
>> b=[2;-9;2;2];
>> A\b
ans =
3.0000
4.0000
-1.0000
-2.0000
82/128

 Utilizando el script Gauss que hemos presentado:


>> Gauss(A,b)
ans =
3.0000
4.0000
-1.0000
-2.0000

 Utilizando otra utilidad de Matlab muy interesante:


>> linsolve(A,b)
ans =
3.0000
4.0000
-1.0000
-2.0000
83/128

Índice
 El problema; consideraciones teóricas

 Eliminación de Gauss

 Condicionamiento de sistemas de ecuaciones lineales

 Errores en la 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


84/128

Factorización LU

 El cálculo de A D LU se conoce como factorización o descomposición LU .


 Si se tiene esta factorización, resolver Ax D b se convierte en dar solución
a LU x D b a través de dos sistemas de ecuaciones triangulares:

Ux 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.
La factorización LU y la eliminación de Gauss 85/128

 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 1 P n 1    L1 P 1 A D U:

 De este proceso, haciendo


P D Pn 1    P1 y
L D P.Ln 1P n 1    L2P 2L1P 1/ 1;
se puede comprobar que se obtiene la factorización
PA D LU :
86/128

Existencia y unicidad de la factorización LU

Teorema Sea A una matriz cuadrada regular de orden n. Existe una matriz de per-
mutació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 coeficientes de la diagonal principal igual a 1.

Lema La matriz A admite una factorización LU si y sólo si se cumple que det.A k / ¤


0; k D 1; : : : ; n:

Teorema Si una matriz regular A de orden n admite una factorización A D LU ,


donde L es una matriz triangular inferior de coeficientes diagonales 1 y U una triangular
superior, esa factorización es única.
87/128

Métodos numéricos directos para la obtención de


factorizaciones LU

Prescott Durand Crout,


Método de Crout. Versión LU 1 EE.UU., 1907-1984.

 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 coeficientes de la
diagonal principal son 1.
 Si la matriz A es de orden 3 y se quiere factorizarla de la forma
a a a  l 0 0  1 u u 
88/128

11 12 13 11 12 13
a21 a22 a23 D l21 l22 0 0 1 u23 ;
a31 a32 a33 l31 l32 l33 0 0 1

usando las reglas de multiplicación de matrices se obtendrá:


1a col. de L: l11 D a11
l21 D a21
l31 D a31 I

l u D a12
2a fila de U : 11 12 ! u1j D a1j = l11 ; j D 2; 3I
l11 u13 D a13

l u C l22 D a22
2a col. de L: 21 12 ! li 2 D ai 2 li1 u12 ; i D 2; 3I
l31 u12 C l32 D a32
2a fila de U : l u C l u
21 13 22 23 D a23 ! u2j D .a2j l21 u1j /= l22 ; j D 3I
X
i 1
3a col. de L: l31 u13 C l32 u23 C l33 D a33 ! li 3 D ai 3 lij uj i ; i D 3:
j D1

 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;
Pk 1
l i k D ai k pD1 lip upk ; i  k;
 Pk 1 
ukj D akj l u
pD1 kp pj lkk ; j > k:
89/128

 El algoritmo de Crout para factorizar una matriz regular A nn D LU 1, es este.

 Factorización A D LU por algoritmo de Crout


for k D 1 to n
for i D k to n
X1
k
l.i; k/ a.i; k/ l.i; p/u.p; k/
pD1
end
for i D k C 1 0
to n 1
X1
k 
u.k; i / @a.k; i / l.k; p/u.p; i /A l.k; k/
pD1
end
end

function [L U]=LUCrout(a)
% Factorización LU por Crout
n=size(a,1); L=zeros(n); U=eye(n);
 En Matlab: for k=1:n
i=k:n; L(i,k)=a(i,k)-L(i,1:k-1)*U(1:k-1,k);
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
 Ahora bien, como apuntábamos en la eliminación de Gauss, se puede aprovechar 90/128

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);
end

10 10 20 10  1 1 2


 Factorizar 20 25 40 da como resultado LU D 20 5 10 .
30 50 61 30 20 1 1

>> A=[10 10 20;20 25 40;30 50 61];


>> [L,U]=Crout_1(A)
L =
10 0 0
20 5 0
 Así: 30 20 1
U =
1 1 2
0 1 0
0 0 1
>>
 Ejemplo Se desea factorizar en una máquina con cuatro dígitos significativos 91/128

2 3
0,001 2,000 3,000
A D 4-1,000 3,712 4,6235
-2,000 1,072 5,643

 Las operaciones en la máquina son:


l11 D 0,001I
l21 D -1,000I
l31 D -2,000I
 
2,000
u12 D f l D 2000I
 0,001 
3,000
u13 D f l D 3000I
0,001
l22 D f l Œ3,712 C .1,000/.2000/ D 2004I
l32 D f l Œ1,072 C .2,000/.2000/ D 4001I
 
4,623 C .1,000/.3000/
u23 D f l D 1,500 y
2004
l33 D f lŒ5,643 C (2,000)(3,000) (4,001)(1,500) D 5,642:

 ¡Ojo! que el cálculo de l33 conlleva la pérdida de tres dígitos por redondeo: el
valor que debería dar es 5,922.
92/128

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.
 Factorización A D LU por Crout con pivotación parcial 93/128

for k D 1 to n
for i D k to n
X1
k
l.i; k/ a.i; k/ l.i; p/u.p; k/
pD1
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 0to n 1
X1
k 
u.k; i / @ a.k; i / l.k; p/u.p; i / A l.k; k/
pD1
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);
end
10 10 20 94/128

 Si se factoriza la matriz 20 25 40 al final de este proceso, el vector IPVT./,


30 50 61
que indica las pivotaciones realizadas, es Œ3, 2, 1T .
>> 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

 La matriz PA realmente factorizada es


30 50 61 30  1 1;6667 2;0333
20 25 40 D 20 8;3333 1 0;0800 :
10 10 20 10 6;6667 0; 2 1

 El algoritmo de Crout requiere O.n3=3/ multiplicaciones/divisiones y


sumas/restas para la factorización de la matriz.
Método de Crout. Versión L1U 95/128

 Si se quiere conseguir la factorización L1U de una matriz 3  3,


a a a   1 0 0 u u u 
11 12 13 11 12 13
a21 a22 a23 D l21 1 0 0 u22 u23 ;
a31 a32 a33 l31 l32 1 0 0 u33
operando:
1a fila de U : u11 D a11
u12 D a12
u13 D a13 I

l u D a21
1a col. de L: 21 11 ! li1 D ai1 =u11 ; i D 2; 3I
l31 u11 D a31

l u C u22 D a22
2a fila de U : 21 12 ! u2j D a2j l21 u1j ; j D 2; 3I
l21 u13 C u32 D a23
2a col. de L: l u C l u
31 12 32 22 D a32 ! li 2 D .ai 2 li1 u12 /=u22 ; i D 3I
jX1
3a fila de U : l31 u13 C l32 u23 C u33 D a33 ! u3j D a3j l3i uij ; j D 3:
i D1

 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;
Pk 1
ukj D akj pD1 lkp upj ;  j  k;
 Pk 1 
l i k D ai k pD1 lip upk ukk ; i > k:
96/128

 El algoritmo de Crout para factorizar una matriz regular A nn en la forma L1U
es el que sigue.

 Factorización A D L1 U por Crout sin pivotación


for k D 1 to n
for j D k to n
X
k 1
u.k; j / a.k; j / l.k; p/u.p; j /
pD1
end
for i D k C 10to n 1
X
k 1 
l.i; k/ @a.i; k/ l.i; p/u.p; k/A u.k; k/
pD1
end
end
97/128

function [L,U]=Croutl1u(a)
% Factorización L1U por Crout
n=size(a,1);
for k=1:n-1
 Su implementación en Matlab: 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);
end

 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
 La versión del algoritmo con pivotación en Matlab es esta. 98/128

>> [L U P]=CroutP1(A);
function [L,U,P]=CroutP1(a) >> L
% Factorización L1U por Crout con pivotación L =
n=size(a,1); p=1:n; 1.0000 0 0
0.6667 1.0000 0
for k=1:n-1 0.3333 0.8000 1.0000
[r,m]=max(abs(a(k:n,k))); >> U
m=m+k-1; U =
if a(m,k)==0, continue, end 30.0000 50.0000 61.0000
0 -8.3333 -0.6667
if k~=m, a([k m],:)=a([m k],:); p([k m])=p([m k]); end 0 0 0.2000
i=k+1:n; >> P*L*U
a(i,k)=a(i,k)/a(k,k); ans =
10 10 20
a(i,i)=a(i,i)-a(i,k)*a(k,i);
20 25 40
end 30 50 61
L=tril(a,-1)+eye(n,n); U=triu(a); P=eye(n); P=P(p,:); >> norm(P*A-L*U)
end ans =
0

>> [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

 Con los recursos de Matlab: P =


0
0
0
1
1
0
1 0 0
>> P*L*U
ans =
10 10 20
20 25 40
30 50 61
>> norm(P*A-L*U)
ans =
0
99/128

Obtención de la matriz inversa a partir de la


factorización LU

 Si se designa por X la matriz inversa de A 2 Rnn, los n vectores columna de


X son los vectores solución de los sistemas Ax i D e i , i D 1; : : : ; n.

 Si suponemos que tenemos la factorización PA D LU , donde P es una matriz


de permutación, para obtener la inversa de A hay que resolver los 2n sistemas
siguientes:
Ly i D Pe i ; U x i D y i ; i D 1; : : : ; n:
Es decir 2n sistemas de ecuaciones lineales con matrices triangulares en los que
sólo cambian los términos independientes.
 Un programa para hacerlo en Matlab podría ser así: 100/128

function InvA = InvLU_1(A)


% Inversa de A a partir de su fact. LU
[m n]=size(A); InvA=zeros(m); b=zeros(m,1);
[L U P] = lu(A);
for i=1:m
b(i) = 1;
InvA(:,i) = U\(L\(P*b));
b(i) = 0;
end
end

>> A=rand(20);
>> max(max(A*InvLU_1(A)-eye(20)))
ans =
2.109423746787797e-015
>> A=rand(1000);
>> tic, max(max(A*InvLU_1(A)-eye(1000))), toc
ans =
5.251354906476990e-013
 Probemos: Elapsed time is 4.017733 seconds.
>> tic, max(max(A*inv(A)-eye(1000))), toc
ans =
5.207778652760453e-013
Elapsed time is 0.447034 seconds.
>> tic, max(max(A*(A\eye(1000))-eye(1000))), toc
ans =
3.934630399271555e-013
Elapsed time is 0.393214 seconds.
Matlab y la factorización LU 101/128

 Para resolver Ax D b con Matlab, usando la factorización LU de A, se


utiliza [L U P]=lu(A) y luego se obtiene la solución del sistema haciendo
x=U\(L\(P*b))
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
102/128

 Otra cuestión a tener muy en cuenta:

% Ensayo tiempos LU: Tiemp_LU.m

A=rand(200,200);

tic
for i=1:1000
b=rand(200,1);
x=A\b;
end
toc

Elapsed time is 0.828548 seconds

tic
[L U P] = lu(A);
for i=1:1000
b=rand(200,1);
x=U\(L\(P*b));
end
toc

Elapsed time is 0.089372 seconds

 Copiar y pegar en el escritorio de Matlab. ¿Por qué ocurre lo que sale?


103/128

Índice
 El problema; consideraciones teóricas

 Eliminación de Gauss

 Condicionamiento de sistemas de ecuaciones lineales

 Errores en la 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


104/128

Solución de sistemas modificados

 Si en Ax D b se modifica el vector b pero no A, no es necesario rehacer la


factorización LU para resolver el nuevo sistema.

 Si se modifica ligeramente la matriz A, por ejemplo el coeficiente (j; k), con lo


que A D A ˛ej e Tk , 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 a la misma de rango
uno del tipo uvT :
T
 1
A uv D
 1
A 1 C A 1 u 1 vT A 1 u vT A 1 :
105/128

 Para resolver el nuevo sistema .A uvT /x D b, usando la fórmula, se


obtendría
T
 1
x D A uv b
 1
D A 1b C A 1u 1 vT A 1u 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.
106/128

 Ejemplo Consideremos la matriz


2 3 2 32 3
2 4 2 100 24 2
A D 4 4 9 35 D 4 2 1 05 40 1 15
2 3 7 111
™™
00 4
L U
a la que se le efectúa una modificación consistente en cambiar el coeficiente
(3,2) de -3 a -1.

 En este caso 2 3 2 3
0 0
u D 4 05 y v D 415 ;
2 0
con lo que la matriz resultante es A uvT .
107/128

 Con la factorización LU de A, se resuelve Az D u y Ay D b, dando


2 3 2 3
3=2 1
z D 4 1=25 y y D 4 25 :
1=2 2

 Por último,
32 2 3 2 3
1 3=2 7
vT y 2
xDyC T
z D 4 25 C 4 1=25 D 4 45 :
1 v z 1 1=2
2 1=2 0
Refinamiento iterativo 108/128

 Formulado en la década de 1960 por James Hardy Wilkinson, del National


Physical Laboratory, Reino Unido, 1919-1986.

 Supongamos que se tiene una solución aproximada x 0 del sistema de ecuaciones


lineales Ax D b y que el residuo r 1 D Ax 0 b no es cero. Resolvamos
exactamente
Az1 D r 1
y hagamos y D x 0 C z1 como una corrección o mejora de la solución. Se
cumple que
Ay D A.x 0 C z1/
D Ax 0 C Az1
D Ax 0 r 1
D b:
La solución x 0 C z1 sería la exacta del sistema original.
Aunque esa solución exacta no lo fuera del todo, si que y sería mejor que x 0.
 Si el nuevo vector de residuos r 2 no cumpliese unos requisitos de precisión, se 109/128

puede resolver el sistema Az2 D r 2 y hacer


y D x 1 C z2 ;
lo que hará que la solución se aproxime un poco más a x que x 0.

 Si es necesario, se calcula un nuevo vector de residuos, r 3 y se continua el


proceso hasta que la solución se aproxime tanto como se quiera a la esperada.

 El vector de residuos debe calcularse con más precisión que la usada para
calcular la solución inicial. Un pequeño código para probar estas ideas:
>> A=hilb(6);
function x = Iter_ref(A,b)
>> x=ones(6,1); b=A*x;
%Refinamiento iterativo con 4 iteraciones.
>> x=Iter_ref(A,b);
[~,n]=size(A); x=inv(A)*b+1e-3*randn(n,1); % ¡OJO! con esto
ans =
[L,U]=lu(A);
0.0019
for k = 1:4
ans =
r = A*x-b;
7.7568e-10
z = -U\(L\r); norm(z)
ans =
x = x+z;
7.0729e-10
end
ans =
end
7.0729e-10
110/128
 Este script de Matlab lleva a cabo el proceso a mano.
% Script_Ref.m - 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=A\b % Solución, evidentemente, =1

B=A; % En B está A perturbada un poquito


B(6,1)=B(6,1)+1.e-06;
pause
x1=B\b % 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

res=b-A*x1; % Hagamos una iteración del Refinamiento iterativo


x1=x1+B\res
norm(xex-x1,2)
pause

res=b-A*x1; % Hagamos otra iteración del Refinamiento iterativo


format long
x1=x1+B\res
norm(xex-x1,2)
pause

res=b-A*x1; % Hagamos otra iteración del Refinamiento iterativo


x1=x1+B\res
norm(xex-x1,2)
111/128

Índice
 El problema; consideraciones teóricas

 Eliminación de Gauss

 Condicionamiento de sistemas de ecuaciones lineales

 Errores en la 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


112/128

Sistemas con matrices especiales


Matrices simétricas
Factorización LDLT

Lema Si todas las submatrices principales de una matriz A 2 Rnn 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 LDM T .

Teorema Si A admite una factorización LDM T y es simétrica, L D M .


113/128

 Para derivar unas fórmulas de recurrencia, a partir de un ejemplo simbólico de


orden 3,
2 3 2 32 32 3
a11 a12 a13 1 0 0 d11 1 l21 l31
4a21 a22 a235 D 4l21 1 05 4 d22 5 40 1 l325 ;
a31 a32 a33 l31 l32 1 d33 0 0 1
operando de acuerdo con las reglas de multiplicación matricial se obtiene que

a11 D d11
a21 D l21d11
a31 D l31d11
2
a22 D l21 d11 C d22
a32 D l31l21d11 C l32d22
2 2
a33 D l31 d11 C l32 d22 C d33:
 Generalizando se obtiene el algoritmo de la tabla. 114/128

 Factorización A D LDLT sin pivotación


for k D 1 to n
X
k 1
d.k/ a.k; k/ a2 .k; p/d.p/
pD1
if d.k/ D 0 then stop
for i D k C 1 0
to n 1
X
k 1 
a.i; k/ @a.i; k/ a.i; p/a.k; p/d.p/A d.k/
pD1
end
end

 Requiere O.n3=6/ multiplicaciones y divisiones y sumas y restas.

 Si no se efectúan pivotaciones, el procedimiento numérico puede fallar por la


posible presencia de coeficientes pivote muy pequeños, o por la acumulación de
errores de redondeo o de cancelación importantes.
Factorización de Cholesky 115/128

 Debida a André Louis Cholesky, Francia, 1875-1918, comandante del ejército


durante la ocupación internacional de Creta en 1906-09.

 Una matriz es definida positiva si para todo x ¤ 0 se cumple que x TAx > 0.
Todos sus valores propios son positivos.

 Las matrices simétricas definidas positivas admiten la descomposición


A D GT G;
donde G es una matriz triangular superior con todos sus coeficientes de la
diagonal principal positivos.
116/128

 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 x T Ax mide la energía presente, o disponible, o cualquier otra
magnitud física que sólo admite cantidades positivas en un entorno determinado.
117/128

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 LDM T , siendo todos los coeficientes 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 coeficientes diagonales positivos, tal que A D
GT G.

Ver AQUÍ el trabajo de Cholesky


118/128
 Procedamos a simular el algoritmo con la descomposición simbólica de una
matriz 3  3.

 Si se desea obtener la factorización


2 3 2 32 3
a11 a12 a13 g11 0 0 g11 g12 g13
4a12 a22 a235 D 4g12 g22 0 5 4 0 g22 g235 ;
a13 a23 a33 g13 g23 g33 0 0 g33
operando de acuerdo con las reglas de multiplicación matricial se obtiene que:
2
a11 D g11
a12 D g11g12
a13 D g11g13
2 2
a22 D g12 C g22
a23 D g12g13 C g22g23
2 2 2
a33 D g13 C g23 C g33 :
119/128

 Generalizando este proceso se obtiene el algoritmo que describe la tabla.

 Factorización de Cholesky A D G T G
for i D 1 to ns
X
i 1
g.i; i/ a.i; i/ g 2 .k; i/
kD1
for j D i C 1 to n
!
X
i 1
g.i; j / a.i; j / g.k; i/g.k; j / g.i; i/
kD1
end
end

 El algoritmo requiere O.n3=6/ operaciones de multiplicación+división y de


suma+resta.
 Este algoritmo en Matlab sería como sigue. 120/128

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);
end

 La factorización de
>> A=[5 1 -2 0;1 2 0 0;-2 0 4 1;0 0 1 3];
>> G=Chols_1(A)
G =
2.2361 0.4472 -0.8944 0

2 3
0 1.3416 0.2981 0
0 0 1.7638 0.5669
51 20 >> G’*G
0 0 0 1.6366

4 12 0 05
41 !
ans =
20 5.0000
1.0000
1.0000
2.0000
-2.0000
0
0
0
00 13 -2.0000 0 4.0000 1.0000
0 0 1.0000 3.0000
>> 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
Matlab y la factorización de Cholesky 121/128

 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 G T G , haciendo x=G\(G’\b)

 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
122/128
Matrices simétricas semidefinidas positivas

 Una matriz A se dice semidefinida positiva, si para todo x ¤ 0, x T Ax  0.

Teorema Si A 2 Rnn es simétrica semidefinida positiva se cumple que:


jaij j  .ai i C ajj /=2
p
jaij j  ai i ajj .i ¤ j /
mKax jaij j D mKax ai i
i;j i
ai i D 0 ) aij D aj i 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 aj k 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.
123/128

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 PAP T .

 La pivotación en Cholesky se lleva adelante así:


En cada etapa k del proceso se determina el coeficiente de mayor valor de la diagonal
principal, mKaxkj n ajj :
 Si no es cero se intercambian las filas/columnas p y k, siempre y cuando k ¤ p;
 si es cero el resto de la matriz por factorizar sería nula y no se haría nada más.
 El algoritmo de Cholesky con pivotación para matrices semidefinidas positivas es: 124/128

function [R, P, I] = Chol_p(A, pivot)


%Chol_p Cholesky factorization with pivoting of a pos. semidefinite matrix.
% [R, P] = Chol_p(A) returns R and a permutation matrix P such that
% R’*R = P’*A*P. Only the upper triangular part of A is used.
% [R, P, I] = Chol_p(A) returns in addition the index I of the last
% positive diagonal element of R. The first I rows of R contain
% the Cholesky factor of A.
% [R, I] = Chol_p(A, 0) forces P = EYE(SIZE(A)), and therefore produces
% the same output as R = CHOL(A) when A is positive definite (to
% within roundoff).
% Reference: G.H. Golub and C.F. Van Loan, Matrix Computations, Second
% Edition, Johns Hopkins University Press, Baltimore, Maryland, 1989.

if nargin == 2, piv = pivot; else piv = 1; end


[~,n] = size(A); pp = 1:n; I = [];
 Factorización de Cholesky A D G T G con pivotación for k = 1:n
for i D 1 to n if piv
d = diag(A); [big, m] = max( d(k:n) ); m = m+k-1;
Determinar índice p 2 fi; i C 1; ng tal que ja.p; p/j D mKaxi j n fja.j; j /jg else
if a.p; p/ > 0 big = A(k,k); m = k;
end
v filas/columnas p y i .
Intercambiar
u if big < 0, I = k; break, end
u iX 1
g.i; i / ta.i; i / g 2 .k; i / % Symmetric row/column permutations.
if m ~= k
kD1 A(:,[k m]) = A(:,[m k]); A([k m],:) = A([m k],:); pp([k m]) = pp([m k]);
for j D i C 1 0
to n 1 end
iX1  if big == 0
g.i; j / @a.i; j / g.k; i /g.k; j /A g.i; i /
if norm(A(k+1:n,k)) ~= 0
I = k; break
kD1 else
end continue
end
end end
end A(k,k) = sqrt( A(k,k) );
if k == n, break, end
A(k, k+1:n) = A(k, k+1:n) / A(k,k);

% For simplicity update the whole of the remaining submatrix (rather


% than just the upper triangle).
j = k+1:n;
A(j,j) = A(j,j) - A(k,j)’*A(k,j);
end
R = triu(A);
if I > 0
if nargout < 3, error(’Matrix must be positive semidefinite.’), end
R = R(1:I-1,:);
end
if piv == 0, P = I; else P = eye(n); P = P(:,pp); end
end
 Si comprobamos con un ejemplo 125/128

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

>> [R,G1]=Chol_p(A)
R =
2.2361 -0.8944 0 0.4472
0 1.7889 0.5590 0.2236
0 0 1.6394 -0.0762
0 0 0 1.3207
G1 =
1 0 0 0
0 0 0 1
0 1 0 0
0 0 1 0
>> G1’\(R\(R’\(G1\b)))
ans =
1.0000
2.0000
3.0000
4.0000
Matrices simétricas indefinidas 126/128

 Una matriz A se dice indefinida si para algunos vectores x ¤ 0 la forma


cuadrática x T Ax es positiva y para otros negativa. Para factorizar este tipo de
matrices se usan pivotaciones por bloques en la diagonal

PAP T D LBLT

donde L es triangular inferior unitaria y B diagonal en bloques 1  1 ó 2  2.

 Los métodos más conocidos1 se citan a continuación.


Método Estrategia Operaciones
T T
Parlett y Reid PAP D LT L O.n3 =3/
Aasen PAP T D LT LT O.n3 =6/
Bunch y Parlett PAP T D LBLT O.n3 =6/ C O.n3 =6/ comparaciones
Bunch y Kaufman PAP T D LBLT O.n3 =6/ C .n2 1/ comparaciones

1
El de James R. Bunch y Linda Kaufman, 1977, en alguna de sus variantes, es el más utilizado
por los códigos profesionales y comerciales para factorizar matrices simétricas.
function [L,D,P,rho] = Diagpiv_1(A)
127/128
%DIAGPIV Factorización de Pivotación diagonal con pivotación parcial.
% Matriz de entrada, A (simétrica). Matrices de salida: permutación P,
% triangular inferior unitaria L, D matriz diagonal en bloques 1x1 o 2x2.
% P*A*P’ = L*D*L’.
% Ref. J.R. Bunch and L. Kaufman, Some stable methods for calculating
% inertia and solving symmetric linear systems, Math. Comp. 1977.
if norm(triu(A,1)’-tril(A,-1),1), error(’La matriz A debe ser simétrica.’), end
n = max(size(A)); k = 1; pp = 1:n;
D = eye(n); L = eye(n);
normA = norm(A(:),inf); rho = normA; if s == 1 % Bloque diagonal 1x1
alpha = (1 + sqrt(17))/8; D(k,k) = A(k,k); i = k+1:n;
while k < n A(i,k) = A(i,k)/A(k,k);
[lambda,r] = max( abs(A(k+1:n,k)) ); L(i,k) = A(i,k);
r = r(1) + k; A(i,i) = A(i,i) - A(i,k) * A(k,i);
if lambda > 0 elseif s == 2 % Bloque diagonal 2x2
swap = 0; E = A(k:k+1,k:k+1);
if abs(A(k,k))>=alpha*lambda D(k:k+1,k:k+1) = E;
s = 1; C = A(k+2:n,k:k+1);
else temp = C/E;
temp = A(k:n,r); temp(r-k+1) = 0; L(k+2:n,k:k+1) = temp;
sigma = norm(temp, inf); A(k+2:n,k+2:n) = A(k+2:n,k+2:n) - temp*C’;
if alpha*lambda^2 <= abs(A(k,k))*sigma end
s = 1; if k+s <= n
elseif abs(A(r,r)) >= alpha*sigma rho = max( rho, max(max(abs(A(k+s:n,k+s:n)))) );
swap = 1; end
m1 = k; m2 = r; else % Nada, elemento en diagonal 0
s = 1; s = 1; D(k,k) = A(k,k);
else end
swap = 1; k = k + s;
m1 = k+1; m2 = r; if k == n, D(n,n) = A(n,n); break, end
s = 2; end
end if nargout>=3, P = eye(n); P = P(pp,:); end
end rho = rho/normA;
% ----- end
if swap
A( [m1, m2],: ) = A( [m2, m1],: ); A( :,[m1, m2] ) = A( :,[m2, m1] );
L( [m1, m2],: ) = L( [m2, m1],: ); L( :,[m1, m2] ) = L( :,[m2, m1] );
pp( [m1, m2] ) = pp( [m2, m1] );
end
% -----
 Con una matriz de Hankel, Hermann Hankel, Alemania, 1839-1873, funciona así: 128/128

>> A = gallery(’ris’,6)
A =
0.0909 0.1111 0.1429 0.2000 0.3333 1.0000
0.1111 0.1429 0.2000 0.3333 1.0000 -1.0000
0.1429 0.2000 0.3333 1.0000 -1.0000 -0.3333
0.2000 0.3333 1.0000 -1.0000 -0.3333 -0.2000
0.3333 1.0000 -1.0000 -0.3333 -0.2000 -0.1429
1.0000 -1.0000 -0.3333 -0.2000 -0.1429 -0.1111
>> cond(A)
ans =
2.2185
>> [L D P rho]=Diagpiv_1(A)
L =
1.0000 0 0 0 0 0 >> eig(A)
0 1.0000 0 0 0 0
-0.1760 0.2160 1.0000 0 0 0 ans =
-0.3143 0.1714 -1.1905 1.0000 0 0 -1.5708
-0.1048 0.3429 0.2646 -0.6667 1.0000 0
-0.9778 0.2000 -0.6173 0.6222 0 1.0000 -1.5705
D = -1.4438
0.0909 1.0000 0 0 0 0
1.0000 -0.1111 0 0 0 0 0.7080
0 0 -0.9216 0 0 0 1.5622
0 0 0 1.7415 0 0
0 0 0 0 -0.8256 1.9264 1.5708
0 0 0 0 1.9264 0.1284
P =
1 0 0 0 0 0
0 0 0 0 0 1
0 0 0 1 0 0
0 0 1 0 0 0
0 0 0 0 1 0
0 1 0 0 0 0
rho =
1.9264
>> max(max(L*D*L’-P*A*P’))
ans =
1.665334536937735e-016