Así que tengo una estadística algoritmo de aprendizaje en la que D es una matriz diagonal que cambia cada iteración mientras permanece la misma. Estoy buscando una forma rápida de invertir ADA' en cada iteración, lo que termina siendo un .9 millones por .9 millones tamaño de la matriz.
A es de orden m por n con m < n.
Mis pensamientos han sido atraídos a hacer un económico SVD de a para obtener A=SVU' (V y termina siendo un cuadrado de la diagonal de la matriz) en el que yo sólo necesita preocuparse de invertir el interior de U'DU plazo y U'*U=yo, me siento como debe de ser algo posible pero no puedo averiguar.
Alguna idea?
algunas notas adicionales: es bastante escasa, el preprocesamiento de las cosas, como el SVD de a puede tomar el tiempo necesario...etc
Código de MATLAB que he probado para mostrar que el enfoque sugerido no funciona (seguro de cómo dar formato a esta):
rows=90;
cols=120;
G=rand(rows,cols);
[X,Y,Z]=svd(G,'econ');
A=Z'; %the above was just to generate A s.t. A'A=I, as in second paragraph above
d=rand(1,cols);
D=diag(d);
M=A*D*A';
Minv=M^(-1) %something to compare with
%[U,E,V]=svd(A); %also tried this, it didn't work either
[U,E,V]=svd(A,'econ');
Einv=E';
Einv(1:rows,1:rows)=diag(1./diag(E)); %calculate inverse of E
Ap=V*Einv*U';
Minv2=Ap'*D^(-1)*Ap;
max(max((Minv-Minv2).^2)) %did it work? (no)