Clase Sisli 12

Universidad Politécnica de Madrid–Escuela Técnica Superior de Ingenieros Industriales Métodos Matemáticos de Especialid

Views 174 Downloads 38 File size 1016KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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

Métodos Matemáticos de Especialidad Ingeniería Eléctrica

Sistemas de ecuaciones lineales Métodos directos de solución José Luis de la Fuente O’Connor [email protected] [email protected]

Clase_sisli_12.pdf 1/120

Índice Cuál es el problema; consideraciones teóricas Eliminación de Gauss

 Pivotación  Algoritmo  Número de operaciones  Método de Gauss-Jordan Matlab y los sistemas de ecuaciones lineales Factorización LU

 Métodos explícitos para su obtención ı Método de Crout ı Método de Doolittle 2/120

 Matlab y la factorización LU Solución de sistemas modificados Refinamiento iterativo Sistemas con matrices especiales

 Matrices simétricas ı Factorización LDLT ı Factorización de Cholesky: matrices simétricas definidas positivas ˘ Matlab y la factorización de Cholesky ı Matrices simétricas semidefinidas positivas ı Matrices simétricas indefinidas

3/120

Cuál es el problema; consideraciones teóricas – Se trata de dar solución a sistemas de ecuaciones del tipo a11x1 C a12x2 C    C a1nxn D b1 a21x1 C a22x2 C    C a2nxn D b2 :: :: :: :: am1x1 C am2x2 C    C amnxn D bm; lo que significa determinar los valores de las variables x1; : : : ; xn que hacen que se cumplan todas las igualdades. – A los números aij se les denomina coeficientes del sistema y a los bi términos independientes. 4/120

– Si se introducen las matrices 2 3 a11 a12    a1n 6 a21 a22    a2n 7 AD6 :: :: 7 4 :: 5; am1 am2    amn

2 3 x1 6x2 7 7 xD6 4 :: 5 xn

2

3

b1 6 b2 7 7 y bD6 4 :: 5 ; xm

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

Ax D b: – En general se supondrá que la matriz de coeficientes A 2 Rmn, x 2 Rn y b 2 Rm.

5/120

– Casos posibles: m=n m=n

·

=

m=n m=n

rango(A) = m = n

·

=

rango(A) = m = n

·

=

m=n

·

=

·

=

·

=

·

=

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

·

=

rango(A) < m = n

rango(A) = m = n

rango(A) < m = n

1a

1b

1a

m>n m>n

1b

·

=

·

=

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

·

=

m>n

m>n m>n m>n

rango(A) = n < m

rango(A) < n < m

2a

2b

2a

2b

m> b=[2;2;-2;-5]; >> A\b ans = 3.0000 4.0000 -1.0000 -2.0000 62/120

– 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 63/120

Índice Cuál es el problema; consideraciones teóricas Eliminación de Gauss Matlab y los sistemas de ecuaciones lineales Factorización LU Solución de sistemas modificados Refinamiento iterativo Sistemas con matrices especiales

64/120

Factorización LU – El cálculo de A D LU se conoce como factorización o descomposición LU . Para resolver un sistema de ecuaciones lineales Ax D b, si A D LU , el problema se convierte en el de resolver LU x D b a través de dos sistemas de ecuaciones triangulares:

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. 65/120

La factorización LU y la eliminación de Gauss – Una forma indirecta de conseguir esta factorización LU es la propia eliminación de Gauss. En efecto, mediante unas permutaciones y unas transformaciones definidas por matrices elementales triangulares inferiores el método conseguía: Ln 1P 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 : 66/120

Existencia y unicidad de la factorización LU Teorema Sea A una matriz cuadrada regular de orden n. Existe una matriz de permutación P y dos matrices, una triangular inferior y otra triangular superior, L y U , respectivamente, tales que

PA D LU : La matriz L tiene todos los coeficientes de la diagonal principal igual a 1 (triangular inferior unitaria).

Lema La matriz A admite una factorización LU si y sólo si se cumple que det.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. 67/120

Métodos numéricos directos para la obtención de factorizaciones LU Método de Crout. Versión LU 1 – Supongamos que se desea obtener la factorización en la forma LU 1, donde U 1 designa una matriz triangular superior en la que todos los coeficientes de la diagonal principal son 1.

68/120

– Si la matriz A es de orden 3 y se quiere factorizarla de la forma 2

a11 a12 4a21 a22 a31 a32

3

2 32 3 a13 l11 0 0 1 u12 u13 a23 5 D 4l21 l22 0 5 40 1 u23 5 ; 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 

2a fila de U :

l11 u12 D a12 l11 u13 D a13

