Sei sulla pagina 1di 6

MARCO TEORICO

En matemáticas, la factorización o descomposición de Cholesky toma su nombre del matemático


André-Louis Cholesky, quien encontró que una matriz simétrica definida positiva puede ser
descompuesta como el producto de una matriz triangular inferior y la traspuesta de una matriz
triangular inferior. La matriz triangular inferior es el triángulo de Cholesky de la matriz original
positiva definida. El resultado de Cholesky ha sido extendido a matrices con entradas complejas. Es
una manera de resolver sistemas de ecuaciones matriciales y se deriva de la factorización LU con
una pequeña variación.

Cualquier matriz cuadrada A con pivotes no nulos puede ser escrita como el producto de una matriz
triangular inferior L y una matriz triangular superior U; esto recibe el nombre de factorización LU.
Sin embargo, si A es simétrica y definida positiva, se pueden escoger los factores tales que U es la
transpuesta de L, y esto se llama descomposición o factorización de Cholesky. Tanto la
descomposición LU como la descomposición de Cholesky son usadas para resolver sistemas de
ecuaciones lineales. Cuando es aplicable, la descomposición de Cholesky es dos veces más eficiente
que la descomposición LU.

Para dar uso a esta descomposición tenemos la matriz de coeficientes de un sistema de ecuaciones,
la llamamos A, comprobamos que esta matriz sea simétrica, porque de lo contrario no es
factorizable por Cholesky. Cuando A es simétrica podemos tratar de factorizarla en la forma 𝐴 =
𝐿∗ 𝐿(𝑡), 𝐿(𝑡) lo cual quiere decir que la matriz L fue transpuesta, cuando la tenemos factorizada ya
podemos resolver el sistema de ecuaciones.

Una condición necesaria y suficiente para que una matriz A admita factorización de Cholesky es que
sea simétrica y definida positiva.

DEFINICIÓN:

En general, si A es ermitaña y definida positiva, entonces A puede ser descompuesta como:

𝐴 = 𝐿𝐿∗
Donde L es una matriz inferior con entradas diagonales estrictamente positivas y L * representa la
conjugada traspuesta de L. Esta es la descomposición de Cholesky.

La descomposición de Cholesky es: dada una matriz Ermitaña positiva definida A, hay una única
matriz triangular inferior L con entradas diagonales estrictamente positivas tales que A = LL*. El
recíproco se tiene trivialmente: si A se puede escribir como LL* para alguna matriz invertible L,
triangular inferior o no, entonces A es Ermitaña y definida positiva.

El requisito de que L tenga entradas diagonales estrictamente positivas puede extenderse para el
caso de la descomposición en el caso de ser semi-definida positiva. La proposición se lee ahora: una
matriz cuadrada A tiene una descomposición de Cholesky si y sólo si A es Ermitaña y semi-definida
positiva. Las factorizaciones de Cholesky para matrices semi-definidas positivas no son únicas en
general.

En el caso especial que A es una matriz positiva definida con entradas reales, L se puede asumir
también con entradas reales. Una matriz D diagonal con entradas positivas en la diagonal (valores
propios de A), es factorizable como 𝐷 = √𝐷√𝐷, donde √𝐷 es una matriz cuya diagonal consiste en
la raíz cuadrada de cada elemento de D, que tomamos como positivos, asi:
𝑡
𝐴 = 𝐿𝑈 = 𝐿𝐷𝑈0 = 𝐿𝐷𝐿𝑡 = 𝐿(√𝐷√𝐷)𝐿𝑡 = (𝐿√𝐷)(√𝐷𝐿𝑡 ) = (𝐿√𝐷)(𝐿√𝐷) = 𝐾𝐾 𝑡

La factorización puede ser calculada directamente a través de las siguientes formulas (en este caso
se realizó la factorización superior 𝐴 = 𝑈 𝑇 ∗ 𝑈):
𝑎𝑖𝑖 −∑𝑖−1 2
𝑘=1 𝑢𝑖𝑘
𝑢𝑖𝑖2 = 𝑎𝑖𝑖 − ∑𝑖−1 2
𝑘=1 𝑢𝑖𝑘 Para los elementos de la diagonal principal, y 𝑢𝑖𝑗 = 𝑢𝑗𝑗
para el resto
de los elementos donde uij son los elementos de la matriz U.

APLICACIÓN:

La descomposición de Cholesky se usa principalmente para hallar la solución numérica de


ecuaciones lineales Ax = b. Si A es simétrica y positiva definida, entonces se puede solucionar Ax =
b calculando primero la descomposición de Cholesky A = LLT, luego resolviendo Ly = b para y, y
finalmente resolviendo LTx = y pa.

