Vou responder minha própria pergunta, pois o método a seguir parece ser muito eficaz. Estou fazendo uma resposta para que as pessoas possam votar de forma positiva ou negativa, independentemente da pergunta, se acham que é bom ou ruim.
Resposta: use a sondagem aleatória da matriz aplicada à diagonal da matriz.
ω 1 , Q 2 , . . , Ω kAω1,ω2,..,ωkAAω1,Aω2,...,Aωk
mindiagonal D||Dω1−Aω1||2+||Dω2−Aω2||2+...+||Dωk−Aωk||2.
O mínimo tem a fórmula exata,
dEu= ωEu1A ω11+ ωEu2A ωEu2. . . + ωEukA ωEuk( ωEu1)2+ ( ωEu2)2+ . . . + ( ωEuk)2.
Código Matlab, por exemplo:
omegas = randn(16,3);
dprobe=sum(omegas.*(A*omegas),2)./sum(omegas.^2,2);
Na minha matriz de exemplo, com 3 vetores de sondagem, a diagonal exata e a diagonal sondada são comparadas da seguinte forma:
[dprobe, diag(A)]
ans =
1.0e+04 *
2.3297 2.4985
0.4596 0.4921
0.1322 0.0897
0.2838 0.1764
0.0989 0.0999
0.0106 0.0071
0.0068 0.0068
0.0469 0.0571
0.0070 0.0070
0.0355 0.0372
0.0059 0.0060
0.0071 0.0064
0.0067 0.0067
0.0026 0.0021
0.0012 0.0012
0.0015 0.0013
Atualização: Eu tenho experimentado aplicar essas idéias a matrizes de bloco simétricas, pois uma matriz com a qual estou trabalhando é quase diagonal de bloco em uma base semelhante a uma wavelet. Parece funcionar muito bem para a construção de pré-condicionadores, desde que a matriz seja "dominante na diagonal do bloco" (a definição é um pouco complicada), e desde que você simetrize os blocos reconstruídos dos mínimos quadrados.
Lembre-se de que uma matriz particionada nos blocos é dominante na diagonal do bloco se
UMAi , j
||A−1i,i||−1≥∑j||Ai,j||.
Dados os aleatórios gaussianos como acima, procuramos encontrar a seguinte reconstrução diagonal do bloco dos mínimos quadrados:ω
minblock diagonals B||Bω1−Aω1||2+||Bω2−Aω2||2+...+||Bωk−Aωk||2.
Após algumas manipulações de produto tensorial, você pode encontrar a fórmula exata para o 'ésimo bloco , resolvendo os problemas locais:lB~(l)
B~(l)=[(Aω1)(l)ω(l)T1+...+(Aωk)(l)ω(l)Tk][ω(l)1ω(l)T1+...+ω(l)kω(l)Tk]−1,
onde e são as partes de e correspondentes aos índices do 'ésimo bloco. ω ( l ) i A ω i ω i l(Aωi)(l)ω(l)iAωiωil
Se eu apenas usar esses , o pré-condicionamento parecerá muito ruim, mas se eu simetrizar da seguinte maneira,B~
B(l)=(B~(l)+B~(l)T)/2,
nas minhas experiências, torna-se quase tão bom quanto se eu tivesse usado os verdadeiros blocos diagonais (geralmente melhores!). Aqui está um exemplo de matriz em imagens,