2a col. de L:

l21 u12 C l22 D a22 l31 u12 C l32 D a32

2a fila de U :

l21 u13 C l22 u23 D a23

3a col. de L:

! u1j D a1j = l11 ; j D 2; 3I  ! l i 2 D ai 2

li1 u12 ; i D 2; 3I

! u2j D .a2j

l31 u13 C l32 u23 C l33 D a33

l21 u1j /= l22 ; j D 3I

! li 3 D ai 3

i 1 X

lij uj i ; i D 3:

j D1 69/120

– En general, las fórmulas de recurrencia que se pueden deducir de este proceso, denominado factorización LU de Crout, son: li1 D ai1; u1j D a1j = l11; k 1 X lik D aik lip upk ;

i D 1; 2; : : : ; n; j > 1; i  k;

pD1

0 ukj D @akj

k 1 X

1 lkp upj A

 lkk ;

j > k:

pD1

70/120

– 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 D 1 to n for i D k to n l.i; k/

a.i; k/

k 1 X

l.i; p/u.p; k/

pD1

end for i D k C 1 0 to n u.k; i/

@a.k; i /

k 1 X

1

 l.k; p/u.p; i /A l.k; k/

pD1

end end 71/120

– La versión Matlab de este algoritmo es la que sigue. function [L U]=LUCrout(a) % Factorización LU por Crout n=size(a,1); L=zeros(n); U=eye(n); for k=1:n for i=k:n L(i,k)=a(i,k)-L(i,1:k-1)*U(1:k-1,k); end for i=k+1:n U(k,i)=(a(k,i)-L(k,1:k-1)*U(1:k-1,i))/L(k,k); end end

72/120

– Ahora bien, como apuntábamos en la eliminación de Gauss, se puede aprovechar la estructura de la matriz A para guardar en ella las nuevas matrices L y U . El mismo algoritmo quedaría así.

function [L U]=Crout_1(A) % Factorización LU por Crout n=size(A,1); for k=1:n i=k:n; A(i,k)=A(i,k)-A(i,1:k-1)*A(1:k-1,k); i=k+1:n; A(k,i)=(A(k,i)-A(k,1:k-1)*A(1:k-1,i))/A(k,k); end L=tril(A,0); U=triu(A,1)+eye(n,n);

73/120

– Factorizar

"

10 10 20 20 25 40 30 50 61

#

da como resultado 2 32 3 10 1 1 2 LU D 420 5 5 4 1 05 : 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 30 20 1 U = 1 1 2 0 1 0 0 0 1 >> 74/120

Ejemplo

– Se desea factorizar la matriz 2 3 0,001 2,000 3,000 A D 4-1,000 3,712 4,6235 -2,000 1,072 5,643 en una máquina u ordenador con cuatro dígitos significativos.

75/120

– Las operaciones que se realizan en la máquina son: l11 D 0,001I l21 D -1,000I l31 D -2,000I   2,000 D 2000I u12 D f l 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/ D 1,500 y u23 D f l 2004 l33 D f lŒ5,643 C (2,000)(3,000) (4,001)(1,500) D 5,642:

– Obsérvese que el cálculo de l33 conlleva la pérdida de tres dígitos por redondeo: el valor que debería obtenerse es 5,922. 76/120

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.

77/120

– El algoritmo de Crout con pivotación parcial es el de la tabla for k D 1 to n for i D k to n l.i; k/

a.i; k/

k X1

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 0 to n 1  k X1 @ A u.k; i / a.k; i / l.k; p/u.p; i / 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); 78/120

– Si se factoriza la matriz 2

3

10 10 20 420 25 405 ; 30 50 61 al final 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 >> 79/120

– La matriz PA realmente factorizada es 2 3 2 32 3 30 50 61 30 1 1;6667 2;0333 420 25 405 D 420 8;3333 54 1 0;08005 : 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.

80/120

Método de Crout. Versión L1U – Si se quiere conseguir la factorización L1U de una matriz 3  3, 2 32 3 2 3 a11 a12 a13 u11 u12 u13 1 0 0 4a21 a22 a23 5 D 4l21 1 05 4 0 u22 u23 5 ; a31 a32 a33 l31 l32 1 0 0 u33

operando: 1a fila de U : u11 D a11 u12 D a12 u13 D a13 I 

1a col. de L:

l21 u11 D a21 l31 u11 D a31

2a fila de U :

l21 u12 C u22 D a22 l21 u13 C u32 D a23

2a col. de L:

l31 u12 C l32 u22 D a32

3a fila de U :

! li1 D ai1 =u11 ; i D 2; 3I  ! u2j D a2j ! li 2 D .ai 2

