Voy a responder mi propia pregunta ya que el siguiente método parece ser muy efectivo. Lo estoy respondiendo para que la gente pueda votar a favor o en contra, independientemente de la pregunta, si piensan que es bueno o malo.
Respuesta: use una prueba de matriz aleatoria aplicada a la diagonal de la matriz.
UNAω1, ω2, . . , ωkUNAA ω1, A ω2, . . . , A ωk
mindiagonal DEl | El | D ω1- A ω1El | El |2+ | El | D ω2- A ω2El | El |2+ . . . + | El | D ωk- A ωkEl | El |2.
El mínimo tiene la fórmula exacta,
reyo= ωyo1A ω11+ ωyo2A ωyo2. . . + ωyokA ωyok( ωyo1)2+ ( ωyo2)2+ . . . + ( ωyok)2.
Código de Matlab, por ejemplo:
omegas = randn(16,3);
dprobe=sum(omegas.*(A*omegas),2)./sum(omegas.^2,2);
En mi matriz de ejemplo, con 3 vectores de sondeo, la diagonal exacta y la diagonal sondada se comparan de la siguiente manera:
[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
Actualización: He estado experimentando aplicando estas ideas a las matrices de bloques simétricos, ya que una matriz con la que estoy trabajando es casi diagonal al bloque en forma de wavelet. Parece funcionar bastante bien para construir preacondicionadores, siempre y cuando la matriz sea "bloque-diagonalmente dominante" (la definición es un poco complicada), y siempre que simimetrice los bloques reconstruidos de mínimos cuadrados.
Recuerde que una matriz dividida en bloques es dominante en diagonal en bloque si
UNAi , j
El | El | UNA- 1yo , yoEl | El |- 1≥ ∑jEl | El | UNAi , jEl | El | .
Dados ' aleatorios gaussianos como los anteriores, buscamos encontrar la siguiente reconstrucción diagonal del bloque de mínimos cuadrados:ω
minb l o c k d i a g o n a l s BEl | El | B ω1- A ω1El | El |2+ | El | B ω2- A ω2El | El |2+ . . . + | El | B ωk- A ωkEl | El |2.
Después de algunas manipulaciones de tensor de producto, puede encontrar la fórmula exacta para el bloque 'th resolviendo los problemas locales:lsi~( l )
si~( l )= [ ( A ω1)( l )ω( l ) T1+ . . . + ( A ωk)( l )ω( l ) Tk] [ ω( l )1ω( l ) T1+ . . . + ω( l )kω( l ) Tk]- 1,
donde y son las porciones de y correspondientes a los índices del bloque ' .( A ωyo)( l )ω( l )yoA ωyoωyol
Si solo uso estos 's, el preacondicionamiento parece ser bastante malo, pero si simulo de la siguiente manera,si~
si( l )= ( B~( l )+ B~( l ) T) / 2,
en mis experimentos se vuelve casi tan bueno como si hubiera usado los bloques diagonales verdaderos (¡a menudo mejor!). Aquí hay un ejemplo de matriz en imágenes,