Sunteți pe pagina 1din 118

h i j

d e f g
a b c
10 8 7
9 4 6 5
1 2 3
1/118
Mtodos Matemticos de Especialidad
Ingeniera Elctrica
Sistemas de ecuaciones lineales
Mtodos directos de solucin
Jos Luis de la Fuente OConnor
jldelafuente@etsii.upm.es
joseluis.delafuente@upm.es
Escuela Tcnica Superior de Ingenieros Industriales
Universidad Politcnica de Madrid
Clase_sisli_11.pdf
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
2/118
ndice
Cul es el problema; consideraciones tericas
Eliminacin de Gauss
v Pivotacin
v Algoritmo
v Nmero de operaciones
v Mtodo de Gauss-Jordan
Matlab y los sistemas de ecuaciones lineales
Factorizacin LU
v Mtodos explcitos para su obtencin
Mtodo de Crout
Mtodo de Doolittle
v Matlab y la factorizacin LU
Solucin de sistemas modicados
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
3/118
Renamiento iterativo
Sistemas con matrices especiales
v Matrices simtricas
Factorizacin LDL
T
Factorizacin de Cholesky: matrices simtricas denidas positivas
Matlab y la factorizacin de Cholesky
Matrices simtricas semidenidas positivas
Matrices simtricas indenidas
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
4/118
Cul es el problema; consideraciones
tericas
Se trata de dar solucin a sistemas de ecuaciones del tipo
a
11
x
1
a
12
x
2
a
1n
x
n
= b
1
a
21
x
1
a
22
x
2
a
2n
x
n
= b
2
:
:
:
:
:
:
:
:
:
:
:
:
a
m1
x
1
a
m2
x
2
a
mn
x
n
= b
m
;
lo que signica determinar los valores de las variables x
1
; : : : ; x
n
que hacen que se cumplan todas las igualdades.
A los nmeros a
ij
se les denomina coecientes del sistema y a
los b
i
trminos independientes.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
5/118
Si se introducen las matrices
A =
_
_
_
_
_
a
11
a
12
a
1n
a
21
a
22
a
2n
:
:
:
:
:
:
:
:
:
a
m1
a
m2
a
mn
_

_
; x =
_
_
_
_
_
x
1
x
2
:
:
:
x
n
_

_
y b =
_
_
_
_
_
b
1
b
2
:
:
:
x
m
_

_
;
el sistema se puede representar de forma ms compacta por
Ax = b:
En general se supondr que la matriz de coecientes A R
mn
,
x R
n
y b R
m
.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
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
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
=
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
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
7/118
Recordemos algunos resultados de la teora de lgebra lineal.
Teorema. (Compatibilidad de un sistema de ecuaciones lineales) La
ecuacin Ax = b admite solucin si y slo si
rango.A[b/ = rango.A/:
Corolario. Si A
mn
tiene rango m, Ax = b siempre tiene solucin.
Teorema. Si x
0
es una solucin de Ax = b, el conjunto de soluciones
de la ecuacin est dado por x
0
ker.A/.
Corolario. Una solucin de Ax = b es nica si y slo si ker.A/ = 0.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
8/118
Teorema. La ecuacin Ax = 0, A
mn
, n > m, siempre tiene una
solucin no trivial.
Teorema. Si A es una matriz cuadrada de orden n, las siguientes
condiciones son equivalentes:
1. rango.A/ = n.
2. ker.A/ = 0.
3. Los vectores columna de A son linealmente independientes.
4. Los vectores la de A son linealmente independientes.
5. Existe una matriz de orden n, A
1
, tal que
A
1
A = AA
1
= I:
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
9/118
Ejemplo
Hay que modelizar el sistema de refrigeracin de una tarjeta
electrnica para poder usar un reloj con la mayor frecuencia de
oscilacin posible.
Simplicadamente, adoptamos el modelo fsico y matemtico de
la gura en el que se esquematiza un tiristor o un transistor
montado en una placa disipadora de calor.
Thermal Model of an IC Package (1)
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:
T
p
T
w
aire
temperatura T
a
c
Q
c

a
Q
3
R
3

a
Q
4
R
4
Q
5
R
5
Q
1
Q
2
R
2
NMM: Solving Systems of Equations page 7
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
10/118
Si el sistema necesita Q
c
watios de potencia, suponiendo un
modelo resistivo del ujo de aire entre los nudos del sistema,
aplicando los principios de conservacin de la energa, se
obtienen las ecuaciones que siguen.
Q
1
=
1
R
1
.T
c
T
p
/ Q
4
=
1
R
4
.T
p
T
a
/ Q
c
= Q
1
Q
3
Q
2
=
1
R
2
.T
p
T
w
/ Q
2
=
1
R
5
.T
w
T
a
/ Q
1
= Q
2
Q
4
Q
3
=
1
R
3
.T
c
T
a
/
Se conoce Q
c
, al igual que T
a
. Las resistencias se pueden
conocer sabiendo el material de las placas y sus propiedades.
Las incgnitas son entonces Q
1
, Q
2
, Q
3
, Q
4
, T
c
, T
p
y T
w
.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
11/118
Como hay siete ecuaciones, reagrupando las ecuaciones para
aislar las incgnitas se llega al siguiente sistema:
R
1
Q
1
T
c
T
9
= 0
R
2
Q
2
T
p
T
w
= 0
R
3
Q
3
T
c
= T
a
R
4
Q
4
T
p
= T
a
R
5
Q
2
T
w
= T
a
Q
1
Q
3
= Q
c
Q
1
Q
2
Q
4
= 0:
En forma matricial, el sistema tiene la siguiente expresin:
_
_
_
_
_
_
_
_
_
R
1
0 0 0 1 1 0
0 R
2
0 0 0 1 1
0 0 R
3
0 1 0 0
0 0 0 R
4
0 1 0
0 R
5
0 0 0 0 1
1 0 1 0 0 0 0
1 1 0 1 0 0 0
_

_
_
_
_
_
_
_
_
_
_
Q
1
Q
2
Q
3
Q
4
T
c
T
p
T
w
_

_
=
_
_
_
_
_
_
_
_
_
0
0
T
a
T
a
T
a
Q
c
0
_

_
Los ujos de calor se obtendrn resolviendo este sistema.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
12/118
En Matlab, si R
1
= 100, R
2
= 200, R
3
= 50, R
4
= 100 y R
5
= 300;
T
a
= 50 y Q
c
= 25, por ejemplo, los datos a suministrarle para
resolver el sistema seran:
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
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
13/118
Interpretemos geomtricamente el problema de resolver en dos
dimensiones un sistema de ecuaciones lineales cualquiera
a
11
x
1
a
12
x
2
= b
1
a
21
x
1
a
22
x
2
= b
2
:
Cada una de las ecuaciones que componen el sistema
representa una recta en el espacio eucldeo de dimensin dos,
segn se describe en la gura.
x
1
x
2
a
21
x
1
+a
22
x
2
= b
2
a
11
x
1
+a
12
x
2
= b
1
La resolucin del sistema tiene como objetivo la bsqueda de
las coordenadas del punto donde se cortan esas dos rectas.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
14/118
En la siguiente gura se pueden ver sistemas donde existen
dicultades para encontrar ese punto de interseccin, al menos
visualmente.
Copyright The McGraw-Hill Companies, Inc. Permission required for reproduction or display.
Fig 9.2
Generalizando a R
n
, la resolucin de un sistema de ecuaciones
lineales se puede interpretar como la bsqueda de las
coordenadas del(os) punto(s) de interseccin de los hiperplanos
asociados a cada una de las ecuaciones.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
15/118
Interpretemos geomtricamente el problema en el subespacio
Im.A/.
Si se escribe el sistema de dos ecuaciones con dos incgnitas
de la forma
_
a
11
a
21
_
x
1

_
a
12
a
22
_
x
2
=
_
b
1
b
2
_
;
el problema es el de descomponer linealmente el vector b en
los vectores columna que denen las dos columnas de la
matriz de coecientes.

b
1
b
2

a
12
a
22

a
11
a
21

h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
16/118
En R
n
, el problema se reere a la bsqueda de la descomposicin
lineal de un vector de n componentes segn n vectores dados: los
que forman la base de Im.A/ que denen los vectores columna
de A.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
17/118
ndice
Cul es el problema; consideraciones tericas
Eliminacin de Gauss
Matlab y los sistemas de ecuaciones lineales
Factorizacin LU
Solucin de sistemas modicados
Renamiento iterativo
Sistemas con matrices especiales
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
18/118
Mtodos directos: Eliminacin de
Gauss
Los mtodos directos resuelven el problema en un nmero de
etapas jo.
De ellos, el mtodo clsico del lgebra lineal numrica para
resolver Ax = b, A R
nn
, x R
n
y b R
n
, 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.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
19/118
La mecnica del mtodo consiste en aplicar al sistema
a
11
x
1
a
12
x
2
a
1n
x
n
= b
1
a
21
x
1
a
22
x
2
a
2n
x
n
= b
2
:
:
:
:
:
:
:
:
:
:
:
:
a
n1
x
1
a
n2
x
2
a
nn
x
n
= b
n
n transformaciones lineales que lo conviertan en otro ms fcil
de resolver.
Concretamente, transformarlo en un sistema triangular
superior de la forma
u
11
x
1
u
12
x
2
u
1n
x
n
= b
/
1
u
22
x
2
u
2n
x
n
= b
/
2
:
:
:
:
:
:
u
nn
x
n
= b
/
n
;
o, escrito en forma matricial,
Ux = b
/
.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
20/118
Un sistema triangular superior, siempre y cuando se satisfagan
las condiciones
u
i i
= 0; i = 1; : : : ; n;
es fcilmente resoluble de manera recurrente mediante las
frmulas
x
k
=
1
u
kk
_
b
/
k

n

i =k1
u
ki
x
i
_
; k = 1; : : : ; n:
Este proceso se conoce como sustitucin inversa.
El mtodo de Gauss comporta pues n etapas con:
a) Multiplicacin de una cualquiera de las ecuaciones del sistema
por un nmero distinto de cero.
b) Sustitucin de una ecuacin cualquiera del sistema por la que
resulta de sumarle otra cualquiera.
c) Permutacin del orden en que aparecen en el sistema dos
ecuaciones cualesquiera del mismo.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
21/118
Ejemplo
Se desea resolver el sistema
2x
1
x
2
4x
4
= 2
4x
1
2x
2
3x
3
7x
4
= 9
4x
1
x
2
2x
3
8x
4
= 2
3x
2
12x
3
x
4
= 2:
Escrito en forma matricial, Ax = b, los distintos componentes
son
A =
_
_
_
_
_
2 1 0 4
4 2 3 7
4 1 2 8
0 3 12 1
_

