Descomposición de Cholesky
En álgebra lineal, la descomposición de Cholesky o factorización de Cholesky (pronunciado shə-LES-kee) es una descomposición de una matriz definida positiva hermitiana en el producto de una matriz triangular inferior y su transpuesta conjugada, que es útil para soluciones numéricas eficientes, por ejemplo, simulaciones de Monte Carlo. Fue descubierto por André-Louis Cholesky para matrices reales y publicado póstumamente en 1924. Cuando es aplicable, la descomposición de Cholesky es aproximadamente el doble de eficiente que la descomposición LU para resolver sistemas de ecuaciones lineales.
Declaración
La descomposición de Cholesky de una matriz definida positiva hermítica A, es una descomposición de la forma
- A=LLAlternativa Alternativa ,{displaystyle mathbf {A} =mathbf {LL}
donde L es una matriz triangular inferior con entradas diagonales reales y positivas, y L* denota la transpuesta conjugada de L. Cada matriz definida positiva hermitiana (y, por lo tanto, también cada matriz definida positiva simétrica de valor real) tiene una descomposición de Cholesky única.
Lo contrario es trivial: si A se puede escribir como LL* para alguna L invertible, triangular inferior o de otro tipo, entonces A es hermítica y definida positiva.
Cuando A es una matriz real (por lo tanto simétrica definida positiva), la factorización se puede escribir
- A=LLT,{displaystyle mathbf {A} =mathbf {LL} {Mathsf {T}}}
donde L es una matriz triangular inferior real con entradas diagonales positivas.
Matrices semidefinidas positivas
Si una matriz hermitiana A es solo semidefinida positiva, en lugar de definida positiva, entonces todavía tiene una descomposición de la forma A = LL* donde las entradas diagonales de L pueden ser cero. La descomposición no necesita ser única, por ejemplo:
- [0001]=LLAlternativa Alternativa ,L=[00# Silencio Silencio pecado Silencio Silencio ].{displaystyle {begin{bmatrix}0 âTMa âTMa âTMa}=mathbf {L} mathbf {L} ^{*},quad quad mathbf {L} ={begin{bmatrix}0\cos theta &sin theta end{bmatrix}}}
Sin embargo, si el rango de A es r, entonces hay un L triangular inferior único con exactamente r elementos diagonales positivos y columnas n−r que contienen todos ceros.
Alternativamente, la descomposición se puede hacer única cuando se fija una opción pivotante. Formalmente, si A es un n × n matriz semidefinida positiva de rango r, entonces hay al menos una matriz de permutación P tales que P A PT tiene una descomposición única de la forma P A PT = L* con L=[L10L20]{displaystyle mathbf {L} ={begin{bmatrix}mathbf {L} {cHFF} {cH00}\cH00}\cH00}\\cH00} {L} {c} {cH00}} {cH00}}}} {cH}}} {cH}}} {cH}}}}}} {cH}}}} {cH}}}}}}}}}}}}, Donde L1 es un r × r matriz triangular inferior con diagonal positivo.
Descomposición de LDL
Una variante estrechamente relacionada de la descomposición clásica de Cholesky es la descomposición de LDL,
- A=LDLAlternativa Alternativa ,{displaystyle mathbf {A} =mathbf {LDL}
donde L es una matriz triangular (unitriangular) de unidad inferior y D es una matriz diagonal. Es decir, se requiere que los elementos diagonales de L sean 1 a costa de introducir una matriz diagonal adicional D en la descomposición. La principal ventaja es que la descomposición de LDL se puede calcular y utilizar esencialmente con los mismos algoritmos, pero evita la extracción de raíces cuadradas.
Por esta razón, la descomposición de LDL a menudo se denomina descomposición de Cholesky sin raíces cuadradas. Para matrices reales, la factorización tiene la forma A = LDLT y a menudo se denomina como descomposición de LDLT (o descomposición de LDLT, o LDL′). Es una reminiscencia de la descomposición propia de matrices simétricas reales, A = QΛQT, pero es bastante diferente en la práctica porque Λ y D no son matrices similares.
La descomposición LDL está relacionada con la descomposición clásica de Cholesky de la forma LL* de la siguiente manera:
- A=LDLAlternativa Alternativa =LD1/2()D1/2)Alternativa Alternativa LAlternativa Alternativa =LD1/2()LD1/2)Alternativa Alternativa .{displaystyle mathbf {A} =mathbf {LDL}=mathbf {L} mathbf {fnMicrosoft Sans Serif} {fnMicrosoft Sans Serif} {fnMicrosoft Sans Serif} {L} mathbf {D} {fn}left(mathbf {L} mathbf {D} {fnMicrosoft Sans Serif}
Por el contrario, dada la descomposición clásica de Cholesky A=CCAlternativa Alternativa {displaystyle mathbf {A} =mathbf {C} mathbf {C} de una matriz definida positiva, si S es una matriz diagonal que contiene la diagonal principal C{displaystyle mathbf {C}, entonces un A puede ser descompuesto LDLAlternativa Alternativa {displaystyle mathbf {L} mathbf {D} mathbf {L} ^{*} Donde
- L=CS− − 1{displaystyle mathbf {L} =mathbf {C} mathbf {S} {fn} (esto reescala cada columna para hacer elementos diagonales 1),
- D=S2.{displaystyle mathbf {} =mathbf {S} }
Si A es positivo definido entonces los elementos diagonales de D son todos positivos. Para semidefinido positivo A, un LDLAlternativa Alternativa {displaystyle mathbf {L} mathbf {D} mathbf {L} ^{*} descomposición existe donde el número de elementos no cero en la diagonal D es exactamente el rango de A. Algunas matrices indefinidas para las cuales no existe descomposición de Cholesky tienen una descomposición LDL con entradas negativas D: basta que el primero n−1 principales menores de edad A son no fijos.
Ejemplo
Aquí está la descomposición de Cholesky de una matriz real simétrica:
- ()412− − 161237− − 43− − 16− − 4398)=()200610− − 853)()26− − 8015003).{} {} {} {}m}}m}m}cH0} {cH0}ccH0}cH0} {cH0}cH0}cH0}cH0}cH0}cH0}cH00}cH0}cH0}cH00}cH00}cH0}cH00}cH00}cH00}cH00}cH00}cH00}cH00}cH00}cH00}cH00}cH00}cH00}cH00}cH00}cH00}cH00}cH00}cH00}cH00}cH00}cH00}cH00}cH00}cH00}cH00}cH00}cH00}cH00}cH00}
Y aquí está su descomposición de LDLT:
- ()412− − 161237− − 43− − 16− − 4398)=()100310− − 451)()400010009)()13− − 4015001).{0}{0}{0} {0} {0} {0}{0} {0}} {0}} {0}} {0}} {0}} {0} {0} {0}}} {0}} {0}} {0}}}} {0}} {}}} {0} {}}}} {0}} {0} {0}}}} {}}}}}}}}}}}}} {}}}} {}}}}}}}}}} {}}}}}}}} {}}}}} {}}}}}} {}}}}}}}}}} {}}}}}}}}}}}}}}}}}} {}}}} {}}}}}}}}}}}}}}}}}}}}}}}}}}}} {}}}}}}}}}}}}}}}}} {}}}}}}}}}}}}}}}}}}}}}}}}
Aplicaciones
La descomposición de Cholesky se utiliza principalmente para la solución numérica de ecuaciones lineales Ax=b{displaystyle mathbf {Ax} =mathbf {b}. Si A es simétrico y positivo definido, entonces podemos resolver Ax=b{displaystyle mathbf {Ax} =mathbf {b} por primera vez computar la descomposición de Cholesky A=LLAlternativa Alternativa {displaystyle mathbf {A} =mathbf {LL} {{mathrm {*}}, luego resolver LSí.=b{displaystyle mathbf {Ly} =mathbf {b} para Sí. por sustitución anticipada, y finalmente solución LAlternativa Alternativa x=Sí.{displaystyle mathbf {*}x} = 'Mathbf {y} para x por sustitución trasera.
Una manera alternativa de eliminar la toma de raíces cuadradas LLAlternativa Alternativa {displaystyle mathbf {LL} {mathrm {}} descomposición es computar la descomposición LDL A=LDLAlternativa Alternativa {displaystyle mathbf {A} =mathbf {LDL}, luego resolver LSí.=b{displaystyle mathbf {Ly} =mathbf {b} para Sí., y finalmente resolver DLAlternativa Alternativa x=Sí.{fnMicrosoft} = 'Mathbf {y}.
Para sistemas lineales que se pueden poner en forma simétrica, la descomposición de Cholesky (o su variante LDL) es el método de elección, para una eficiencia superior y estabilidad numérica. En comparación con la descomposición LU, es aproximadamente el doble de eficiente.
Mínimos cuadrados lineales
Los sistemas de la forma Ax = b con A simétrica y definida positiva surgen con bastante frecuencia en las aplicaciones. Por ejemplo, las ecuaciones normales en problemas de mínimos cuadrados lineales tienen esta forma. También puede ocurrir que la matriz A provenga de un funcional energético, que debe ser positivo por consideraciones físicas; esto sucede con frecuencia en la solución numérica de ecuaciones diferenciales parciales.
Optimización no lineal
Las funciones multivariadas no lineales pueden minimizarse sobre sus parámetros utilizando variantes del método de Newton llamado quasi-Newton métodos. En la iteración k, los pasos de búsqueda en una dirección pk{displaystyle P_{k} definida por la resolución Bkpk=− − gk{displaystyle B_{k}p_{k}=-g_{k} para pk{displaystyle P_{k}, donde pk{displaystyle P_{k} es la dirección paso, gk{displaystyle g_{k} es el gradiente, y Bk{displaystyle B_{k} es una aproximación a la matriz hesiana formada por la repetición de actualizaciones de rango-1 en cada iteración. Dos fórmulas de actualización bien conocidas se llaman Davidon–Fletcher–Powell (DFP) y Broyden–Fletcher–Goldfarb–Shanno (BFGS). La pérdida de la condición positiva-definida a través del error redondeado se evita si en lugar de actualizar una aproximación a la inversa del Hessian, se actualiza la descomposición Cholesky de una aproximación de la matriz hesiana misma .
Simulación de Montecarlo
La descomposición de Cholesky se usa comúnmente en el método Monte Carlo para simular sistemas con múltiples variables correlacionadas. La matriz de covarianza se descompone para dar el L triangular inferior. Aplicar esto a un vector de muestras no correlacionadas u produce un vector de muestra Lu con las propiedades de covarianza del sistema que se está modelando.
El siguiente ejemplo simplificado muestra la economía que se obtiene de la descomposición de Cholesky: supongamos que el objetivo es generar dos variables normales correlativas x1{displaystyle x_{1}} y x2{displaystyle x_{2} con coeficiente de correlación dado *** *** {displaystyle rho }. Para lograrlo, es necesario primero generar dos variables aleatorias de Gauss z1{displaystyle z_{1} y z2{displaystyle z_{2}, que se puede hacer utilizando una transformación Box-Muller. Dado el coeficiente de correlación requerido *** *** {displaystyle rho }, las variables normales correlativas se pueden obtener a través de las transformaciones x1=z1{displaystyle x_{1}=z_{1}} y x2=*** *** z1+1− − *** *** 2z2{textstyle x_{2}=rho z_{1}+{sqrt {1-rho..
Filtros Kalman
Los filtros de Kalman sin perfume suelen utilizar la descomposición de Cholesky para elegir un conjunto de los denominados puntos sigma. El filtro de Kalman rastrea el estado promedio de un sistema como un vector x de longitud N y la covarianza como un N × N matriz P. La matriz P siempre es semidefinida positiva y se puede descomponer en LLT. Las columnas de L se pueden sumar y restar de la media x para formar un conjunto de 2N vectores llamados puntos sigma. Estos puntos sigma capturan completamente la media y la covarianza del estado del sistema.
Inversión de matriz
La inversa explícita de una matriz hermitiana puede ser computada por la descomposición de Cholesky, de una manera similar a resolver sistemas lineales, utilizando n3{displaystyle n^{3} operaciones12n3{displaystyle {tfrac {2}n} {3} multiplicaciones). Toda la inversión puede incluso ser realizada eficientemente en el lugar.
Una matriz no hermitiana B también se puede invertir usando la siguiente identidad, donde BB* siempre será hermitiana:
- B− − 1=BAlternativa Alternativa ()BBAlternativa Alternativa )− − 1.{displaystyle mathbf {B}=mathbf {B}(mathbf {} {} {} {cH00}} {cH0}} {cH0}}
Cálculo
Existen varios métodos para calcular la descomposición de Cholesky. La complejidad computacional de los algoritmos de uso común es O(n3) en general. Los algoritmos que se describen a continuación involucran aproximadamente (1/3)n3 FLOP (n3/6 multiplicaciones y el mismo número de adiciones) para sabores reales y (4/3)n3 FLOP para sabores complejos, donde n es el tamaño del matriz A. Por lo tanto, tienen la mitad del costo de la descomposición LU, que usa 2n3/3 FLOP (ver Trefethen y Bau 1997).
Cuál de los siguientes algoritmos es más rápido depende de los detalles de la implementación. Generalmente, el primer algoritmo será un poco más lento porque accede a los datos de una manera menos regular.
El algoritmo de Cholesky
El algoritmo Cholesky, utilizado para calcular la matriz de descomposición L, es una versión modificada de la eliminación gaussiana.
El algoritmo recursivo comienza con i:= 1 y
- A1):= A.
En el paso i, la matriz A(i) tiene la siguiente forma:
- A()i)=()Ii− − 1000ai,ibiAlternativa Alternativa 0biB()i)),{displaystyle mathbf {A} {i)}={begin{pmatrix}mathbf {I} {I} {I}{i-1} âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa - ¿Qué?
donde Ii−1 denota la matriz identidad de dimensión i − 1.
Si ahora definimos la matriz Li por
- Li:=()Ii− − 1000ai,i001ai,ibiIn− − i),{displaystyle mathbf {L} _{i}:={begin{pmatrix}mathbf {I}{i-1} âTMa âTMa âTMa âTMa} {a_{i,i}} âTMa âTMa âTMa Mathbf {b}{i} {I} _{n-i}end{pmatrix}}}
(tenga en cuenta que ai,i > 0 desde A( i) es positivo definido), entonces podemos escribir A(i) como
- A()i)=LiA()i+1)LiAlternativa Alternativa {displaystyle mathbf {A} {i)}=mathbf {L} _{i}mathbf {A} {i+1)}mathbf {fnMicrosoft Sans Serif}
dónde
- A()i+1)=()Ii− − 10001000B()i)− − 1ai,ibibiAlternativa Alternativa ).{displaystyle mathbf {A} {i+1)}={begin{pmatrix}mathbf {I} _{i-1} tendrían un problema0} Mathbf {b} ¿Qué?
Tenga en cuenta que bi b*i es un producto externo, por lo que este algoritmo se denomina versión del producto externo en (Golub & Van Loan).
Repetimos esto para i del 1 al n. Después de n pasos, obtenemos A(n+1) = I. Por lo tanto, la matriz triangular inferior L que estamos buscando se calcula como
- L:=L1L2...... Ln.{displaystyle mathbf {L}:=mathbf {L} _{1}mathbf {L} _{2}dots mathbf {L} _{n}.}
Algoritmos Cholesky-Banachiewicz y Cholesky-Crout
Si escribimos la ecuación
- A=LLT=()L1100L21L220L31L32L33)()L11L21L310L22L3200L33)=()L112()simétrica)L21L11L212+L222L31L11L31L21+L32L22L312+L322+L332),{displaystyle {begin{aligned}mathbf {fnMicrosoft Sans Serif}
obtenemos lo siguiente:
- L=()A1100A21/L11A22− − L2120A31/L11()A32− − L31L21)/L22A33− − L312− − L322){displaystyle {begin{aligned}mathbf {L} ={begin{pmatrix}{sqrt {A_{11}}} {0 ventaja0A_{21}/L_{11} reducida{sqrt {A_{22}-L_{21}} {2}} {0A_{31}/L_{11} consiguienteleft (A_{32}-L_{31}L_{21}/right)/L_{22} {sqrt {A_{33}-L_{31} {2}-L_{32}}}end{pmatrix}end{aligned}}}}}
y por lo tanto las siguientes fórmulas para las entradas de L:
- Lj,j=()± ± )Aj,j− − .. k=1j− − 1Lj,k2,{displaystyle L_{j,j}=(pm){sqrt {A_{j,j}-sum ¿Qué?
- j.}" xmlns="http://www.w3.org/1998/Math/MathML">Li,j=1Lj,j()Ai,j− − .. k=1j− − 1Li,kLj,k)parai■j.{displaystyle L_{i,j}={frac {1}{L_{j,j}}left(A_{i,j}-sum ¿Por qué? {texto {fnMicrosoft Sans Serif}j.}" aria-hidden="true" class="mwe-math-fallback-image-inline" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/89f8de93310247c939102367ecc284d1f4beff9d" style="vertical-align: -3.171ex; width:44.493ex; height:7.509ex;"/>
Para matrices complejas y reales, se permiten cambios de signo arbitrarios intrascendentes de elementos diagonales y asociados fuera de la diagonal. La expresión debajo de la raíz cuadrada siempre es positiva si A es real y definida positiva.
Para matriz hermítica compleja, se aplica la siguiente fórmula:
- Lj,j=Aj,j− − .. k=1j− − 1Lj,kLj,kAlternativa Alternativa ,{displaystyle L_{j,j}={sqrt {A_{j,j}-sum ¿Qué?
- j.}" xmlns="http://www.w3.org/1998/Math/MathML">Li,j=1Lj,j()Ai,j− − .. k=1j− − 1Li,kLj,kAlternativa Alternativa )parai■j.{displaystyle L_{i,j}={frac {1}{L_{j,j}}left(A_{i,j}-sum ¿Por qué? {texto {fnMicrosoft Sans Serif}j.}" aria-hidden="true" class="mwe-math-fallback-image-inline" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/bb5adc5916e0762b2eca921de3e70ccae9bd2999" style="vertical-align: -3.171ex; width:44.493ex; height:7.509ex;"/>
Entonces podemos calcular la entrada (i, j) si conocemos las entradas a la izquierda y arriba. El cálculo generalmente se organiza en cualquiera de los siguientes órdenes:
- El Algoritmo de Cholesky-Banachiewicz comienza desde la esquina superior izquierda de la matriz L y procede a calcular la fila matriz por fila.
para ()i = 0; i . dimension; i++) {} para ()j = 0; j . i; j++) {} flotador suma = 0; para ()k = 0; k . j; k++) suma += L[i[ ]k] * L[j[ ]k]; si ()i == j) L[i[ ]j] = Sqrt()A[i[ ]i] - suma); más L[i[ ]j] = ()1.0 / L[j[ ]j] * ()A[i[ ]j] - suma)); }}
- El Algoritmo de Cholesky-Crout comienza desde la esquina superior izquierda de la matriz L y procede a calcular la columna matriz por columna.
para ()j = 0; j . dimension; j++) {} flotador suma = 0; para ()k = 0; k . j; k++) {} suma += L[j[ ]k] * L[j[ ]k]; } L[j[ ]j] = Sqrt()A[j[ ]j] - suma); para ()i = j + 1; i . dimension; i++) {} suma = 0; para ()k = 0; k . j; k++) {} suma += L[i[ ]k] * L[j[ ]k]; } L[i[ ]j] = ()1.0 / L[j[ ]j] * ()A[i[ ]j] - suma)); }}
Cualquier patrón de acceso permite que todo el cálculo se realice en el lugar si se desea.
Estabilidad del cómputo
Supongamos que queremos resolver un sistema de ecuaciones lineales bien condicionado. Si se usa la descomposición LU, entonces el algoritmo es inestable a menos que usemos algún tipo de estrategia de pivote. En este último caso, el error depende del llamado factor de crecimiento de la matriz, que suele ser (pero no siempre) pequeño.
Ahora, suponga que se aplica la descomposición de Cholesky. Como se mencionó anteriormente, el algoritmo será el doble de rápido. Además, no es necesario pivotar y el error siempre será pequeño. Específicamente, si queremos resolver Ax = b, y y denota la solución calculada, entonces y resuelve el sistema perturbado (A + E)y = b, donde
- .. E.. 2≤ ≤ cnε ε .. A.. 2.{displaystylefnMitbf} ################################################################################################################################################################################################################################################################ c_{n}varepsilon "Perfecto" {2}
Aquí ||·||2 es la matriz 2-norma, cn es una pequeña constante que depende de n , y ε denota el redondeo de unidades.
Una preocupación con la descomposición de Cholesky a tener en cuenta es el uso de raíces cuadradas. Si la matriz que se factoriza es definida positiva como se requiere, los números debajo de las raíces cuadradas siempre son positivos en aritmética exacta. Desafortunadamente, los números pueden volverse negativos debido a errores de redondeo, en cuyo caso el algoritmo no puede continuar. Sin embargo, esto solo puede suceder si la matriz está muy mal acondicionada. Una forma de abordar esto es agregar una matriz de corrección diagonal a la matriz que se descompone en un intento de promover la definición positiva. Si bien esto podría disminuir la precisión de la descomposición, puede ser muy favorable por otras razones; por ejemplo, al realizar el método de Newton en la optimización, agregar una matriz diagonal puede mejorar la estabilidad cuando está lejos del óptimo.
Descomposición de LDL
Una forma alternativa, que elimina la necesidad de sacar raíces cuadradas cuando A es simétrica, es la factorización indefinida simétrica
- A=LDLT=()100L2110L31L321)()D1000D2000D3)()1L21L3101L32001)=()D1()sSí.mmetric)L21D1L212D1+D2L31D1L31L21D1+L32D2L312D1+L322D2+D3.).{displaystyle {begin{aligned}mathbf {0}{0} {0} {0} {0} {0} {0} {0} {0} {0}} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0}}} {0} {0} {}}}}}}}} {0} {0}}}}}}} {0} {0}}}}}}}}}}}}}}}}}}}}}}}}} {}}}}}}}}}}}}}}} {}}} {}}}} {0}}}}} {}}}}}}}}}} {}}}}} {}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} { {2}_{2}__} {2}_}___}____}______ {2} {2}} {2}} {3}_{1} {2} {2} {2}} {2}_}2} {2} {_{2}}} {2}}}} {2}}{2}{2}{2}{2}}}{2}}}}}}}{2}}}}{2}}{2}{2}}}}}}}}}}}}}}}}}}}}{2}}}}}}}}}}}}{2}}}}}}}}}}}}}}}}}{2}}}}}}}}}}{2}{2}{2}{2}}}}}}}}}{2}{2}}}}}}}}}}}}}}}}}}}}}}}}}}}}{2}}}}}}}}}}}}
Las siguientes relaciones recursivas se aplican a las entradas de D y L:
- Dj=Ajj− − .. k=1j− − 1Ljk2Dk,{displaystyle D_{j}=A_{jj}-sum ¿Qué?
- j.}" xmlns="http://www.w3.org/1998/Math/MathML">Lij=1Dj()Aij− − .. k=1j− − 1LikLjkDk)parai■j.{displaystyle L_{ij}={frac {1}{d_{j}}left(A_{ij}-sum ¿Por qué? {texto {fnMicrosoft Sans Serif}j.}" aria-hidden="true" class="mwe-math-fallback-image-inline" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/1335e3e24c2341fe4138935f261bf2751eb7bdb8" style="vertical-align: -3.171ex; width:44.883ex; height:7.509ex;"/>
Esto funciona siempre que los elementos diagonales generados en D no sean cero. La descomposición es entonces única. D y L son reales si A es real.
Para la matriz hermitiana compleja A, se aplica la siguiente fórmula:
- Dj=Ajj− − .. k=1j− − 1LjkLjkAlternativa Alternativa Dk,{displaystyle D_{j}=A_{jj}-sum ¿Qué?
- j.}" xmlns="http://www.w3.org/1998/Math/MathML">Lij=1Dj()Aij− − .. k=1j− − 1LikLjkAlternativa Alternativa Dk)parai■j.{displaystyle L_{ij}={frac {1}{d_{j}}left(A_{ij}-sum ¿Por qué? {texto {fnMicrosoft Sans Serif}j.}" aria-hidden="true" class="mwe-math-fallback-image-inline" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/88fb8d13a2eb2c7442a570544cf0b8ebb370dc70" style="vertical-align: -3.171ex; width:44.883ex; height:7.509ex;"/>
Nuevamente, el patrón de acceso permite que todo el cálculo se realice en el lugar si se desea.
Variante de bloque
Cuando se usa en matrices indefinidas, se sabe que la factorización LDL* es inestable sin un pivote cuidadoso; específicamente, los elementos de la factorización pueden crecer arbitrariamente. Una posible mejora es realizar la factorización en submatrices de bloque, comúnmente 2 × 2:
- A=LDLT=()I00L21I0L31L32I)()D1000D2000D3)()IL21TL31T0IL32T00I)=()D1()sSí.mmetric)L21D1L21D1L21T+D2L31D1L31D1L21T+L32D2L31D1L31T+L32D2L32T+D3),{displaystyle {begin{aligned}mathbf {A} =mathbf {LDL} {mathrm {T} {}={begin{pmatrix}mathbf {I} > 'Mathbf {L} _{21} {I} 'Mathbf [L] _{31] {L} _{32}mathbf {I}\end{pmatrix}{begin{pmatrix}mathbf {D} _{1} {0} {0}} {} {}}} {}}} {}}}}} {\f}}}}}}\\\\f}}}}}}}}}}}}}}}}\\\\\\\\\\\_\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ################################################################################################################################################################################################################################################################ {I} {L} _{21}{mathrm {T} } {L} _{31}{mathrm {T} {I} {L} _{32} {mathrm} {T} } limitada0mathbf {I}\end{pmatrix}[8pt] limitada={begin{pmatrix}mathbf {D} _{1} {m} {m}\mhm}mthbf {L} _{21}Mathbf {D} {cHFF} {L} _{21}Mathbf {D} {fn}fnMitbf {L} _{21}{mathrm {T}+mathbf {D} _{2} {L} _{31}Mathbf {D} {cHFF} {L} _{31}Mathbf {D} {fn}fnMitbf {L} _{21}{mathrm Mathbf {D} {cHFF} {L} _{31}Mathbf {D} {fn}fnMitbf {L} _{31}{mathrm {T}+mathbf {L} _{32}mathbf {D} {2}Mathbf {L} _{32} {mathrm} {T}+mathbf {} {}end{pmatrix},end{aligned}}}
donde cada elemento de las matrices anteriores es una submatriz cuadrada. De aquí se siguen estas relaciones recursivas análogas:
- Dj=Ajj− − .. k=1j− − 1LjkDkLjkT,{displaystyle mathbf {} _{j}=mathbf {A} _{jj}-sum ¿Qué? {fnMicrosoft Sans Serif} {L} _{jk} {mathrm}
- Lij=()Aij− − .. k=1j− − 1LikDkLjkT)Dj− − 1.{displaystyle mathbf {L} _{ij}=left(mathbf {A}_{ij}-sum ¿Qué? {L} _{ik}mathbf {fnMicrosoft Sans Serif} {fnMicrosoft Sans Serif} Mathbf.
Esto implica productos de matriz e inversión explícita, lo que limita el tamaño práctico del bloque.
Actualizando la descomposición
Una tarea que a menudo surge en la práctica es que hay que actualizar una descomposición de Cholesky. En más detalles, uno ya ha computado la descomposición Cholesky A=LLAlternativa Alternativa {displaystyle mathbf {A} =mathbf {L} de alguna matriz A{displaystyle mathbf {A}, entonces uno cambia la matriz A{displaystyle mathbf {A} de alguna manera en otra matriz, digamos A~ ~ {displaystyle {fnMicrosoft {fnMicrosoft {\fnMicrosoft {\fnMicrosoft {\\fnMicrosoft {\\\fnMicrosoft {\\fnMicrosoft {\\\\\\\fnMicrosoft {\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ {}}, y uno quiere computar la descomposición Cholesky de la matriz actualizada: A~ ~ =L~ ~ L~ ~ Alternativa Alternativa {displaystyle {fnMicrosoft {fnMicrosoft {\fnMicrosoft {\fnMicrosoft {\\fnMicrosoft {\\\fnMicrosoft {\fnMicrosoft {\\\fnMicrosoft {\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ {fnK}={fnMitbf {} {fn} {fnMicrosoft} {fnMicrosoft}}} {fnMicrosoft {f}}} {f}}}} {f}}}} {fnMicrosoft {f}}}} {f} {fnMicrosoft {f}}}}} {fnMicrosoft}f}}}}} {f}f}}}}}}f} {f} {f}f}f}f}f}f}f}f}f}f}f}f}f}f}f} {f}f}f}f}f} {f}f}f}f}f}f}f} {f}f}f}f} {f}f}fnf}fn\f}f}f}f}f}f}f}\ {}}} {}} {}}} {}}} {}}} {}}}}}}} {}}}} {}}} {}}}}} {}}}}}}}. La pregunta es ahora si se puede utilizar la descomposición de Cholesky A{displaystyle mathbf {A} que se computó antes para calcular la descomposición de Cholesky A~ ~ {displaystyle {fnMicrosoft {fnMicrosoft {\fnMicrosoft {\fnMicrosoft {\\fnMicrosoft {\\\fnMicrosoft {\\fnMicrosoft {\\\\\\\fnMicrosoft {\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ {}}.
Actualización de rango uno
El caso específico, donde la matriz actualizada A~ ~ {displaystyle {fnMicrosoft {fnMicrosoft {\fnMicrosoft {\fnMicrosoft {\\fnMicrosoft {\\\fnMicrosoft {\\fnMicrosoft {\\\\\\\fnMicrosoft {\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ {}} está relacionado con la matriz A{displaystyle mathbf {A} por A~ ~ =A+xxAlternativa Alternativa {displaystyle {fnMicrosoft {fnMicrosoft {\fnMicrosoft {\fnMicrosoft {\\fnMicrosoft {\\\fnMicrosoft {\fnMicrosoft {\\\fnMicrosoft {\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ {A}=mathbf {A} +mathbf {x} {x}, es conocido como actualización de rango uno.
Aquí hay una función escrita en la sintaxis de Matlab que realiza una actualización de rango uno:
función [L] = cholupdate()L, x) n = longitud()x); para k = 1:n r = Sqrt()L()k, k)^2 + x()k)^2); c = r / L()k, k); s = x()k) / L()k, k); L()k, k) = r; si k . n L()k+1):n, k) = ()L()k+1):n, k) + s * x()k+1):n) / c; x()k+1):n) = c * x()k+1):n) - s * L()k+1):n, k); final finalfinal
A rank-n update es uno donde para una matriz M{displaystyle mathbf {M} uno actualiza la descomposición tal que A~ ~ =A+MMAlternativa Alternativa {displaystyle {fnMicrosoft {fnMicrosoft {\fnMicrosoft {\fnMicrosoft {\\fnMicrosoft {\\\fnMicrosoft {\fnMicrosoft {\\\fnMicrosoft {\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ {A}}=mathbf {A} +mathbf {M}mathbf {M}. Esto se puede lograr realizando sucesivamente actualizaciones de rango uno para cada una de las columnas de M{displaystyle mathbf {M}.
Rebaja de rango uno
A Fecha baja de la categoría 1 es similar a una actualización de rango uno, excepto que la adición es reemplazada por la resta: A~ ~ =A− − xxAlternativa Alternativa {displaystyle {fnMicrosoft {fnMicrosoft {\fnMicrosoft {\fnMicrosoft {\\fnMicrosoft {\\\fnMicrosoft {\fnMicrosoft {\\\fnMicrosoft {\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Mathbf {x} {x}. Esto solo funciona si la nueva matriz A~ ~ {displaystyle {fnMicrosoft {fnMicrosoft {\fnMicrosoft {\fnMicrosoft {\\fnMicrosoft {\\\fnMicrosoft {\\fnMicrosoft {\\\\\\\fnMicrosoft {\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ {}} sigue siendo positivo.
El código para la actualización de rango uno que se muestra arriba se puede adaptar fácilmente para hacer una actualización de rango uno: uno simplemente necesita reemplazar las dos adiciones en la asignación a r
y L ((k+1):n, k)
por restas.
Agregar y eliminar filas y columnas
Si tenemos una matriz definida simétrica y positiva A{displaystyle mathbf {A} representado en forma de bloque como
- A=()A11A13A13TA33){displaystyle mathbf {A} ={begin{pmatrix}mathbf {A} _{11} {A} _{13}\\\\fnMicrosoft} {A} _{13}{mathrm {T} } {f}\\fnK}\\fnK}\\fnK}}
y su factor de Cholesky superior
- L=()L11L130L33),{displaystyle mathbf {L} ={begin{pmatrix}mathbf [L] _{11] {L} _{13} âTMa âTMa âTMa â33}end{pmatrix}}}}
entonces para una nueva matriz A~ ~ {displaystyle {fnMicrosoft {fnMicrosoft {\fnMicrosoft {\fnMicrosoft {\\fnMicrosoft {\\\fnMicrosoft {\\fnMicrosoft {\\\\\\\fnMicrosoft {\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ {}}, que es el mismo A{displaystyle mathbf {A} pero con la inserción de nuevas filas y columnas,
- A~ ~ =()A11A12A13A12TA22A23A13TA23TA33){displaystyle {begin{aligned}{tilde {mathbf {A} } {begin{pmatrix}mathbf {A} _{11} {A}{12} {A} _{13}\\\\fnMicrosoft} {A} _{12}{mathrm {T} } {A} {22} {A} _{23}\\\\fnMicrosoft} {A} _{13}{mathrm {T} } {A} _{23} {mathrm} {T} {fn}fn}fnK}fnK}fnK}fnK}fnK}fn}fnK}}}\fnK}\\fnK}fnK}f} {fnK}}}\fnK}\fn}\\\\\\fnK\\\fnK}fnK}fn}\\\\\\\\fnK}\\fnK}\\fn}\\\\fn}\\\\\\\\fnK}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\fn}
estamos interesados en encontrar la factorización Cholesky de A~ ~ {displaystyle {fnMicrosoft {fnMicrosoft {\fnMicrosoft {\fnMicrosoft {\\fnMicrosoft {\\\fnMicrosoft {\\fnMicrosoft {\\\\\\\fnMicrosoft {\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ {}}, que llamamos S~ ~ {displaystyle {fnMicrosoft {fnMicrosoft {\fnMicrosoft {\fnMicrosoft {\\fnMicrosoft {\\\fnMicrosoft {\\fnMicrosoft {\\\\\\\fnMicrosoft {\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ {S}}, sin calcular directamente toda la descomposición.
- S~ ~ =()S11S12S130S22S2300S33).{displaystyle {begin{aligned}{tilde {mathbf} } {begin{pmatrix}mathbf {fnMicrosoft} {cHFF} {cHFF} {S} _{13} âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa} {S}\\\fnMicrosoft}\fnMicrosoft}}end{aligned}}
Escritura A∖ ∖ b{displaystyle mathbf {A} setminus mathbf {b} para la solución Ax=b{displaystyle mathbf {A} mathbf {x} =mathbf {b}, que se puede encontrar fácilmente para matrices triangulares, y chol()M){displaystyle {text{chol} {Mathbf {M}} para la descomposición de Cholesky M{displaystyle mathbf {M}, se pueden encontrar las siguientes relaciones:
- S11=L11,S12=L11T∖ ∖ A12,S13=L13,S22=chol()A22− − S12TS12),S23=S22T∖ ∖ ()A23− − S12TS13),S33=chol()L33TL33− − S23TS23).{displaystyle {begin{aligned}mathbf {fnMicrosoft Sans Serif} {fnMicrosoft Sans Serif} {L} _{11}{mathrm {T}setminus mathbf {A} _{12},\\\\fnMitbf {S} _{13} âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa {S} _{22} limit=mathrm {chol} left(mathbf {A} _{22}-mathbf {fnMicrosoft Sans Serif} Mathbf, ¿eh? {fnMicrosoft Sans Serif} {fnMicrosoft Sans Serif} {T}setminus left(mathbf {A} _{23}-mathbf {fnMicrosoft Sans Serif} Mathbf [S] {S} _{33} Alguien=mathrm {chol} left(mathbf {L} _{33}{mathrm Mathbf {fnMicrosoft Sans Serif} {T}mathbf {S} _{23}right)end{aligned}}}
Estas fórmulas se pueden utilizar para determinar el factor de Cholesky después de la inserción de filas o columnas en cualquier posición, si establecemos las dimensiones de fila y columna de manera adecuada (incluso a cero). El problema inverso, cuando tenemos
- A~ ~ =()A11A12A13A12TA22A23A13TA23TA33){displaystyle {begin{aligned}{tilde {mathbf {A} } {begin{pmatrix}mathbf {A} _{11} {A}{12} {A} _{13}\\\\fnMicrosoft} {A} _{12}{mathrm {T} } {A} {22} {A} _{23}\\\\fnMicrosoft} {A} _{13}{mathrm {T} } {A} _{23} {mathrm} {T} {fn}fn}fnK}fnK}fnK}fnK}fnK}fn}fnK}}}\fnK}\\fnK}fnK}f} {fnK}}}\fnK}\fn}\\\\\\fnK\\\fnK}fnK}fn}\\\\\\\\fnK}\\fnK}\\fn}\\\\fn}\\\\\\\\fnK}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\fn}
con descomposición de Cholesky conocida
- S~ ~ =()S11S12S130S22S2300S33){displaystyle {begin{aligned}{tilde {mathbf} } {begin{pmatrix}mathbf {fnMicrosoft} {cHFF} {cHFF} {S} _{13} âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa âTMa} {S} {fn}\fnK}f}fnK}fn}fnK}fn}fn} {fnK}}} {fn}} {fnK}}}}}}}}}\\\fn}\\\fnK}\\cH0}}}}\\\\\\\\\\\m}}\\\\\\\\\\\}\\\0}}\0}\\\\\\\\\}}}}\0}\0}}}}}}}}cH0}\\\\\\\\\\\\\\
y desea determinar el factor de Cholesky
- L=()L11L130L33){displaystyle {begin{aligned}mathbf {L}={begin{pmatrix}mathbf [L] _{11] {L} _{13} âTMam}m}end{aligned}
de la matriz A{displaystyle mathbf {A} con filas y columnas removidas,
- A=()A11A13A13TA33),{displaystyle {begin{aligned}mathbf {A}={begin{pmatrix}mathbf {A} _{11} {A} _{13}\\\\fnMicrosoft} {A} _{13}{mathrm {T} } âTMa âTMa âTMaend{pmatrix},end{aligned}}
produce las siguientes reglas:
- L11=S11,L13=S13,L33=chol()S33TS33+S23TS23).{displaystyle {begin{aligned}mathbf {L} _{11} {S} _{11},\\\fnMitbf {L} _{13} {S} _{13},\\\\fnMitbf {L} _{33} Alguien=mathrm {chol} left(mathbf {fnMicrosoft Sans Serif} Mathbf {fnMicrosoft Sans Serif} {T}mathbf {S} _{23}right)end{aligned}}}
Note que las ecuaciones anteriores que implican encontrar la descomposición Cholesky de una nueva matriz son todas de la forma A~ ~ =A± ± xxAlternativa Alternativa {displaystyle {fnMicrosoft {fnMicrosoft {\fnMicrosoft {\fnMicrosoft {\\fnMicrosoft {\\\fnMicrosoft {\fnMicrosoft {\\\fnMicrosoft {\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ {A}}=mathbf {A} pm mathbf {x} mathbf {x} ^{*}, lo que les permite ser eficientemente calculados utilizando los procedimientos de actualización y actualización detallados en la sección anterior.
Prueba para matrices semidefinidas positivas
Prueba mediante argumento limitante
Los algoritmos anteriores muestran que cada matriz definida positiva A{displaystyle mathbf {A} tiene una descomposición de Cholesky. Este resultado puede extenderse al caso semidefinido positivo por un argumento limitador. El argumento no es totalmente constructivo, es decir, no da ningún algoritmo numérico explícito para calcular los factores de Cholesky.
Si A{displaystyle mathbf {A} es un n× × n{displaystyle ntimes n} matriz semi-definida positiva, entonces la secuencia ()Ak)k:=()A+1kIn)k{textstyle left(mathbf {fnK}fnMicrosoft Sans Serif} {A} +{frac} {1} {k}mathbf {fn} {fn} {fn}} {fn}fn} {fn} {fn} {fn}} {fn}} {fn}}}} {fn}}}}}}}}}}}}} {cH}}}}}} {cHFF}}}}}}}}}}}}}}}}}}}}} consiste en matrices definidas positivas. (Esta es una consecuencia inmediata de, por ejemplo, el teorema de mapeo espectral para el cálculo funcional polinomio.) También,
- Ak→ → Aparak→ → JUEGO JUEGO {displaystyle mathbf {A} _{k}rightarrow mathbf {A} quad {text{for}quad krightarrow infty }
en la norma del operador. Desde el caso definitivo positivo, cada uno Ak{displaystyle mathbf {A} _{k} tiene la descomposición de Cholesky Ak=LkLkAlternativa Alternativa {displaystyle mathbf {A}{k}=mathbf {L} {K}Mathbf {fnMicrosoft Sans Serif}. Por propiedad de la norma del operador,
- .. Lk.. 2≤ ≤ .. LkLkAlternativa Alternativa .. =.. Ak.. .{displaystylefnMitbf {fnh}fnK}fnK}fnK}fnK}f}fnK} 'Mathbf {L} {fnMicrosoft}fnMicrosoft* {A} _{k}fnMientras
El ≤ ≤ {displaystyle leq } Oportunidad Mn()C){displaystyle M_{n}(mathbb {C})} equipado con la norma del operador es un álgebra C*. Así que... ()Lk)k{displaystyle left(mathbf [L] _{k}right)_{k} es un conjunto consolidado en el espacio de Banach de los operadores, por lo tanto relativamente compacto (porque el espacio vectorial subyacente es finito-dimensional). En consecuencia, tiene una subsecuencia convergente, también denotada por ()Lk)k{displaystyle left(mathbf [L] _{k}right)_{k}, con límite L{displaystyle mathbf {L}. Se puede comprobar fácilmente que esto L{displaystyle mathbf {L} tiene las propiedades deseadas, es decir. A=LLAlternativa Alternativa {displaystyle mathbf {A} =mathbf {L}, y L{displaystyle mathbf {L} es triangular inferior con entradas diagonales no negativas: para todos x{displaystyle x} y Sí.{displaystyle y},
- .. Ax,Sí... =.limAkx,Sí..=.. limLkLkAlternativa Alternativa x,Sí... =.. LLAlternativa Alternativa x,Sí... .{displaystyle langle mathbf {A} x,yrangle =leftlangle lim mathbf [A] _{k}x,yrightrangle =langle lim mathbf {L} {K}Mathbf [L] _{*}x,yrangle =langle mathbf {L} mathbf {L} ^{*}x,yrangle ,}
Por lo tanto, A=LLAlternativa Alternativa {displaystyle mathbf {A} =mathbf {L}. Debido a que el espacio vectorial subyacente es finito-dimensional, todas las topologías en el espacio de los operadores son equivalentes. Así que... ()Lk)k{displaystyle left(mathbf [L] _{k}right)_{k} tiende a L{displaystyle mathbf {L} en la norma ()Lk)k{displaystyle left(mathbf [L] _{k}right)_{k} tiende a L{displaystyle mathbf {L} A la entrada. Esto implica, a su vez, que Lk{displaystyle mathbf {L} _{k} es triangular inferior con entradas diagonales no negativas, L{displaystyle mathbf {L} es también.
Prueba por descomposición QR
Vamos A{displaystyle mathbf {A} ser una matriz hermitiana semi-definida positiva. Entonces se puede escribir como producto de su matriz de raíz cuadrada, A=BBAlternativa Alternativa {displaystyle mathbf {A} =mathbf {B}mathbf {B}. Ahora la descomposición QR se puede aplicar a BAlternativa Alternativa {displaystyle mathbf {B}, resultando en BAlternativa Alternativa =QR{displaystyle mathbf {B} }=mathbf {Q} mathbf {R}, donde Q{displaystyle mathbf {Q} es unitario y R{displaystyle mathbf {R} es triangular superior. Inserción de la descomposición en los rendimientos originales de igualdad A=BBAlternativa Alternativa =()QR)Alternativa Alternativa QR=RAlternativa Alternativa QAlternativa Alternativa QR=RAlternativa Alternativa R{displaystyle A=Mathbf {B}mathbf {B}=(mathbf {QR})^{*}mathbf {QR} =mathbf {R} {fn} {fnMicrosoft Sans Serif} {R} {fn} {R}. Ajuste L=RAlternativa Alternativa {displaystyle mathbf {L} =mathbf {R} {} {} {}}} completa la prueba.
Generalización
La factorización Cholesky se puede generalizar a matrices (no necesariamente finitas) con entradas del operador. Vamos {}Hn}{displaystyle {fn} ser una secuencia de espacios de Hilbert. Considere la matriz del operador
- A=[A11A12A13A12Alternativa Alternativa A22A23A13Alternativa Alternativa A23Alternativa Alternativa A33⋱ ⋱ ]{displaystyle mathbf {A} ={begin{bmatrix}mathbf {A} _{11} {A}{12} {A} _{13} Alguien;\\\\\\cH33} {cHFF} {cHFF} {cHFF} {cHFF} {cHFF} {cHFF}} {cHFF} {cHFF}} {c}}}} {cHFF}}}} {}}}}} {\\\c}}}}}}}}}}}\\\\\\\\\\\\\\\\\\\\c}}}}}}\\\\\\\\\\\\\\\\\\\\\\\\}}}}}}}}}}}}}}\\\\\\\\\\\\\ {A} {22} {A} _{23} Alguien;\\\\\cH00} {cHFF} {cHFF} {cH} {cHFF} {f}} {cHFF}} {cHFF}} {cH}}}} {f}}}\\cH0}\\cH0}}}}}\\\\\\\\\cH00}}}\\\\\\\\\\cH00}}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\c}}}}}}}}}}} {A} _{23}}{*}} {A}_{33} reducida\;\\; sensible; âTMa}}}}
actuando sobre la suma directa
- H=⨁ ⨁ nHn,{displaystyle {Mathcal}=bigoplus ¿Qué? {H}_{n},}
donde cada
- Aij:Hj→ → Hi{displaystyle mathbf {A} _{ij}:{mathcal {H}_{j}rightarrow {fnMitcal {fnH} {fnMitcal}} {fnH}} {fn}}} {f}}} {fn}} {fnMitcal {fnH}}} {fn}}}} {fn}}} {f}}} {f}}}}}}}}
es un operador acotado. Si A es positivo (semidefinido) en el sentido de que para todo k finito y para cualquier
- h▪ ▪ ⨁ ⨁ n=1kHk,{displaystyle hin bigoplus ¿Qué? {H}_{k},}
tenemos .. h,Ah.. ≥ ≥ 0{displaystyle langle h,mathbf {A} hrangle geq 0}, entonces existe una matriz de operador triangular inferior L tales que A = LL*. Uno también puede tomar las entradas diagonales L para ser positivo.
Implementaciones en bibliotecas de programación
- Lenguaje de programación C: la Biblioteca Científica GNU proporciona varias implementaciones de la descomposición Cholesky.
- Maxima sistema de álgebra de computadora: función
cholesky
computes Cholesky descomposición. - GNU Octave sistema de computaciones numéricas proporciona varias funciones para calcular, actualizar y aplicar una descomposición Cholesky.
- La biblioteca LAPACK proporciona una implementación de alto rendimiento de la descomposición Cholesky que se puede acceder desde Fortran, C y la mayoría de los idiomas.
- En Python, la función
cholesky
de lanumpy.linalg
módulo realiza Descomposición de Cholesky. - En Matlab, el
chol
función da la descomposición de Cholesky. Note quechol
utiliza el factor triangular superior de la matriz de entrada por defecto, es decir, computes A=RAlternativa Alternativa R{displaystyle A=R^{*}R} Donde R{displaystyle R. es triangular superior. En cambio, se puede pasar una bandera para utilizar el factor triangular inferior. - En R, el
chol
función da la descomposición de Cholesky. - En Julia, la
cholesky
función de laLinearAlgebra
biblioteca estándar da la descomposición de Cholesky. - En Mathematica, la función "
CholeskyDecomposition
" se puede aplicar a una matriz. - En C+++, varias bibliotecas lineales de álgebra soportan esta descomposición:
- El Armadillo (C++) suministra el comando
chol
para realizar la descomposición de Cholesky. - La biblioteca Eigen suministra factorizaciones Cholesky tanto para matrices escasas como densas.
- En el paquete ROOT,
TDecompChol
la clase está disponible.
- El Armadillo (C++) suministra el comando
- En Analytica, la función
Decompose
da la descomposición de Cholesky. - La biblioteca de Matemáticas de Apache Commons tiene una implementación que se puede utilizar en Java, Scala y cualquier otro idioma JVM.
Contenido relacionado
Matriz unitaria
Difeomorfismo
Sistema determinista