Métodos iterativos para la resolución de sistemas

Ya comentamos en el post anterior que formato tienen los sistemas $latex Au=f$ que surgen a partir de la discretización de un problema de Poisson y que tendremos que resolver. Esta resolución la podriamos hacer de manera directa pero son mucho mas eficaces los métodos iterativos.

Se puede demostrar que la manera mas sencilla para obtener los algoritmos de los diferentes métodos iterativos es pensar sencillamente en la aproximación por diferencias finitas, despejando la variable central i calcularla en función de los vecinos del paso de tiempo anterior para Jacobi, introduciendo un peso para ponderar el paso anterior de la misma variable con el calculado por Jacobi para relajación y, finalmente, utilizar no las varialbles del paso anterior sino tambien las ya calculadas del paso actual para Gauss-Seidel.

Además, el hecho de trabajar con $latex n$ dimensiones solo significa colocar nuestra expresión en $latex n$ bucles anidados. Así de sencillo…

En el caso de $latex 1D$, tendriamos:

[sourcecode languaje=»cpp»]
for (int i=1; i<nx-1; i++) {

//Jacobi
vj[t+1][i] = 0.5 * ( vj[t][i-1] + vj[t][i+1] + h*h*f[i] );

//weighted Jacobi
vwj[t+1][i] = vwj[t][i] + w * ( vwj[t][i] – vj[t+1][i] );

//Gauss-Seidel
vgs[i] = 0.5 * ( vgs[i-1] + vgs[i+1] + h*h*f[i] );

//weighted Gauss-Seidel
vwgs[i] = vwgs[i] + w * ( vwgs[i] – vgs[i] );

}
[/sourcecode]

Tags: , , ,

Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


¡IMPORTANTE! Responde a la pregunta: ¿Cuál es el valor de 14 8 ?