l31 u13 C l32 u23 C u33 D a33

l21 u1j ; j D 2; 3I li1 u12 /=u22 ; i D 3I

! u3j D a3j

j 1 X

l3i uij ; j D 3:

i D1 81/120

– Las fórmulas de recurrencia que se pueden deducir de este proceso son: u1j D a1j ; li1 D ai1=u11; k 1 X ukj D akj lkp upj ;

j D 1; 2; : : : ; n; j > 1; j  k;

pD1

0 lik D @aik

k 1 X

1 lip upk A

 ukk ;

i > k:

pD1

82/120

– El algoritmo de Crout para factorizar una matriz regular A nn en la forma L1U es el que sigue. for k D 1 to n for j D k to n u.k; j /

a.k; j /

k 1 X

l.k; p/u.p; j /

pD1

end for i D k C 10to n l.i; k/

@a.i; k/

k 1 X

1

 l.i; p/u.p; k/A u.k; k/

pD1

end end 83/120

– Su implementación en Matlab:

function [L,U]=Croutl1u(a) % Factorización L1U por Crout n=size(a,1); for k=1:n-1 i=k+1:n; a(i,k)=a(i,k)/a(k,k); a(i,i)=a(i,i)-a(i,k)*a(k,i); end L=tril(a,-1)+eye(n,n); U=triu(a);

El resultado con la matriz precedente es: >> [L U]=Croutl1u(A) L = 1 0 0 2 1 0 3 4 1 U = 10 10 20 0 5 0 0 0 1 >> L*U ans = 10 10 20 20 25 40 30 50 61 84/120

– La versión del algoritmo con pivotación en Matlab es esta. function [L U p]=CroutP1(a) % Factorización L1U por Crout con pivotación n=size(a,1); p=1:n; for k=1:n-1 [r,m]=max(abs(a(k:n,k))); m=m+k-1; if a(m,k)==0, continue, end if k~=m, a([k m],:)=a([m k],:); p([k m])=p([m k]); end i=k+1:n; a(i,k)=a(i,k)/a(k,k); j=k+1:n; a(i,j)=a(i,j)-a(i,k)*a(k,j); end L=tril(a,-1)+eye(n,n); U=triu(a);

85/120

– El resultado con este script para el último ejemplo: >> [L U p]=CroutP1(A) L = 1.0000 0 0.6667 1.0000 0.3333 0.8000 U = 30.0000 50.0000 0 -8.3333 0 0 p = 3 2 1 >> L(p,:)*U ans = 10 10 20 20 25 40 30 50 61

0 0 1.0000 61.0000 -0.6667 0.2000

86/120

– Con los recursos de Matlab: >> [L U P]=lu(A) L = 1.0000 0 0.6667 1.0000 0.3333 0.8000 U = 30.0000 50.0000 0 -8.3333 0 0 P = 0 0 1 0 1 0 1 0 0 >> P’*L*U ans = 10 10 20 20 25 40 30 50 61

0 0 1.0000 61.0000 -0.6667 0.2000

87/120

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 xi 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. 88/120

Matlab y la factorización LU – 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))

89/120

– Apliquemos esta idea a uno de los ejemplos que manejamos: >> A=[2 1 0 4;0 -3 -12 -1;0 -1 -2 0;0 0 3 1]; >> b=[2;2;-2;-5]; >> [L U P]=lu(A) L = 1.0000 0 0 0 0 1.0000 0 0 0 0 1.0000 0 0 0.3333 0.6667 1.0000 U = 2.0000 1.0000 0 4.0000 0 -3.0000 -12.0000 -1.0000 0 0 3.0000 1.0000 0 0 0 -0.3333 P = 1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 >> x=U\(L\(P*b)) x = 3.0000 4.0000 -1.0000 -2.0000 90/120

– 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 tic [L U P] = lu(A); for i=1:1000 b=rand(200,1); x=U\(L\(P*b)); end toc 91/120

Índice Cuál es el problema; consideraciones teóricas Eliminación de Gauss Matlab y los sistemas de ecuaciones lineales Factorización LU Solución de sistemas modificados Refinamiento iterativo Sistemas con matrices especiales

92/120

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 :



A

uv

 1 T

D 

A 1 C A 1u 1

 1 vT A 1u vT A 1: 93/120

– Para resolver el nuevo sistema .A fórmula, se obtendría



x D A

 1 T

b  D A 1b C A 1u 1 uv

uvT /x D b, usando la

 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.

94/120

Ejemplo – Consideremos la matriz 2 2 4 AD4 4 9 2 3

