C++, systeme tridiagonal

Fermé
dongous - 31 mai 2012 à 04:42
 Utilisateur anonyme - 31 mai 2012 à 08:22
Bonjour,


je suis entrain de resoudre un système tridiagonal avec un Thomas algorithme en C++
Je doit le répéter m_Nt fois pour obtenir la solution recherchée u[100][0].
j'ai suivi l'exemple du code présenté sur wikipédia
Voici le lien
http://en.wikipedia.org/wiki/Tridiagonal_matrix_algorithm

et voici mon code

/*********** resolution du systeme par Thomas algorithme ******/
// double c[201];double dd[201];double a[201]; sont respectivement les diag sup diag sub
// double u[201][101];
for(int n=99; n>=0 ;--n)
{
for (int i = 1; i < 201; i++)
{
double m = a[i]/dd[i - 1]; //ok
dd[i] = dd[i] - m * c[i - 1]; //ok
u[i][n+1] = u[i][n+1] - m*u[i-1][n+1] ; // quand je debug, cette ligne ne marche pas (pas de changement de valeur pour la matrice u )//
}
u[200][n] = u[200][n+1]/dd[200];
for (int i = 199; i >= 0; --i)
u[i][n] = (u[i][n+1] - c[i] * u[i+1][n]) / dd[i] ;
}
std::cout<<u[100][0]<<std::endl;
}

je sais pas pourquoi il y a une erreur de debug.Pourtant il n'y a pas de probleme de compilation ou build.
Est-ce que quelqu'un pourrait m'indiquer l'endoit ou j'ai fait une erreur ?
Merci d'avance !
A voir également:

1 réponse

Bonjour

Si u[i][n+1] ne change pas, c'est que m==0 ou u[i-1][n+1]==0. Je pencherais pour ce second cas, surtout que i==1 lors du premier passage. Mais à toi de vérifier avec ton debugger.
Et pourquoi as-tu mis tes déclarations de variables en commentaire ?
0