MÍNIMOS CUADRADOS LINEALES:

Sistemas de la forma Ax = b con A simétrica y definida positiva aparecen a menudo en la práctica.


Por ejemplo, las ecuaciones normales en problemas de mínimos cuadrados lineales son problemas
de esta forma. Podría ocurrir que la matriz A proviene de un funcional de energía el cual debe ser
positivo bajo consideraciones físicas; esto ocurre frecuentemente en la solución numérica de
ecuaciones diferenciales parciales.

PROBLEMA RESUELTO EN UN CONTEXTO REAL:

 Resuelva el siguiente sistema usando el método de Cholesky:


2𝑥1 − 𝑥2 + 𝑥3 = 0
−𝑥2 + 𝑥3 = 1
𝑥2 − 𝑥3 = −1
Solución:
El sistema se puede escribir en forma matricial.
2 −1 1 𝑥1 0
𝐴𝑥 = 𝑏 Donde 𝐴 = (1 −1 2 ) ; 𝑥 = (𝑥2) ; 𝑏 = ( 1 )
0 1 −1 𝑥3 −1

Observamos que la matriz A no es simétrica, luego debemos pre multiplicar el sistema por
la matriz AT, es decir, (ATA) x= (ATb), obteniendo de esta forma un sistema simétrico definido
positiva, que puede ser resulto usando Cholesky.
2 1 0 2 −1 1 5 −3 4
𝐴′ = 𝐴𝑇 𝐴 = (−1 −1 1 ) (1 −1 2 ) = (−3 3 4)
1 2 −1 0 1 −1 4 −4 6

2 1 0 0 1
𝑏 ′ = 𝐴𝑇 𝑏 = (−1 −1 1 ) ( 1 ) = (−2)
1 2 −1 −1 3
Recordemos que las fórmulas para obtener la factorización de Cholesky son:

𝑙11 = √𝑎11
𝑙𝑖𝑖 = √𝑎11 − ∑𝑖−1 2
𝑘=1 𝑙𝑖𝑘 , 𝑖 = 2, … .. , n

𝑎𝑖1
𝑙𝑖1 =
𝑙11
𝑗−1
𝑎𝑖𝑗 − ∑𝑘=1 𝑙𝑖𝑘 𝑙𝑗𝑘
𝑙𝑖𝑗 = , 𝑗 = 2, , 𝑖 − 1
𝑙𝑗𝑗

𝑙11 0 0
Calculemos la matriz 𝐿 = (𝑙21 𝑙22 0)
𝑙31 𝑙32 𝑙33

𝑙11 = √𝑎11 = √5
𝑎21 −3
𝑙21 = =
𝑙11 √5

2−1 1
2 2 2
9 √6
𝑙22 = √𝑎22 − ∑ 𝑙2𝑘 = √𝑎22 − ∑ 𝑙2𝑘 = √𝑎22 − 𝑙21 = √3 − =
5 √5
𝐾=1 𝑘=1

𝑎31 4
𝑙31 = =
𝑙11 √5
4 −3 12 8
−4 −
𝑙32 =
𝑎32 − ∑2−1
𝑘=1 𝑙3𝑘 𝑙2𝑘
=
𝑎32 − 𝑙31 𝑙21
= √5 √5 = −4 + 5 = − 5 = −8
𝑙22 𝑙22 √6 √6 √6 √30
√5 √5 √5

3−1 2
2 2 2
16 64 2
𝑙33 = √𝑎33 − ∑ 𝑙3𝑘 = √𝑎33 − ∑ 𝑙3𝑘 = √𝑎33 − 𝑙32 = √6 − − =√
5 30 3
𝑘=1 𝑘=1

√5 0 0
𝑙11 0 0 −3 √6
0
∴ 𝐿 = (𝑙21 𝑙22 0)= √5 √5
𝑙31 𝑙32 𝑙32 4 −8 √2
( √5 √30 √3)
Obtenida la descomposicion A’=LLT, el sistema original A’x=b’ se transforma en:
𝑦=𝐿𝑇 𝑥
𝐴′ 𝑥 = 𝑏 ′ ⟹ (𝐿𝑙 𝑇 )𝑥 = 𝑏 ′ ⟹ 𝐿(𝐿𝑇 𝑥) = 𝑏 ′ ⟹ 𝐿𝑦 = 𝑏′
Es decir, debemos resolver en primer lugar el sistema Ly=b’, y luego de calculado el vector y se
resuelve el sistema LTx=y.
Para calcular el vector solución del sistema Ly=b’ se ocupan las formulas:
𝑏′ 1
𝑦1 = 𝑙 1 ; 𝑦𝑘 = 𝑙 [𝑏′𝑘 − ∑𝑘−1
𝑗=1 𝑙𝑘𝑗 𝑦𝑗 ], 𝑘 = 2,3, . . , 𝑛
11 𝑘𝑘

