Boucle en C++

Bonjour,
j'ai le bout de code suivant.
mesh Th=square(N,N,[x,y]);
real T=1;
real t=0,dt;
for(dt=1;dt>1./N;dt/=2)
{
	for (t=0;t<T;t+=dt) 
	{
		calculer la solution approchée;
	}
  real error = solution exacte - solution approchée
}
Je ne comprends pas le principe de ces deux boucles. Il y a une boucle sur le pas de temps dt puis à l'intérieur une boucle sur t. C'est un peu flou, ça veut dire qu'on calcule la solution approchée pour chaque t, puis on calcule l'erreur sur chaque maillage ? L'erreur ne devrait-elle pas se calculer sur pour chaque t ?
Cordialement.

Réponses

  • Bonsoir,

    Le calcul de la solution approchée se fait probablement en plusieurs étapes (chaque itération de la boucle intérieure).
    Exemple : Avec la méthode des rectangles pour le calcul approché d'une intégrale, la boucle extérieure fait varier une largeur de rectangle en la divisant par 2 à chaque étape et la boucle intérieure calcule la somme des aires algébriques des rectangles, chaque itération correspondant au calcul de l'aire d'un rectangle. À chaque itération de la boucle extérieure, le calcul se fait sur un nombre de rectangles multiplié par deux.
  • Je ne comprends pas. Moi d'habitude je fixe un maillage et je calcule la solution approchée en chaque point puis je calcule l'erreur. Par contre l'erreur est en chaque point ou bien sur le maillage ? Et ça apporte quoi de calculer l'erreur dans plusieurs maillages ?

    [Je calcule, tu calcules, il calcule ... AD]
  • Il peut y avoir plusieurs étapes pour calculer la solution approchée.
    Ce n'est pas parce qu'il y a écrit un vague "calculer la solution approchée" que cela signifie que le calcul complet de la solution approchée se fait à chaque itération de la boucle interne.
    Sans voir le code dans son intégralité, difficile de te dire ce qu'il se passe exactement !
    Quant au fait de calculer l'erreur sur plusieurs maillages, cela peut être intéressant pour voir si cette erreur diminue quand le maillage devient plus fin.
  • Bonjour Philippe
    en quoi c'est intéressant de voir si l'erreur diminue quand le maillage devient plus fin? Car moi j'ai toujours pensé que pour voir si un code fonctionne correctement il faut que l'erreur soit de l'ordre de $10^{-3}$.

    Cordialement
  • Je ne comprends rien du tout. Quel est l'intérêt de calculer la solution approchée si on a les moyens de calculer la solution exacte ? Pourquoi est-ce que $10^{-3}$ serait « une bonne erreur » indépendamment de la taille de la solution ? Si on fait un simple changement d'unité, passer du mètre au millimètre ou au kilomètre, cela multiplie ou divise la taille des solutions par $10^3$, alors avoir une règle absolue (par opposition à « relative à la taille des solutions »), ça me paraît bizarre.
  • @ Math Coss bonjour, en fait généralement pour voir si un code marche bien on prend un problème dont on connaît la solution exacte pour on calcul l'erreur et on fonction de l'erreur on dit si le code est bon ou pas.
    Pour l'histoire de $10^{-3}$ c'est un prof qui me l'a dit et moi même j'ai trouvé ça bizarre.
  • Dans ces conditions, si c'est dans une phase de validation, je comprends mieux pourquoi on peut comparer les solutions exacte et approchée.
    Pour l'histoire de $10^{-3}$, ça semble un peu suspect s'il n'y a pas un référence de taille – par exemple, parce que l'on sait que la solution est de l'ordre de grandeur de « quelques » unités (comprise entre $1$ et $10$ « en général » ?).
  • J'imagine que cela veut dire qu'il considère qu'une erreur de 0,1 % est acceptable.
Connectez-vous ou Inscrivez-vous pour répondre.