La primera parte de aquí abajo no es una "respuesta", pero un comentario extendido/seguimiento-pregunta a talonmies anteriores de respuesta/comentario
Me he extendido su notación un poco y consiguió una más clara exposición: en Primer lugar vamos a extender la Xde la matriz a ser la inversa de la completa R-matriz, de tal manera que $\small \mathbf A^{-1}= \mathbf B =\mathbf X^\tau \mathbf X $ y también vamos a ampliar los índices de X , entonces
$\qquad \small \mathbf X_{00} =\mathbf R_{00}^{-1} $, $\small \qquad \mathbf X_{11} =\mathbf R_{11}^{-1} \quad $ pero lamentablemente $\small \mathbf X_{10} \ne \mathbf R_{10}^{-1} $ .
Por la inversa de la relación de la $\small \mathbf X =\mathbf R^{-1} $ tenemos, que $\small \mathbf X_{10} \mathbf R_{00}+ \mathbf X_{11} \mathbf R_{10} =\mathbf 0 $ e lo $\small \mathbf X_{10} = - \mathbf X_{11} \mathbf R_{10} \mathbf R_{00}^{-1} $ (a partir de la cual queremos recibir la parte superior izquierda de la diagonal de elementos de B por a $\small \mathbf X^\tau_{00} \mathbf X_{00} + \mathbf X^\tau_{10} \mathbf X_{10} = \mathbf B_{00} $ )
Aquí $\small \mathbf X_{11} $ representa la parte del problema que queremos para reducir el esfuerzo computacional, debido a que esta es la inversión de la (gran) parte restante de la cholesky-factor.Pensé en introducir el concepto de la pseudoinverse pinv(X) por el que podríamos continuar:
$\pequeño \begin{array} {rcl}
\mathbf Y &=&
- ( \mathbf X_{11} \mathbf R_{10} \mathbf R_{00}^{-1} )^{-1} \\
&=& - \mathbf R_{00} \operatorname{pinv} (\mathbf R_{10}) \mathbf R_{11} \\
\mathbf X_{10} &=& \operatorname{pinv} ( \mathbf Y)
\end{array}$
Esto permitiría invertir pequeñas matrices sólo, pero a pesar de la pseudoinverse-operaciones funciona bien en muchos casos, no podría hacer el trabajo correctamente para el pinv(R10)-parte; para todas las variantes de mis cálculos siempre necesitaba la versión completa R11 en esta o aquella versión. ¿Ves algún general de la razón, por qué el pinv(R10) no está trabajando lo suficiente aquí?
Práctica de cálculo
Hmm, por lo que
aceptar que necesitamos todo el cholesky-descomposición de todos modos, el proceso podría incluso ser descrito más corto:
a) considerar la simetría del SPD-matriz de Una , buscamos la diagonal-elementos de la 3x3-submatriz $\small \mathbf B_{00} $ $ \small \mathbf B = \mathbf A^{-1} $
b) realizar el cholesky-descomposición de abajo a arriba en la matriz R; denotar $\small \mathbf R_{00} $ la parte superior izquierda de 3x3 triangular superior submatrix (pensando en términos de una correlación de la matriz de Un esto representa el parcial o "inexplicable" de varianza/covarianza)
c) invertir $\small \mathbf R_{00} $ conseguir $\small \mathbf X_{00} $ (esto también es barato porque ya triangular)
d) en $ \small \mathbf B_{00} = \mathbf X_{00}^\tau \mathbf X_{00} $ nos encontramos con los necesarios elementos de la diagonal. (Esta última operación puede incluso ser sustituido por una simple suma de los cuadrados a lo largo de las columnas de X )
Aquí está un ejemplo completo utilizable para Pari/GP. A tenerlo tan claro como sea posible sin optimizaciones, errorchecks etc:
Cultivo(M,dim) = matriz(dim dim,r,c,M[r,c]) \\ reduce el tamaño de una matriz
\\ procedimiento para mostrar la primera dim diagonal-entradas de A^-1
{invdiag(A,dim=3)=local(rs=filas(Una),lV,R,X);
\\ reducir Una por una cholesky-proceso de dim x dim-residual de la matriz A_00
\\ la cholesky proceso que va de abajo hacia arriba
forstep( d = rs, dim+1, -1,
lV = [, d]/sqrt(a[d,d]);
A = de Cultivo( Una - lV*lV~ , d-1 );
);
\\después de esta es el dim x dim residual de la matriz de
\\ calcular el cholesky-factor de que Un residual en la matriz R
\\ acabamos de continuar trabajando de abajo hacia arriba, pero no es más recortada ahora
R = matriz(dim dim);
forstep( d = dim, 1, -1,
R[,d] = [d]/sqrt(a[d,d]);
A = a - R[,d] * R[,d]~;
);
X = R^-1; \\ inversa de R de tamaño dim dim x
\\ y para extraer los valores de diag (^-1) =diag( R^-1~ * R^-1 )
\\ basta la suma de los cuadrados a lo largo de las columnas
lv = vector(dim,c,sum(r=1,c, X[r,c]^2) );
retorno(lv);
}
\\ crear una matriz de la muestra Un
A = matriz(8,8,r,c,binomial(r-1,c-1)/2^(c-1))
A = a* a~ \\ hacer un simétrica positiva definida una
de impresión(invdiag(A,3)) \\ muestran los 3 primeros resultados parciales de cholesky-método
de impresión(diag (^-1)) \\ mostrar la verdadera resultados por inversión de la matriz completa
\\ de salida:
[21845.0000000, 980612.000000, 8259152.00000]
[21845, 980612, 8259152, 21815360, 21017856, 7373824, 806912, 16384]~