2 3 2 3 1 0 0 2 4 2 35 D 4 2 1 05 40 1 1 1 1 0 0 7

3 2 15 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 0 u D 4 05 2

2 3 0 y v D 415 ; 0

con lo que la matriz resultante es A

uvT . 95/120

– 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, 2

3 2 3 2 3 1 3=2 7 vT y 2 4 1=25 D 4 45 : xDyC z D 4 25 C T 1 v z 1 1=2 2 1=2 0

96/120

Índice Cuál es el problema; consideraciones teóricas Eliminación de Gauss Matlab y los sistemas de ecuaciones lineales Factorización LU Solución de sistemas modificados Refinamiento iterativo Sistemas con matrices especiales

97/120

Refinamiento iterativo – Supongamos que se tiene una solución aproximada, x 0, del sistema de ecuaciones lineales Ax D b, y sea y una corrección o mejora de la misma tal que la solución exacta, x, cumple que x D x 0 C y: Sustituyendo esta expresión en Ax D b se tiene que Ay D b

Ax 0 D r 0;

donde r 0 es el vector de residuos.

98/120

– Si este vector no cumple unos requisitos de precisión que nos interesen, se pude resolver el sistema Ay D r 0 y hacer x 1 D x 0 C y; lo que hará que la solución se aproxime más a x que x 0. – Si es necesario, se calcula un nuevo vector de residuos, r 1 D b Ax 1 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.

99/120

– 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); b=A*ones(n,1); pause x=A\b

% Matriz de Hilbert (muy mal condicionada) % Elegimos término independiente para sol. x=1. % 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); norm(xex-x1,2) norm(xex-x,2) pause

% Calculemos cuánto % Como magnitud calculemos la norma 2 de la desviaci.

res=b-A*x1; x1=x1+B\res norm(xex-x1,2) pause

% Hagamos una iteración del Refinamiento iterativo

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

% Hagamos otra iteración del Refinamiento iterativo

res=b-A*x1; x1=x1+B\res norm(xex-x1,2)

% Hagamos otra iteración del Refinamiento iterativo

100/120

Índice Cuál es el problema; consideraciones teóricas Eliminación de Gauss Matlab y los sistemas de ecuaciones lineales Factorización LU Solución de sistemas modificados Refinamiento iterativo Sistemas con matrices especiales

101/120

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.

102/120

– Para derivar unas fórmulas simbólico de orden 3, 2 3 2 a11 a12 a13 1 4a21 a22 a235 D 4l21 l31 a31 a32 a33

de recurrencia, a partir de un ejemplo 32

32

3

0 0 d11 1 l21 l31 5 40 1 l325 ; 1 05 4 d22 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: 103/120

– Generalizando se obtiene el algoritmo de la tabla. for k D 1 to n

d.k/

a.k; k/

k 1 X

a2 .k; p/d.p/

pD1

if d.k/ D 0 then stop for i D k C 1 0 to n

a.i; k/

@a.i; k/

k 1 X

1 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. 104/120

Factorización de Cholesky – Una matriz es definida positiva si para todo x ¤ 0 se cumple que x T Ax > 0: Todos sus valores propios son positivos. – Las matrices simétricas definidas positivas admiten una descomposición de la forma A D GT G; donde G es una matriz triangular superior. – Esta descomposición fue formulada por André Louis Cholesky (1875-1918), comandante del ejército francés de la época, durante la ocupación internacional de Creta en 1906–09. 105/120

– 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. 106/120

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

107/120

– Procedamos a simular el algoritmo con la descomposición simbólica de una matriz 3  3. – Si se desea obtener la factorización 2 32 3 2 3 a11 a12 a13 g11 0 0 g11 g12 g13 4a12 a22 a235 D 4g12 g22 0 5 4 0 g22 g235 ; g13 g23 g33 a13 a23 a33 0 0 g33 operando de acuerdo con las obtiene que: a11 D a12 D a13 D a22 D a23 D a33 D

reglas de multiplicación matricial se 2 g11 g11g12 g11g13 2 2 g12 C g22 g12g13 C g22g23 2 2 2 g13 C g23 C g33 : 108/120

– Generalizando este proceso se obtiene el algoritmo que describe la tabla. for i D 1 to nv g.i; i /

u u u ta.i; i /

i 1 X

g 2.k; i /

kD1

for j D i C 1 0 to n g.i; j /

B @a.i; j /

i 1 i

1  C g.k; i /g.k; j /A

g.i; i /

kD1

end end

– El algoritmo requiere O.n3=6/ operaciones de multiplicación+división y de suma+resta. 109/120

