Actualmente estoy trabajando con "A Multigrid Tutorial" de Briggs et al, Capítulo 8.
La construcción del operador de interpolación se da como:
Luego, la construcción del operador de restricción y el operador de cuadrícula fina se dan como:
Supongamos que tenemos tres puntos de cuadrícula x0, x1, x2 con el medio x1 está bien y los otros son gruesos. El del medio está interpolado por x1 = x0*w0 + x2*w2
. Por lo tanto, el operador de interpolación es (en Matlab):
I = [1, 0, 0; w0, 0, w2; 0, 0, 1]
I =
[ 1, 0, 0]
[ w0, 0, w2]
[ 0, 0, 1]
El operador de restricción es entonces:
transpose(I)
ans =
[ 1, w0, 0]
[ 0, 0, 0]
[ 0, w2, 1]
Ahora veamos qué sucedería si uno restringiera y luego interpolara directamente, lo que resulta en una multiplicación de I
y transpose(I)
:
I*transpose(I)
ans =
[ 1, w0, 0]
[ w0, w0^2 + w2^2, w2]
[ 0, w2, 1]
Esperaría que esta matriz sea algo así como una matriz de identidad o al menos tendría la norma 1 o algo así. Pero si aplicamos x = [1, 1, 1] para digamos w0 = w2 = 0.5, obtendríamos [1.5 1.5 1.5]. Supongo que las operaciones de interpolación de restricción aplicadas repetidamente al menos convergerían en algo. Pero no, en ese caso todos los componentes del vector se multiplican por 1.5 en cada restricción-interpolación. Eso me parece muy extraño.
¿Alguien puede explicar lo que está pasando?