_
; b =
_
_
_
_
_
2
9
2
2
_

_
y x =
_
_
_
_
_
x
1
x
2
x
3
x
4
_

_
:
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
22/118
Reconguremos inicialmente la matriz A aumentndola una
columna ms: la que dene el trmino independiente b, y
llamemos a la nueva matriz resultante

A; es decir,

A = A[b =
_
_
_
_
_
2 1 0 4 2
4 2 3 7 9
4 1 2 8 2
0 3 12 1 2
_

_
:
Apliquemos ahora la mecnica del mtodo en n = 3 etapas.
Etapa 1
Comprobemos que el elemento a
11
denominado elemento
pivote no es cero.
Si es distinto de cero, eliminemos los elementos de la primera
columna por debajo de ese a
11
.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
23/118
Para ello, denamos para cada la 2; : : : ; n los factores o
multiplicadores
r
i
=
a
i1
a
11
; i = 2; : : : ; n:
A continuacin, restemos de las las i = 2; : : : ; n, la primera
multiplicada por r
i
.
Todos los elementos debajo de la diagonal principal de la
columna 1 se anularn.
Los dems elementos de

A debajo de la primera la tambin
se vern afectados de acuerdo con la siguiente expresin:
a
ij
a
ij
r
i
a
1j
; i = 2; : : : ; n: j = 2; : : : ; n 1:
En el ejemplo que venimos manejando, los multiplicadores son
r
2
= a
21
= a
11
= 4=2 = 2
r
3
= a
31
= a
11
= 4=2 = 2
r
4
= a
41
= a
11
= 0=2 = 0:
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
24/118
Los coecientes de la matriz

A que cambian de valor son:
en la 2
a
la: a
21
0
a
22
a
22
r
2
a
12
= 2 2 1 = 0
a
23
a
23
r
2
a
13
= 3 2 0 = 3
a
24
a
24
r
2
a
14
= 7 2 4 = 1
a
25
a
25
r
2
a
15
= 9 2 2 = 5:
en la 3
a
la: a
31
0
a
32
a
32
r
3
a
12
= 1 2 1 = 1
a
33
a
33
r
3
a
13
= 2 2 0 = 2
a
34
a
34
r
3
a
14
= 8 2 4 = 0
a
35
a
35
r
3
a
15
= 2 2 2 = 2:
en la 4
a
la: a
41
0
a
42
a
42
r
3
a
12
= 3 0 1 = 3
a
43
a
43
r
4
a
13
= 12 0 0 = 12
a
44
a
44
r
4
a
14
= 1 0 4 = 1
a
45
a
45
r
4
a
15
= 2 0 2 = 2:
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
25/118
La nueva matriz

A
1
, resultado de transformar

A, es:

A
1
=
_
_
_
_
_
2 1 0 4 2
0 0 3 1 5
0 1 2 0 2
0 3 12 1 2
_

_
:
Se hubiese obtenido exactamente el mismo resultado de haber
premultiplicado

A por la denominada transformacin de Gauss
que dene la matriz
L
1
=
_
_
_
_
1 0 0 0
2 1 0 0
2 0 1 0
0 0 0 1
_

_
:
Matriz triangular inferior unitaria, denominada matriz de
transformacin de Gauss.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
26/118
La matriz L
1
tambin se puede escribir de la forma L
1
= I e
T
1
,
donde
=
_
_
_
_
_
0
2
2
0
_

_
y e
1
=
_
_
_
_
_
1
0
0
0
_

_
:
En efecto,
L
1

A =
_
_
_
1 0 0 0
2 1 0 0
2 0 1 0
0 0 0 1
_

_
_
_
_
2 1 0 4 2
4 2 3 7 9
4 1 2 8 2
0 3 12 1 2
_

_
=
_
_
_
2 1 0 4 2
0 0 3 1 5
0 1 2 0 2
0 3 12 1 2
_

_
:
En resumen,

A
1
= L
1

A.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
27/118
La inversa de la matriz L
1
, por otro lado, como se puede
comprobar fcilmente, es
L
1
1
=
_
_
_
_
1 0 0 0
2 1 0 0
2 0 1 0
0 0 0 1
_

_
:
Obsrvese que es idntica a L
1
salvo por lo que respecta al signo
de los coecientes de la primera columna debajo de la diagonal
principal.
Etapa 2
Hagamos cero los elementos debajo de la diagonal principal de la
2
a
columna de

A
1
.
Al intentar hacerlo observamos que el elemento pivote a
1
22
es
cero, lo que nos impide proceder como en la etapa anterior.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
28/118
Comprobemos en este caso si algn elemento de la columna 2
por debajo de a
1
22
es distinto de cero:
Si no hay ninguno, esta columna es combinacin lineal de la
primera y por tanto la matriz es singular.
Si hay varios, escojamos el de mayor valor absoluto e
intercambiemos la la 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
la 4. Intercambiamos esa la 4 con la 2. Se obtendr

A
/
1
=
_
_
_
_
_
_
2 1 0 4 2
0 3 12 1 2
0 1 2 0 2
0 0 3 1 5
_

_
:
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
29/118
Esto mismo se obtiene premultiplicando

A
1
por la permutacin
P
1
=
_
_
_
_
1 0 0 0
0 0 0 1
0 0 1 0
0 1 0 0
_

_
:
Recapitulemos: la matriz con la que vamos a operar a
continuacin,

A
/
1
, es:

A
/
1
= P
1
L
1

A:
Apliquemos a continuacin a la columna 2 la misma idea que a
la columna 1 y hagamos cero sus elementos 3 a n.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
30/118
Los nuevos multiplicadores saldrn de la expresin
r
i
=
a
1
/
i 2
a
1
/
22
; i = 3; 4:
Los nuevos valores de los elementos de la matriz

A
/
1
por debajo
de la segunda la se obtendrn aplicando la expresin
a
1
/
ij
a
1
/
ij
r
i
a
1
/
2j
; i = 3; 4: j = 3; : : : ; 5:
Los valores de los multiplicadores para el ejemplo son
r
3
= a
1
/
32
= a
1
/
22
= 1=3 y
r
4
= a
1
/
42
= a
1
/
22
= 0:
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
31/118
Los nuevos elementos de la matriz

A
/
1
resultante:
en la 3
a
la: a
1
/
32
0
a
1
/
33
a
1
/
33
r
3
a
1
/
23
= 2
1
3
12 = 2
a
1
/
34
a
1
/
34
r
3
a
1
/
24
= 0
1
3
1 = 1=3
a
1
/
35
a
1
/
35
r
3
a
1
/
25
= 2
1
3
2 = 8=3:
en la 4
a
la: a
1
/
42
0
a
1
/
43
a
1
/
43
r
4
a
1
/
23
= 3 0 12 = 3
a
1
/
44
a
1
/
44
r
4
a
1
/
24
= 1 0 1 = 1
a
1
/
45
a
1
/
45
r
4
a
1
/
25
= 5 0 2 = 5:
Obsrvese que, al ser r
4
= 0, los clculos para adaptar la cuarta
la podran haberse evitado.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
32/118
La nueva matriz resultado de estas transformaciones es

A
2
=
_
_
_
_
_
2 1 0 4 2
0 3 12 1 2
0 0 2 1=3 8=3
0 0 3 1 5
_

_
;
matriz que se expresa a partir de la inicial como

A
2
= L
2
P
1
L
1

A;
donde L
2
=
_
_
_
1 0 0 0
0 1 0 0
0 1=3 1 0
0 0 0 1
_

_
:
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
33/118
Etapa 3
Para conseguir transformar el sistema original en uno triangular
superior slo resta anular el elemento a
2
43
.
El elemento de la diagonal principal a
2
33
es distinto de cero, luego
procedemos a calcular el multiplicador r
4
:
r
4
= a
2
43
= a
2
33
= 3=2:
Los nuevos valores de los elementos de la matriz

A
2
por debajo
de la tercera la se obtendrn aplicando la expresin
a
2
ij
a
2
ij
r
i
a
2
3j
; i = 4: j = 4; 5:
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
34/118
En concreto, en la cuarta la:
a
2
43
0
a
2
44
a
2
44
r
4
a
2
34
= 1
3
2

1
3
= 1=2
a
2
45
a
2
45
r
4
a
2
35
= 5
3
2

8
3
= 1:
La nueva matriz resultado de estas transformaciones es

A
3
=
_
_
_
_
_
_
2 1 0 4 2
0 3 12 1 2
0 0 2 1=3 8=3
0 0 0 1=2 1
_

_
:
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
35/118
A este resultado se ha llegado despus de aplicar a la matriz
inicial

A una serie de transformaciones; concretamente:

A
3
= L
3
L
2
P
1
L
1

A;
donde
L
3
=
_
_
_
_
_
1 0 0 0
0 1 0 0
0 0 1 0
0 0 3=2 1
_

_
:
En conclusin, la matriz original que dena el sistema, A, se
puede transformar en la triangular superior U aplicndole las
mismas transformaciones que a

A. Es decir,
U = L
3
L
2
P
1
L
1
A:
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
36/118
Como a b tambin se le han efectuado las mismas
transformaciones llegndose a b
/
, resolver el sistema de
ecuaciones original es equivalente a resolver
Ux = b
/
:
En el ejemplo,
_
_
_
_
_
_
2 1 0 4
0 3 12 1
0 0 2 1=3
0 0 0 1=2
_

_
_
_
_
_
_
_
x
1
x
2
x
3
x
4
_

_
=
_
_
_
_
_
_
2
2
8=3
1
_

_
:
La solucin se lleva a cabo mediante sustitucin inversa.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
37/118
x
4
= 2;
sustituyendo en la tercera ecuacin,
x
3
=
8=3 .2/.1=3/
2
= 1;
y, a su vez, hacindolo en la segunda,
x
2
=
2 .1/.2/ .12/.1/
3
= 4:
Por ltimo, sustituyendo los valores de las variables ya calculados
en la primera ecuacin se obtiene
x
1
=
2 4.2/ 1.4/
2
= 3:
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
38/118
La solucin de nuestro ejemplo es pues
_
_
_
_
_
_
_
_
x
1
x
2
x
3
x
4
_

_
=
_
_
_
_
_
_
_
_
3
4
1
2
_

_
:
u
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
39/118
Pivotacin
Veamos qu ocurre si resolvemos con el procedimiento estudiado
_
10
4
1
1 1
_

A
_
x
1
x
2
_

x
=
_
1
2
_

b
;
en una mquina con tres dgitos signicativos que efecte
redondeos.
Aplicando la mecnica apuntada, en la primera etapa se
obtendra una nueva matriz A
1
y un nuevo vector b
1
; son:
A
1
=
_
10
4
1
0 1 10
4
_
y b
1
=
_
1
2 10
4
_
:
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
40/118
El nmero 1 10
4
= 9999, la mquina lo redondeara a 10
4
; de
la misma forma procedera con 2 10
4
. La solucin del sistema
sera
x
2
=
10
4
10
4
= 1
x
1
=
1 x
2
10
4
= 0;
muy distinta de la real 0;99989999; 1;00010001
T
.
La eleccin del pivote busca que los multiplicadores no sean en
magnitud mucho mayores que 1 con el n de tener en cuenta los
errores de redondeo y la estabilidad numrica del procedimiento,
Es por esto por lo que se escoge el de mayor magnitud de
entre los debajo de la diagonal principal.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
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 a
21
es mayor que el del a
11
, se intercambiara la la
1 con la 2, obtenindose
A
/
=
_
1 1
10
4
1
_
y b
/
=
_
2
1
_
:
Continuando con el procedimiento normal, despus de la primera
etapa, se llegar a
A
/
1
=
_
1 1
0 1 10
4
_
y b
/
1
=
_
2
1 2 10
4
_
:
Por redondeos internos, la mquina representara
A
/
1
=
_
1 1
0 1
_
y b
/
1
=
_
2
1
_
:
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
42/118
La la solucin de este sistema de ecuaciones sera
_
x
1
x
2
_
=
_
1
1
_
:
Solucin mucho mejor que la anterior, pues la real es
x
2
=
0,9998
0,9999
= 0,99989999
x
1
= 1,00010001:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
El proceso descrito se denomina pivotacin parcial.
Su por qu radica en la aritmtica de precisin nita 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 pequeo
puede amplicar los errores de redondeo a lo largo del proceso de
solucin.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
43/118
Una segunda estrategia de pivotacin es la conocida como
pivotacin total.
Consiste en buscar en una etapa i no slo el elemento de mayor
valor absoluto en la columna correspondiente, sino en todo lo
que queda por tratar de la matriz: el m ax
i _k_n; i _j _n
[a
kj
[.
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 eect of roundo, always choose the row that
puts the largest pivot element on the diagonal, i.e., nd i
p
such
that |a
i
p
,i
| = max(|a
k,i
|) for k = i, . . . , n
NMM: Solving Systems of Equations page 37
Pivotacin parcial
Full Pivoting
0
*
Rows completed in
forward elimination.
Columns to search for a more
favorable pivot element.
Row with zero pivot element
Rows to search for a
more favorable pivot
element.
*
NMM: Solving Systems of Equations page 39
Pivotacin total
La pivotacin total proporciona la estrategia ptima para
minimizar errores de redondeo.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
44/118
Desde un punto de vista terico, la eliminacin de Gauss con
pivotacin total es, en general, un algoritmo numricamente
estable.
En la prctica, la pivotacin parcial produce buenos resultados y
excelentes prestaciones numricas por lo que rara vez se usa la
total.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
45/118
Algoritmo
+
+ Transformacin de la Matriz Aumentada A[b
+
for i = 1 to n 1
Determinar ndice p {i; i 1; : : : ; n] tal que [a.p; i /[ = m ax
i _j _n
[a.j; i /[.
Intercambiar las p e i .
for j = i 1 to n
= a.j; i /=a.i; i /
for k = i 1 to n 1
a.j; k/ a.j; k/ a.i; k/
end
end
end
+
+ Sustitucin Inversa.
+
for j = n to 1
x.j /
_
_
b.j /
n

k=j 1
a.j; k/ x.k/
_
_
_
a.j; j /
end
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
46/118
En cdigo Matlab para cualquier sistema.
function [x]=Gauss(A,b)
% Solucin de Ax=b mediante eliminacin de Gauss
n=size(A,1); x=zeros(n,1);
for i=1:n-1 % Transformacin 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 % Sustitucin inversa
x(i)=(b(i)-A(i,i+1:n)*x(i+1:n))/A(i,i);
end
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
47/118
De esta codicacin conviene destacar dos elementos
mejorables.
No es realmente necesario intercambiar las las una vez
elegido el elemento pivote de cada etapa; basta con tener
constancia en cada momento dnde estn las las que se
intercambian.
Tal como est estructurado el programa slo se podra
resolver un sistema el denido por el b dado y no, como
es lo ms habitual, distintos sistemas con la misma matriz A
y diversos trminos independientes.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
48/118
El primero se puede paliar mediante la introduccin de vector
ndice, IPIV, de dimensin el nmero de ecuaciones, inicializado a
la posicin inicial en el sistema de cada una de las ecuaciones; es
decir,
IPIV =
_
_
_
_
_
_
_
1
2
3
:
:
:
n
_

_
:
Cuando haya que intercambiar dos las en un etapa, no se har
intercambiando fsicamente los elementos de esas dos las, sino
hacindolo en las correspondientes de IPIV.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
49/118
Si por ejemplo, en la primera etapa hay que utilizar como pivote
un elemento de la cuarta la, una vez efectuado el cambio, el
vector IPIV quedar:
IPIV =
_
_
_
_
_
_
_
_
_
4
2
3
1
:
:
:
n
_

_
:
Si al nal de un proceso de resolucin de un sistema de cinco
ecuaciones con cinco incgnitas, el vector puntero resultase
IPIV =
_
_
_
_
_
_
_
4
2
5
1
3
_

_
;
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
50/118
la matriz A
/
que se obtendra no resultara ser estrictamente
triangular superior.
Tendra la forma que sigue.
Para resolver el sistema que dene Ax = b habra que aplicar
esas mismas manipulaciones de las al vector b o tenerlo en
cuenta.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
51/118
Para evitar el segundo inconveniente, habra que guardar
adecuadamente la informacin que denen los multiplicadores
asociados a cada la de cada etapa.
Los i 1 multiplicadores se pueden guardar en los lugares
vacos o mejor dicho, que se hacen cero que provocan las
transformaciones que denen: en la etapa i , debajo de la
diagonal principal en la columna i .
En el ejemplo, con esta idea, al nal del proceso la matriz A
sera:
A =
_
_
_
_
_
2 1 0 4
2 3 12 1
2 1=3 2 1=3
0 0 3=2 1=2
_

_
:
Los multiplicadores distintos de cero que se han calculado en
todo el proceso son -2, 2, 1/3 y 3/2.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
52/118
Nmero de operaciones del mtodo
Dos de los factores ms importantes que inuyen en las
prestaciones de un algoritmo son:
Su estabilidad numrica ante los diversos errores.
La cantidad de tiempo necesaria para completar los clculos
que conlleva.
Ambos factores dependen del nmero de operaciones aritmticas
necesarias para la aplicacin del algoritmo.
Los tiempos necesarios para realizar en un ordenador la
multiplicacin y la divisin de dos nmeros son aproximadamente
iguales y considerablemente mayores, en trminos relativos, que
los requeridos para realizar la suma o diferencia, que tambin
son muy semejantes entre s.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
53/118
La eliminacin de Gauss para resolver un sistema de ecuaciones
lineales, en la primera etapa, realiza las operaciones que se
representan simblicamente en el esquema que sigue.


:
:
:
:
:
:
:
:
:
:
:
:
:
:
:


0 2 2 2 2
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
0 2 2 2 2
0 2 2 2 2
El smbolo 2 designa los elementos de la matriz que se ven
afectados en esa etapa y que, en principio, son distintos de cero.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
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 clculo de los multiplica-
dores;
.n i /.n i 1/ multiplicaciones y restas para modicar los
elementos de la matriz por debajo de la la
i que no estn en la propia columna i .
En cada etapa se efectan,
.n i / .n i /.n i 1/ = .n i /.n i 2/
multiplicaciones y divisiones y
.n i /.n i 1/
sumas y restas.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
55/118
En n 1 etapas de que consta el proceso, se harn
n1

i =1
.n i /.n i 2/ = .n
2
2n/
n1

i =1
1 2.n 1/
n1

i =1
i
n1

i =1
i
2
= .n
2
2n/.n 1/ 2.n 1/
.n 1/n
2

.n 1/n.2n 1/
6
=
2n
3
3n
2
5n
6
multiplicaciones y divisiones y
n1

i =1
.n i /.n i 1/ = .n
2
n/
n1

i =1
1 .2n 1/
n1

i =1
i
n1

i =1
i
2
= .n
2
n/.n 1/ .2n 1/
.n 1/n
2

.n 1/n.2n 1/
6
=
n
3
n
3
sumas y restas.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
56/118
El comportamiento de estos valores para n grande tiende a
1
3
n
3
.
El proceso de sustitucin inversa requiere .n i / multiplicaciones
y .n i 1/ sumas, para cada trmino del sumatorio, y una resta
y una divisin.
El nmero total de operaciones de todo el proceso es
1
n1

i =1
..n i / 1/ =
n
2
n
2
multiplicaciones y divisiones y
n1

i =1
..n i 1/ 1/ =
n
2
n
2
sumas y restas.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
57/118
Contando la totalidad de la transformacin de la matriz del
sistema y la sustitucin inversa, la eliminacin de Gauss requiere
2n
3
3n
2
5n
6

n
2
n
2
=
n
3
2n
2
n
3
multiplicaciones y divisiones y
n
3
n
3

n
2
n
2
=
2n
3
3n
2
5n
6
sumas y restas.
El comportamiento de estas expresiones para valores grandes de
n es como
1
3
n
3
lo que da idea de la importante magnitud del nmero de
operaciones.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
58/118
Aunque la cantidad n
3
=3 puede parecer muy grande, recordemos
las frmulas de Cramer para la solucin de sistemas:
x
i
=
det.B
i
/
det.A/
; donde B
i
=
_
_
_
_
_
a
11
a
1i 1
b
1
a
1i 1
a
1n
a
21
a
2i 1
b
2
a
2i 1
a
2n
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
a
n1
a
ni 1
b
n
a
ni 1
a
nn
_

_
:
Mediante estas frmulas se requieren:
_
_
_
.n 1/ sumas,
.n 2/ multiplicaciones y
n divisiones.
Para diez ecuaciones con diez incgnitas se requerirn:
_
_
_
740 operaciones utilizando eliminacin de Gauss.
500.000.000 operaciones, aproximadamente, aplicando
las frmulas de Cramer.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
59/118
Mtodo de Gauss-Jordan
Es una extensin natural de la eliminacin de Gauss que consiste
en eliminar de cada columna de la matriz de coecientes del
sistema no slo los elementos no nulos que estn debajo de la
diagonal sino tambin los que estn encima.
Una etapa i de la eliminacin de Gauss estaba caracterizada por
la matriz
L
i
= I
i
e
T
i
;
donde

i
=
_
_
_
_
_
_
_
0
:
:
:
a
i
i 1 i
=a
i
i i
:
:
:
a
i
ni
=a
i
i i
_

_
la i 1 y e
i
=
_
_
_
_
_
_
_
0
:
:
:
1
:
:
:
0
_

_
la i :
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
60/118
En la etapa i de este mtodo, la matriz de transformacin de
Gauss-Jordan es la dada por
T
i
= I
i
e
T
i
;
donde

i
=
_
_
_
_
_
_
_
a
i
1i
=a
i
i i
:
:
:
1=a
i
i i
:
:
:
a
i
ni
=a
i
i i
_

_
la i y e
i
=
_
_
_
_
_
_
_
0
:
:
:
1
:
:
:
0
_

_
la i :
Si se tiene en cuenta que A
0
= A y A
n
= I, se tendr que
T
n1
T
2
T
1
A = I;
por lo que el mtodo obtiene directamente la matriz inversa:
A
1
= T
n1
T
2
T
1
:
Las multiplicaciones y divisiones, y sumas y restas, son O.n
3
=2/ .
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
61/118
ndice
Cul es el problema; consideraciones tericas
Eliminacin de Gauss
Matlab y los sistemas de ecuaciones lineales
Factorizacin LU
Solucin de sistemas modicados
Renamiento iterativo
Sistemas con matrices especiales
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
62/118
Matlab y los sistemas de ecuaciones
lineales
Para resolver un sistema Ax = b con Matlab slo hay que hacer
x = A\b
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];
>> A\b
ans =
3.0000
4.0000
-1.0000
-2.0000
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
63/118
Utilizando el script Gauss que hemos presentado:
>> Gauss(A,b)
ans =
3.0000
4.0000
-1.0000
-2.0000
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
64/118
ndice
Cul es el problema; consideraciones tericas
Eliminacin de Gauss
Matlab y los sistemas de ecuaciones lineales
Factorizacin LU
Solucin de sistemas modicados
Renamiento iterativo
Sistemas con matrices especiales
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
65/118
Factorizacin LU
El clculo de A = LU se conoce como factorizacin o
descomposicin LU.
Para resolver un sistema de ecuaciones lineales Ax = b, si
A = LU, el problema se convierte en el de resolver LUx = b
a travs de dos sistemas de ecuaciones triangulares:
Ux = y y Ly = b:
Esto es muy til cuando se requiere resolver sistemas de
ecuaciones en los que la matriz A es siempre la misma y slo
cambia es el trmino independiente.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
66/118
La factorizacin LU y la eliminacin de Gauss
Una forma indirecta de conseguir esta factorizacin LU es la
propia eliminacin de Gauss.
En efecto, mediante unas permutaciones y unas
transformaciones denidas por matrices elementales
triangulares inferiores el mtodo consegua:
L
n1
P
n1
L
1
P
1
A = U:
De este proceso, haciendo
P = P
n1
P
1
y
L = P.L
n1
P
n1
L
2
P
2
L
1
P
1
/
1
;
se puede comprobar que se obtiene la factorizacin
PA = LU:
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
67/118
Existencia y unicidad de la factorizacin LU
Teorema. Sea A una matriz cuadrada regular de orden n. Existe una
matriz de permutacin P y dos matrices, una triangular inferior y
otra triangular superior, L y U, respectivamente, tales que
PA = LU:
La matriz L tiene todos los elementos de la diagonal principal igual
a 1 (triangular inferior unitaria).
Lema. La matriz A admite una factorizacin LU si y slo si se
cumple que det.A
k
/ = 0; k = 1; : : : ; n:
Teorema. Si una matriz regular A de orden n admite una factoriza-
cin A = LU, donde L es una matriz triangular inferior de elemen-
tos diagonales 1 y U una triangular superior, esa factorizacin es
nica.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
68/118
Mtodos numricos directos para la
obtencin de factorizaciones LU
Mtodo de Crout. Versin LU
1
Supongamos que se desea obtener la factorizacin 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.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
69/118
Si la matriz A es de orden 3 y se quiere factorizarla de la forma
_
_
a
11
a
12
a
13
a
21
a
22
a
23
a
31
a
32
a
33
_
_
=
_
_
l
11
0 0
l
21
l
22
0
l
31
l
32
l
33
_
_
_
_
1 u
12
u
13
0 1 u
23
0 0 1
_
_
;
usando las reglas de multiplicacin de matrices se obtendr:
1
a
col. de L: l
11
= a
11
l
21
= a
21
l
31
= a
31
:
2
a
la de U:
l
11
u
12
= a
12
l
11
u
13
= a
13
_
u
1j
= a
1j
=l
11
; j = 2; 3:
2
a
col. de L:
l
21
u
12
l
22
= a
22
l
31
u
12
l
32
= a
32
_
l
i 2
= a
i 2
l
i1
u
12
; i = 2; 3:
2
a
la de U: l
21
u
13
l
22
u
23
= a
23
u
2j
= .a
2j
l
21
u
1j
/=l
22
; j = 3:
3
a
col. de L: l
31
u
13
l
32
u
23
l
33
= a
33
l
i 3
= a
i 3

i 1

j =1
l
ij
u
ji
; i = 3:
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
70/118
En general, las frmulas de recurrencia que se pueden deducir de
este proceso, denominado factorizacin LU de Crout, son:
l
i1
= a
i1
; i = 1; 2; : : : ; n;
u
1j
= a
1j
=l
11
; j > 1;
l
i k
= a
i k

k1

p=1
l
ip
u
pk
; i _ k;
u
kj
=
_
_
a
kj

k1

p=1
l
kp
u
pj
_
_
_
l
kk
; j > k:
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
71/118
Plasmadas en el algoritmo de Crout para factorizar una matriz
regular A
nn
en la forma LU
1
resulta el de la tabla.
for k = 1 to n
for i = k to n
l.i; k/ a.i; k/
k1

p=1
l.i; p/u.p; k/
end
for i = k 1 to n
u.k; i /
_
_
a.k; i /
k1

p=1
l.k; p/u.p; i /
_
_
_
l.k; k/
end
end
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
72/118
La versin Matlab de este algoritmo es la que sigue.
function [L U]=LUCrout(a)
% Factorizacin 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
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
73/118
Ahora bien, como apuntbamos en la eliminacin de Gauss, se
puede aprovechar la estructura de la matriz A para guardar en
ella las nuevas matrices L y U. El mismo algoritmo quedara as.
function [L U]=Crout_1(A)
% Factorizacin 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);
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
74/118
Factorizar
_
_
10 10 20
20 25 40
30 50 61
_
_
da como resultado
LU =
_
_
10
20 5
30 20 1
_
_
_
_
1 1 2
1 0
1
_
_
:
>> A=[10 10 20;20 25 40;30 50 61];
>> [L,U]=Crout_1(A)
L =
10 0 0
20 5 0
30 20 1
U =
1 1 2
0 1 0
0 0 1
>>
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
75/118
Ejemplo
Se desea factorizar la matriz
A =
_
_
0,001 2,000 3,000
-1,000 3,712 4,623
-2,000 1,072 5,643
_
_
en una mquina u ordenador con cuatro dgitos signicativos.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
76/118
Las operaciones que se realizan en la mquina son:
l
11
= 0,001:
l
21
= -1,000:
l
31
= -2,000:
u
12
= f l
_
2,000
0,001
_
= 2000:
u
13
= f l
_
3,000
0,001
_
= 3000:
l
22
= f l 3,712 .1,000/.2000/ = 2004:
l
32
= f l 1,072 .2,000/.2000/ = 4001:
u
23
= f l
_
4,623 .1,000/.3000/
2004
_
= 1,500 y
l
33
= f l5,643 (2,000)(3,000) (4,001)(1,500) = 5,642:
Obsrvese que el clculo de l
33
conlleva la prdida de tres dgitos
por redondeo: el valor que debera obtenerse es 5,922.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
77/118
Pivotacin
El ejemplo pone de maniesto que, aunque se sepa que una
matriz no es singular y que su factorizacin LU existe
tericamente, los errores de redondeo que se pueden producir al
trabajar en una mquina pueden dar al traste con el resultado.
Es aconsejable realizar pivotacin. Al nal de un proceso con
pivotacin se obtendra
PA = LU
es decir, no la factorizacin LU de la matriz original sino de PA.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
78/118
El algoritmo de Crout con pivotacin parcial es el de la tabla
for k = 1 to n
for i = k to n
l.i; k/ a.i; k/
k1

pD1
l.i; p/u.p; k/
end
Determinar ndice p {k; k 1; : : : ; n] tal que [a.p; i /[ = m ax
ijn
[a.j; i /[.
Intercambiar las p y k.
for i = k 1 to n
u.k; i /
_
_
a.k; i /
k1

pD1
l.k; p/u.p; i /
_
_
_
l.k; k/
end
end
function [L U p]=CroutP(a)
% Factorizacin LU por Crout con pivotacin
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);
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
79/118
Si se factoriza la matriz
_
_
10 10 20
20 25 40
30 50 61
_
_
;
al nal de este proceso, el vector IPVT./, 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
>>
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
80/118
La matriz PA realmente factorizada es
_
_
_
30 50 61
20 25 40
10 10 20
_

_
=
_
_
_
30
20 8;3333
10 6;6667 0; 2
_

_
_
_
_
1 1;6667 2;0333
1 0;0800
1
_

_
:
El algoritmo de Crout requiere O.n
3
=3/
multiplicaciones/divisiones y sumas/restas para la factorizacin
de la matriz.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
81/118
Mtodo de Crout. Versin L
1
U
Si se quiere conseguir la factorizacin L
1
U de una matriz 3 3,
_
_
a
11
a
12
a
13
a
21
a
22
a
23
a
31
a
32
a
33
_
_
=
_
_
1 0 0
l
21
1 0
l
31
l
32
1
_
_
_
_
u
11
u
12
u
13
0 u
22
u
23
0 0 u
33
_
_
;
operando:
1
a
la de U: u
11
= a
11
u
12
= a
12
u
13
= a
13
:
1
a
col. de L:
l
21
u
11
= a
21
l
31
u
11
= a
31
_
l
i1
= a
i1
=u
11
; i = 2; 3:
2
a
la de U:
l
21
u
12
u
22
= a
22
l
21
u
13
u
32
= a
23
_
u
2j
= a
2j
l
21
u
1j
; j = 2; 3:
2
a
col. de L: l
31
u
12
l
32
u
22
= a
32
l
i 2
= .a
i 2
l
i1
u
12
/=u
22
; i = 3:
3
a
la de U: l
31
u
13
l
32
u
23
u
33
= a
33
u
3j
= a
3j

j 1

i =1
l
3i
u
ij
; j = 3:
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
82/118
Las frmulas de recurrencia que se pueden deducir de este
proceso son:
u
1j
= a
1j
; j = 1; 2; : : : ; n;
l
i1
= a
i1
=u
11
; j > 1;
u
kj
= a
kj

k1

p=1
l
kp
u
pj
; j _ k;
l
i k
=
_
_
a
i k

k1

p=1
l
ip
u
pk
_
_
_
u
kk
; i > k:
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
83/118
El algoritmo de Crout para factorizar una matriz regular A
nn
en
la forma L
1
U es el que sigue.
for k = 1 to n
for j = k to n
u.k; j / a.k; j /
k1

p=1
l.k; p/u.p; j /
end
for i = k 1 to n
l.i; k/
_
_
a.i; k/
k1

p=1
l.i; p/u.p; k/
_
_
_
u.k; k/
end
end
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
84/118
Su implementacin en Matlab:
function [L,U]=Croutl1u(a)
% Factorizacin 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
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
85/118
La versin del algoritmo con pivotacin en Matlab es esta.
function [L U p]=CroutP1(a)
% Factorizacin L1U por Crout con pivotacin
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);
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
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
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
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
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
88/118
Matlab y la factorizacin LU
Como acabamos de ver, para resolver un sistema lineal de
ecuaciones Ax = b con Matlab, mediante la factorizacin LU,
slo hay que utilizar [L U P]=lu(A), obtenindose la solucin
del sistema original haciendo
x=U\(L\(P*b))
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
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
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
90/118
ndice
Cul es el problema; consideraciones tericas
Eliminacin de Gauss
Matlab y los sistemas de ecuaciones lineales
Factorizacin LU
Solucin de sistemas modicados
Renamiento iterativo
Sistemas con matrices especiales
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
91/118
Solucin de sistemas modicados
Si en un sistema Ax = b se modica el vector b pero no la
matriz, no es necesario rehacer la factorizacin LU para resolver
el nuevo sistema.
Si se modica ligeramente la matriz A, por ejemplo el elemento
(j; k), con lo que A = A e
j
e
T
k
, puede que no sea necesario
tampoco recalcular la factorizacin en su totalidad.
La frmula de Sherman-Morrison-Woodbury proporciona la
inversa de una matriz en trminos de los vectores de una
modicacin de rango uno uv
T
a la misma:
_
A uv
T
_
1
=
A
1
A
1
u
_
1 v
T
A
1
u
_
1
v
T
A
1
:
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
92/118
Para resolver el nuevo sistema .A uv
T
/x = b, usando la
frmula, se obtendra
x =
_
A uv
T
_
1
b
= A
1
b A
1
u
_
1 v
T
A
1
u
_
1
v
T
A
1
b;
operacin que podra hacerse por partes:
1. Resolviendo Az = u, obteniendo z.
2. Resolviendo Ay = b, obteniendo y.
3. Calculando x = y ..v
T
y/=.1 v
T
z//z.
Como A ya est factorizada, este procedimiento requiere solo
sustituciones inversas y productos interiores; es decir O.n
2
/
operaciones frente a las O.n
3
=3/ de la factorizacin.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
93/118
Ejemplo
Consideremos la matriz
A =
_
_
2 4 2
4 9 3
2 3 7
_
_
=
_
_
1 0 0
2 1 0
1 1 1
_
_

L
_
_
2 4 2
0 1 1
0 0 4
_
_

U
a la que se le efecta una modicacin consistente en cambiar el
coeciente (3,2) por un -1.
En este caso
u =
_
_
0
0
2
_
_
y v =
_
_
0
1
0
_
_
;
con lo que la matriz resultante es A uv
T
.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
94/118
Con la factorizacin LU de A, se resuelve Az = u y Ay = b,
dando
z =
_
_
3=2
1=2
1=2
_
_
y y =
_
_
1
2
2
_
_
:
Por ltimo,
x = y
v
T
y
1 v
T
z
z =
_
_
1
2
2
_
_

2
1 1=2
_
_
3=2
1=2
1=2
_
_
=
_
_
7
4
0
_
_
:
u
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
95/118
ndice
Cul es el problema; consideraciones tericas
Eliminacin de Gauss
Matlab y los sistemas de ecuaciones lineales
Factorizacin LU
Solucin de sistemas modicados
Renamiento iterativo
Sistemas con matrices especiales
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
96/118
Renamiento iterativo
Si se tiene una solucin x
0
del sistema de ecuaciones lineales
Ax = b, el vector de residuos es
r
0
= b Ax
0
:
Si este vector no cumple unos requisitos de precisin que nos
interesen, se pude resolver el sistema Az
0
= r
0
y hacer
x
1
= x
0
z
0
:
Esta nueva solucin ser mejor que la anterior pues
Ax
1
= A.x
0
z
0
/ = Ax
0
Az
0
= .b r
0
/ r
0
= b:
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
97/118
Esta forma de actuar sugiere seguir iterando hasta conseguir que
la solucin se aproxime tanto como se quiera a la esperada,
teniendo en cuenta, claro, los estndares de precisin de la
mquina 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 trmino independiente para sol. x=1.
pause
x=A\b % Solucin, 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 solucin; difiere bastante
pause
xex=ones(n,1); % Calculemos cunto
norm(xex-x1,2) % Como magnitud calculemos la norma 2 de la desviaci.
norm(xex-x,2)
pause
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
98/118
res=b-A*x1; % Hagamos una iteracin del Refinamiento iterativo
x1=x1+B\res
norm(xex-x1,2)
pause
res=b-A*x1; % Hagamos otra iteracin del Refinamiento iterativo
format long
x1=x1+B\res
norm(xex-x1,2)
pause
res=b-A*x1; % Hagamos otra iteracin del Refinamiento iterativo
x1=x1+B\res
norm(xex-x1,2)
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
99/118
ndice
Cul es el problema; consideraciones tericas
Eliminacin de Gauss
Matlab y los sistemas de ecuaciones lineales
Factorizacin LU
Solucin de sistemas modicados
Renamiento iterativo
Sistemas con matrices especiales
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
100/118
Sistemas con matrices especiales
Matrices simtricas
Factorizacin LDL
T
Lema. Si todas las submatrices principales de una matriz A R
nn
son regulares, existen dos matrices triangulares inferiores unitarias
nicas, L y M, y otra diagonal tambin nica, D = diag.d
1
; : : : ; d
n
/,
tales que A = LDM
T
.
Teorema. Si A admite una factorizacin LDM
T
y es simtrica, L =
M.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
101/118
Para derivar unas frmulas de recurrencia, a partir de un ejemplo
simblico de orden 3,
_
_
a
11
a
12
a
13
a
21
a
22
a
23
a
31
a
32
a
33
_
_
=
_
_
1 0 0
l
21
1 0
l
31
l
32
1
_
_
_
_
d
11
d
22
d
33
_
_
_
_
1 l
21
l
31
0 1 l
32
0 0 1
_
_
;
operando de acuerdo con las reglas de multiplicacin matricial se
obtiene que
a
11
= d
11
a
21
= l
21
d
11
a
31
= l
31
d
11
a
22
= l
2
21
d
11
d
22
a
32
= l
31
l
21
d
11
l
32
d
22
a
33
= l
2
31
d
11
l
2
32
d
22
d
33
:
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
102/118
Generalizando se obtiene el algoritmo de la tabla.
for k = 1 to n
d.k/ a.k; k/
k1

p=1
a
2
.k; p/d.p/
if d.k/ = 0 then stop
for i = k 1 to n
a.i; k/
_
_
a.i; k/
k1

p=1
a.i; p/a.k; p/d.p/
_
_
_
d.k/
end
end
Requiere O.n
3
=6/ multiplicaciones y divisiones y sumas y restas.
Si no se efectan pivotaciones, los mtodos expuestos hasta
ahora para factorizar una matriz pueden fallar por la posible
presencia de elementos pivote muy pequeos, o por la
acumulacin de errores de redondeo importantes.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
103/118
Factorizacin de Cholesky
Recordemos que una matriz se dice denida positiva, si para
todo x = 0 se cumple que
x
T
Ax > 0:
Todos los valores propios de una matriz denida positiva son
positivos.
Las matrices simtricas denidas positivas admiten una
descomposicin de la forma
A = G
T
G;
donde G es una matriz triangular superior.
Esta descomposicin fue formulada por Andr Louis Cholesky
(1875-1918), comandante del ejrcito francs de la poca,
durante la ocupacin internacional de Creta en 190609.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
104/118
Las matrices simtricas denidas positivas se presentan
habitualmente en:
Problemas relacionados con el anlisis de sistemas elctricos
de generacin y transporte de energa.
Ajuste de funciones por mnimos cuadrados.
Anlisis de estructuras mecnicas.
En muchos procedimientos de optimizacin lineal y no lineal.
En general, en todas aquellas aplicaciones donde al modelizar un
sistema, la expresin x
T
Ax mide la energa presente o disponible
en un entorno determinado: esta energa habitualmente es una
cantidad positiva.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
105/118
Lema. Las submatrices principales de una matriz denida positiva
son denidas positivas.
Teorema. Si A es una matriz denida positiva de orden n, tiene una
descomposicin de la forma LDM
T
, siendo todos los elementos de
la matriz diagonal D positivos.
Teorema. Si A es una matriz simtrica denida positiva de orden
n, existe una nica matriz triangular superior, G, con todos sus
elementos diagonales positivos, tal que A = G
T
G.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
106/118
Para determinar el algoritmo de descomposicin de Cholesky de
una forma directa, procedamos a simularlo con la
descomposicin simblica de una matriz 3 3.
Si se desea obtener la factorizacin
_
_
a
11
a
12
a
13
a
12
a
22
a
23
a
13
a
23
a
33
_
_
=
_
_
g
11
0 0
g
12
g
22
0
g
13
g
23
g
33
_
_
_
_
g
11
g
12
g
13
0 g
22
g
23
0 0 g
33
_
_
;
operando de acuerdo con las reglas de multiplicacin matricial se
obtiene que:
a
11
= g
2
11
a
12
= g
11
g
12
a
13
= g
11
g
13
a
22
= g
2
12
g
2
22
a
23
= g
12
g
13
g
22
g
23
a
33
= g
2
13
g
2
23
g
2
33
:
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
107/118
Generalizando este proceso se obtiene el algoritmo que describe
la tabla.
for i = 1 to n
g.i; i /

_
a.i; i /
i 1

k=1
g
2
.k; i /
for j = i 1 to n
g.i; j /
_
_
_
a.i; j /
i 1
i
k=1
g.k; i /g.k; j /
_
_
_
_
g.i; i /
end
end
El algoritmo requiere O.n
3
=6/ operaciones de
multiplicacin+divisin y de suma+resta.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
108/118
Este algoritmo en Matlab sera como sigue.
function G=Chols_1(A)
% Factorizacin 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);
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
109/118
La factorizacin de
_
_
_
_
_
5 1 2 0
1 2 0 0
2 0 4 1
0 0 1 3
_

_
:
>> 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
0 1.3416 0.2981 0
0 0 1.7638 0.5669
0 0 0 1.6366
>> 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
>>
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
110/118
Matlab y la factorizacin de Cholesky
Para resolver un sistema lineal de ecuaciones Ax = b con
Matlab utilizando la factorizacin de Cholesky hay que utilizar
la funcin G=chol(A).
La solucin del sistema correspondiente se puede obtener,
teniendo en cuenta que se realiza A = G
T
G, haciendo
x=G\(G\b)
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
111/118
Para utilizar esta operacin con un ejemplo de los que estamos
manejando, habra 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
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
112/118
Matrices simtricas semidenidas positivas
Una matriz A se dice semidenida positiva, si para todo x = 0,
x
T
Ax _ 0.
Teorema. Si A R
nn
es simtrica semidenida positiva, se cumple
[a
ij
[ _ .a
i i
a
jj
/=2
[a
ij
[ _
_
a
i i
a
jj
.i = j /
m ax
i;j
[a
ij
[ = m ax
i
a
i i
a
i i
= 0 = a
ij
= a
ji
= 0; j = 1; : : : ; n:
Si el algoritmo de Cholesky se aplica a una matriz semidenida
positiva, y en un paso a
kk
es cero, entonces a
jk
= 0; j = k; : : : n,
por lo que no habra que hacer nada ms en la columna k.
En la prctica, los errores de redondeo internos impiden los
ceros exactos por lo que se recurre a la pivotacin.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
113/118
Pivotacin
Para mantener la simetra, las pivotaciones han de ser
simtricas: si se intercambian dos las, tambin hay que
intercambiar las columnas simtricas: A PAP
T
.
La pivotacin en Cholesky se lleva adelante as:
En cada etapa k del proceso se determina el ele-
mento de mayor valor de la diagonal principal,
m ax
k_j _n
a
jj
:
Si no es cero, se intercambian las -
las/columnas p y k, siempre y cuando k = p;
si es cero, el resto de la matriz a factorizar
sera nula y no se hara nada ms.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
114/118
Este es el algoritmo de Cholesky con pivotacin para matrices
semidenidas positivas.
for i = 1 to n
Determinar ndice p {i; i 1; n] tal que [a.p; p/[ = m ax
i _j _n
{[a.j; j /[]
if a.p; p/ > 0
Intercambiar las/columnas p y i .
g.i; i /
_
a.i; i /
i 1

k=1
g
2
.k; i /
for j = i 1 to n
g.i; j /
_
_
_
_
a.i; j /
i 1
i
k=1
g.k; i /g.k; j /
_
_
_
_
_
g.i; i /
end
end
end
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
115/118
Matrices simtricas indenidas
Una matriz A se dice indenida si para algn vector x = 0 la
forma cuadrtica x
T
Ax es positiva y para otros negativa.
Para factorizar este tipo de matrices se recurre a
descomposiciones de pivotacin diagonal en bloques de la forma
PAP
T
= LBL
T
donde la matriz L es triangular inferior unitaria y la matriz B es
tridiagonal, o diagonal en bloques, con bloques de dimensin
1 1 2 2, bidiagonal en este caso.
Casi todos los cdigos modernos utilizan alguna variedad de
matriz bidiagonal B en bloques, aunque todava se usan mucho
rutinas que implementan algn mtodo en el que esa matriz es
tridiagonal (T ).
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
116/118
Los mtodos ms conocidos se citan a continuacin.
Mtodo Estrategia Operaciones
Parlett y Reid PAP
T
= LT L
T
O.n
3
=3/
Aasen PAP
T
= LT L
T
O.n
3
=6/
Bunch y Parlett PAP
T
= LBL
T
O.n
3
=6/ O.n
3
=6/ compara.
Bunch y Kaufman PAP
T
= LBL
T
O.n
3
=6/ .n
2
1/ compara.
El del Bunch y Kaufman (1977), en alguna de sus variantes, es
el ms utilizado y el que emplean los cdigos profesionales para
factorizar matrices simtricas.
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
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;
h i j
d e f g
a b c
10 8 7
9 4 6 5
1 2 3
118/118
Con una matriz de Hankel, el programa funciona as:
>> 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(A)
L =
1.0000 0 0 0 0 0
0 1.0000 0 0 0 0
-0.1760 0.2160 1.0000 0 0 0
-0.3143 0.1714 -1.1905 1.0000 0 0
-0.1048 0.3429 0.2646 -0.6667 1.0000 0
-0.9778 0.2000 -0.6173 0.6222 0 1.0000
D =
0.0909 1.0000 0 0 0 0
1.0000 -0.1111 0 0 0 0
0 0 -0.9216 0 0 0
0 0 0 1.7415 0 0
0 0 0 0 -0.8256 1.9264
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
>> eig(A)
ans =
-1.5708
-1.5705
-1.4438
0.7080
1.5622
1.5708
>>

S-ar putea să vă placă și