– Este algoritmo en Matlab sería como sigue. function G=Chols_1(A) % Factorización de Cholesky n=size(A,1); for i=1:n, j=i+1:n; A(i,i)=sqrt(A(i,i)); A(i,j)=A(i,j)/A(i,i); A(j,j)=A(j,j)-A(i,j)’*A(i,j); end G=triu(A);

110/120

– La factorización de

2

5 6 1 6 4 2 0

1 2 0 0

2 0 4 1

3

0 07 7W 15 3

>> A=[5 1 -2 0;1 2 0 0;-2 0 4 1;0 >> G=Chols_1(A) G = 2.2361 0.4472 -0.8944 0 1.3416 0.2981 0 0 1.7638 0 0 0 >> G=chol(A) G = 2.2361 0.4472 -0.8944 0 1.3416 0.2981 0 0 1.7638 0 0 0 >>

0 1 3];

0 0 0.5669 1.6366

0 0 0.5669 1.6366 111/120

Matlab y la factorización de Cholesky – Para resolver un sistema lineal de ecuaciones Ax D b con Matlab utilizando la factorización de Cholesky hay que utilizar la función G=chol(A). – La solución del sistema correspondiente se puede obtener, teniendo en cuenta que se realiza A D G T G , haciendo

x=G\(G’\b)

112/120

– 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 113/120

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: jaij j  .ai i C ajj /=2 p ai i ajj .i ¤ j / jaij 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. 114/120

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 elemento 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 a factorizar sería nula y no se haría nada más. 115/120

– Este es el algoritmo de Cholesky con pivotación para matrices semidefinidas positivas. for i D 1 to n Determinar índice p 2 fi; i C 1; ng tal que ja.p; p/j D maK xi j n fja.j; j /jg if a.p; p/ > 0 Intercambiar sfilas/columnas p y i .

g.i; i /

a.i; i /

i 1 X

g 2 .k; i /

kD1

for j D i C 1 0 to n

g.i; j /

B Ba.i; j / @

i 1 i

1 C g.k; i /g.k; j /C A

 g.i; i /

kD1

end end end

116/120

Matrices simétricas indefinidas – Una matriz A se dice indefinida si para algún vector x ¤ 0 la forma cuadrática x T Ax es positiva y para otros negativa. – Para factorizar este tipo de matrices se recurre a descomposiciones de pivotación diagonal en bloques de la forma PAP T D LBLT donde la matriz L es triangular inferior unitaria y la matriz B es tridiagonal, o diagonal en bloques, con bloques de dimensión 1  1 ó 2  2, bidiagonal en este caso. – Casi todos los códigos modernos utilizan alguna variedad de matriz bidiagonal B en bloques, aunque todavía se usan mucho rutinas que implementan algún método en el que esa matriz es tridiagonal (T ). 117/120

– Los métodos más conocidos se citan a continuación. Método

Estrategia

Operaciones

Parlett y Reid

PAP T D LT LT

Aasen

PAP T D LT LT

O.n3=3/

Bunch y Parlett

PAP T D LBLT O.n3 =6/ C O .n3 =6/ compara.

O.n3=6/

Bunch y Kaufman PAP T D LBLT O.n3=6/ C .n2

1/ compara.

– El del Bunch y Kaufman (1977), en alguna de sus variantes, es el más utilizado y el que emplean los códigos profesionales para factorizar matrices simétricas.

118/120

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 =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 = 3, P = eye(n); P = P(pp,:); end rho = rho/normA;

119/120

– Con una matriz de Hankel, el programa funciona así: >> A = gallery(’ris’,6) A = 0.0909 0.1111 0.1429 0.1111 0.1429 0.2000 0.1429 0.2000 0.3333 0.2000 0.3333 1.0000 0.3333 1.0000 -1.0000 1.0000 -1.0000 -0.3333 >> cond(A) ans = 2.2185 >> [L D P rho]=diagpiv(A) L = 1.0000 0 0 0 1.0000 0 -0.1760 0.2160 1.0000 -0.3143 0.1714 -1.1905 -0.1048 0.3429 0.2646 -0.9778 0.2000 -0.6173 D = 0.0909 1.0000 0 1.0000 -0.1111 0 0 0 -0.9216 0 0 0 0 0 0 0 0 0 P = 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 rho = 1.9264

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

0 0 0 1.0000 -0.6667 0.6222

0 0 0 0 1.0000 0

0 0 0 0 0 1.0000

0 0 0 1.7415 0 0

0 0 0 0 -0.8256 1.9264

0 0 0 0 1.9264 0.1284

0 1 0 0 0 0

>> eig(A) ans = -1.5708 -1.5705 -1.4438 0.7080 1.5622 1.5708 >>

120/120