En nuestro ejercicio se tiene:


𝑏1′ 1
𝑦1 = =
𝑙11 √5
2−1
1 1 −3 1 √5 3 √5 7 7√5
𝑦2 = [𝑏′2 − ∑ 𝑙2𝑗 𝑦𝑗 ] = (−2 − )= [−2 + ] = [− ] = −
𝑙22 √6 √5 √5 √6 5 √6 5 5√6
𝑗=1
5
3−1
1 1 4 1 −8 −7√5 1
𝑦3 = [𝑏′ − ∑ 𝑙3𝑗 𝑦𝑗 ] = (3 − − )=
𝑙33 3 √2 √5 √5 √30 5√6 √6
𝑗=1
√3
1
√5
𝑦1
7√5
∴ 𝑦 = (𝑦2) = −
𝑦3 5√6
1
( √6 )
Para resolver el sistema LTx=y se ocupan las siguientes formulas:
𝑦𝑛 1
𝑦𝑛 = ; 𝑥𝑘 = [𝑦 − ∑𝑛𝑗=𝑘+1 𝑙𝑗𝑘 𝑥𝑗 ], 𝑘 = 𝑛 − 1, 𝑛 − 2, . . ,1
𝑙𝑛𝑛 𝑙𝑘𝑘 𝑘

En el ejercicio se tiene
1
𝑦33 √6 1
𝑥3 = = =
𝑙33 √2 2
√3
3
1 1 7√5 −8 1 1
𝑥2 = [𝑦2 − ∑ 𝑙𝑗2 𝑥𝑗 ] = (− − )=−
𝑙22 √6 5√6 √30 2 2
𝑗=2+1
√5
3
1 1 1 −3 −1 1
𝑥1 = [𝑦1 − ∑ 𝑙𝑗1 𝑥𝑗 ] = ( − )=−
𝑙11 √5 √5 √5 2 2
𝑗=1+1
1

2
𝑥1 1
∴ 𝑥 = (𝑥2) = −
𝑥3 2
1
( 2 )
ALGORITMO DEL PROGRAMA:

#include <math.h>
#include <stdio.h>
#include <stdlib.h>

int cholesky(double **orig, int n, double **aug, int mcol,double **chol, double **cholaug, int ofs)
/*
Do the augmented cholesky decomposition as described in FA Graybill
(1976) Theory and Application of the Linear Model. The original matrix
must be symmetric positive definite. The augmentation matrix, or
series of column vectors, are multiplied by C^-t, where C is the
upper triangular cholesky matrix, ie C^t * C = M and M is the original
matrix. Returns with a value of 0 if M is a non-positive definite
matrix. Returns with a value of 1 with succesful completion.

Arguments:

orig (input) double n x n array. The matrix to take the Cholesky


decomposition of.
n (input) integer. Number of rows and columns in orig.
aug (input) double n x mcol array. The matrix for the augmented
part of the decomposition.
mcol (input) integer. Number of columns in aug.
chol (output) double n x n array. Holds the upper triangular matrix
C on output. The lower triangular portion remains unchanged.
This maybe the same as orig, in which case the upper triangular
portion of orig is overwritten.
cholaug (output) double n x mcol array. Holds the product C^-t * aug.
May be the same as aug, in which case aug is over written.
ofs (input) integer. The index of the first element in the matrices.
Normally this is 0, but commonly is 1 (but may be any integer).
*/
{
int i, j, k, l;
int retval = 1;

for (i=ofs; i<n+ofs; i++) {


chol[i][i] = orig[i][i];
for (k=ofs; k<i; k++)
chol[i][i] -= chol[k][i]*chol[k][i];
if (chol[i][i] <= 0) {
fprintf(stderr,"\nERROR: non-positive definite matrix!\n");
printf("\nproblem from %d %f\n",i,chol[i][i]);
retval = 0;
return retval;
}
chol[i][i] = sqrt(chol[i][i]);

/*This portion multiplies the extra matrix by C^-t */


for (l=ofs; l<mcol+ofs; l++) {
cholaug[i][l] = aug[i][l];
for (k=ofs; k<i; k++) {
cholaug[i][l] -= cholaug[k][l]*chol[k][i];
}
cholaug[i][l] /= chol[i][i];
}

for (j=i+1; j<n+ofs; j++) {


chol[i][j] = orig[i][j];
for (k=ofs; k<i; k++)
chol[i][j] -= chol[k][i]*chol[k][j];
chol[i][j] /= chol[i][i];
}
}

return retval;
}

Potrebbero piacerti anche