EQUATION DIFFÉRENTIELLE DE LAPLACE D² T(X,Y) / DX² + D² T(X,Y) / DY² = 0

Arnal88 Messages postés 96 Date d'inscription samedi 21 octobre 2006 Statut Membre Dernière intervention 25 avril 2009 - 15 nov. 2008 à 16:35
Arnal88 Messages postés 96 Date d'inscription samedi 21 octobre 2006 Statut Membre Dernière intervention 25 avril 2009 - 15 nov. 2008 à 23:06
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/48421-equation-differentielle-de-laplace-d-t-x-y-dx-d-t-x-y-dy-0

Arnal88 Messages postés 96 Date d'inscription samedi 21 octobre 2006 Statut Membre Dernière intervention 25 avril 2009
15 nov. 2008 à 23:06
Programme posté ici :

http://www.vbfrance.com/codes/RESOLUTION-EQUATION-CHALEUR_48465.aspx

Bon courage pour l'explorer.
Je me suis appliqué pour l'organisation du code et je l'ai commenté (commentaires XML)
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
15 nov. 2008 à 22:55
Salut,

"je pense que dans ce cas, la solution est nécessairement convergente, donc ta première condition devient inutile.."

> Oui, je pense aussi que cela est convergent... mais je n'ai pas lu que la méthode était nécessairement convergente... donc c'est une précaution. Je vois mal faire planter les PC des utilisateurs, parce que je n'ai pas de certitude... et il est difficile de le prouver, même si l'intuition semble correcte.

=

"Autre question : tu tires d'où la formule pour calculer Fin ?"

> Comme dit en 1er réponse, il fallait trouvé une formule donnant un nb d'itération suffisant pour que ce soit la deuxième régle d'arrêt (la précision) qui s'applique. (donc "presque" à coup sur, voir à coup sur, si nos intuitions précedente sur la convergence est juste)
Donc j'ai fait des tests pour observer le nb d'itération nécessaire pour obtenir la précision 0. (et également avec d'autres précisions)... Suite à cela des constats statistiques simples s'imposent :
- Le nb d'itération nécessaire est quasi-constant en fonction du pas de la grille et de la précision,
- Pour la précision 0, évidemment le nb d'itération est le plus fort,
- Le changement des conditions de température, n'a pas d'impact (significatif) sur le nb d'itération.
Par conséquent, j'en ai sorti une équation donnant la limite... car limite semble y avoir...
(=> nota : si ce constat est juste, alors cela implique une convergence certaine -:); )

=

" Au centre, c'est la valeur qui se rapproche de la solution le plus TARD, mais en faisant la différence avec l'itération précédente, c'est la VITESSE de variation que tu évalues. "
" En termes mathématiques, tu trouves la dérivée temporelle (à un coeff près)."

> NON. Je vois bien ce que tu veux dire. Ton raisonnement est subtil, donc difficile à expliciter facilement. En réalité, tu penses qu'en faisant la différence et implicitement en la divisant par le pas de temps, pris ici à 1 à chaque itération, qu'on retrouve la dérivé. Qui dit dérivé, dit vitesse.
Alors, dans un certain sens c'est juste, mais en faisant la différence j'obtiens AUSSI (et simplement) l'écart entre les deux évaluations. Donc, comme tu le dis "c'est la valeur qui se rapproche de la solution le plus TARD". Qui dit le plus tard, dit aussi que la précision (écart) sera obtenu en dernier sur le centre.

=

" Tu dois donc trouver l'endroit où la valeur converge le plus vite, et seulement là comparer à la précision demandée. Car ta condition d'arrêt n'est pas l'écart entre la valeur et la solution exacte, mais une condition sur la dérivée.
(je sais pas si je suis bien clair là...) " [Si... si... l'impératrice...]

> Ici on voit bien notre divergence de raisonnement : Tu dis : " Car ta condition d'arrêt n'est pas l'écart entre la valeur et la solution exacte "
C'est donc exactement l'inverse que je cherche à faire. La précision est la mesure entre la solution exacte et l'évaluation. Et cette dernière convergence le plus lentement vers le centre.

" Enfin réfléchis bien à ça, et dis-moi ce que tu en penses. "
> IL me semble donc par correct de raisonner avec une idée de vitesse, car il est certain que l'arrêt se ferait trop tôt, voir juste après la 1er itération.

Pour preuve ? juste après, ta encore très bonne remarque... étayé par un magnifique contre exemple (apparent) de mes propos. Tu notes que :
" Essaye avec 0°C partout, et 200°C à droite. Tu verras que ça marche pas. Avec ma méthode, ça marcherait. "

Et hélas, oui cela ne marche pas avec 0° sur 3 côtés et 200° sur le 4ième... Bigre ! Ai-je faut ? Et bien, non. Outre le fait que le schéma présente un cas particulier qui met mon critère d'arrêt en défaut, il suffit d'essayer un autre schéma simple... Par exemple, au lieu de 0°, mets 1°C... et tu verras que la convergence s'appliquer parfaitement...

J'ai fait des tests avec 1°C sur 3 côtés et 200°C sur le 4ième. J'ai retiré la règle d'arrêt sur la précision, et mis une borne Fin à 100000 avec sur une grille 10x10. Les résultats obtenus sont donc les solutions exactes (enfin, impossible de faire mieux sur ordi). Puis, j'ai décalé les résultats. J'ai remis mon programme initial. Refait la même chose, avec la précision 0. Puis, la différence entre les résultats.
Ainsi, je compare la meilleur évaluation, avec ma règle d'arrêt. On constate presque aucune différence.

JE t'invite à regarder ce que cela donne.

Mais, reste que le cas particulier de 0°... et qu'on comprend bien pourquoi cela met en défaut ma règle d'arrêt, puisque le temps que les calculs se propagent au centre n'est pas suffisant et comme ensuite on fait 0 moins 0... Je n'ai pas regardé (étant donné qu'il est assez tard), mais en première idée, il faut définir un nombre minimum d'itération avant d'appliquer la règle d'arrêt, ceci pour que les résultats intermédiaires ne soient plus égale à 0, qui représente donc une valeur nulle mettant en défaut la comparaison de la précision à 0...

D'ailleurs, une autre façon de montrer que ton exemple, n'est qu'un cas particulier, c'est tout simplement en mettant une valeur très proche de zéro à la place de zéro... Par 0.001 au lieu de 0... Je l'ai fait, et mon programme est tout à fait concluant.

( Notons aussi, que l'information dans la macro du nombre d'itération est présente uniquement si c'est la règle d'arrêt sur la précision qui s'implique... autrement il n'y a pas de texte... )

=

Par ailleurs, si tu as fait un programme complet, je suis très intéressé... et oui, je bosse dessus même pour le boulot...

=

Amicalement,
Us.
Arnal88 Messages postés 96 Date d'inscription samedi 21 octobre 2006 Statut Membre Dernière intervention 25 avril 2009
15 nov. 2008 à 21:12
Ben dis donc, tu n'as pas traîné pour la mise à jour !

Ok pour l'orientation du graphique, ça marche.

J'ai bien vu qu'on peut régler le nombre de pas. Mais je persiste à penser que 4 est insuffisant. Le but est de discrétiser l'espace. Avec 4, c'est quand même grossier comme discrétisation. Allez, disons que 10 ça suffira ! :-)

Je comprends ton raisonnement pour la 1ère condition d'arrêt. Sauf que toi, tu travailles dans le cas stationnaire. Dans l'équation que j'avais mis au début, tu mets donc dT/dt = 0. Je ne suis pas sûr à 100%, mais je pense que dans ce cas, la solution est nécessairement convergente, donc ta première condition devient inutile..

Autre question : tu tires d'où la formule pour calculer Fin ?
Fin = Exp(2 * Log(Pasmax) + 1.3)


Pour le test seulement au centre, je ne suis pas d'accord !
Au centre, c'est la valeur qui se rapproche de la solution le plus TARD, mais en faisant la différence avec l'itération précédente, c'est la VITESSE de variation que tu évalues.
En termes mathématiques, tu trouves la dérivée temporelle (à un coeff près).
Or, au centre, c'est justement l'endroit où cette vitesse de variation est la plus faible ! Tu le dis toi même : "c'est tout simplement la valeur qui converge la plus lentement"
Tu dois donc trouver l'endroit où la valeur converge le plus vite, et seulement là comparer à la précision demandée. Car ta condition d'arrêt n'est pas l'écart entre la valeur et la solution exacte, mais une condition sur la dérivée.
(je sais pas si je suis bien clair là...)

Enfin réfléchis bien à ça, et dis-moi ce que tu en penses.

Essaye avec 0°C partout, et 200°C à droite. Tu verras que ça marche pas. Avec ma méthode, ça marcherait.


Je parle en connaissance de causes : j'ai fait un programme complet en VB2005 pour résoudre l'équation de la chaleur dans le cas non stationnaire.
Mais je ne l'ai encore pas posté sur Codes Sources. Je vais peut-être le faire rapidement puisque tu bosses dessus.
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
15 nov. 2008 à 17:36
Bonjour,

1/ Bonne remarque concernant l'orientation du graphique. Mais si je mets ce que tu proposes, alors ce sont les valeurs du tableur qui n'ont plus la bonne orientation par rapport à la macro.
Donc une meilleure solution consiste à faire une orientation du graphique de 180°, et le tour est joué. Je rajoute :
ActiveChart.Rotation = 180

2/ Le nombre de pas est réglable facilement, libre à tous de mettre ce qu'il veut... J'ai choisi 4, plus en pensant aux premières utilisations de ceux qu'ils veulent voir, afin de ne pas se retrouver avec un grand tableau... J'aurai compris ta remarque si cela était codé en dur, mais là, non.

3/ la condition d'arrêt à 400. Tu as raison, on ne sait pas d'avance combien de fois il faut boucler pour obtenir la précision demandée. Mais... parce que il y a un "mais"... La méthode des différences finies, dans l'absolu, ne converge pas nécessairement. Ce qui explique que je bloque le nombre d'itération, afin de ne pas se retrouver avec une boucle infinie.
Mais... car il y a un "mais"... Tu as tout de même raison de soulever ce problème, car il fait penser aussi, que si on avait choisi un nb de pas très grand, 400 ne serait pas suffisant. Il faut donc définir cette valeur en fonction du nb de pas.

4/ Le test de l'écart ne pose pas de problème, si les températures sont positives, car dans ce cas nécessairement l'écart sera positif. Mais pour plus de généralité, la valeur absolue s'impose effectivement.
Ensuite, je regarde l'erreur qu'au centre, car c'est tout simplement la valeur qui converge la plus lentement... donc inutile de tout tester... Dans le cas où la grille ne possède pas un centre exact, ce sont tj les valeurs centrales qui auront une convergence plus lente...

Merci pour tes bonnes remarques. Je vais mettre à jour.

Amicalement,
Us.
Arnal88 Messages postés 96 Date d'inscription samedi 21 octobre 2006 Statut Membre Dernière intervention 25 avril 2009
15 nov. 2008 à 16:35
Salut us_30,

Pas mal ta macro, Excel se prête bien à ce genre de résolutions.

Tu résous l'équation de la chaleur :
dT/dt = K Delta T (Delta c'est le Laplacien)
dans le cas stationnaire, ce qui nous donne :
Delta T = 0

ce qui nous donne en 2D l'équation aux dérivées partielles de Laplace.

Jusque là, c'est tout bon..

Après, il y a des trucs qui sont pas au point. Je pense que tu ne t'es pas assez relu avant de poster.

Premièrement, le graphique déconne. Si je mets 100°C au bord du haut et 0°C aux autres, le graphique affiche à l'envers ! Il met le bord à 100°C en bas. En effet, tu orientes ton axe des Y vers le haut, alors que l'instruction Cells(x,y) utilise une orientation des y vers le bas.
Dans l'écriture du tableur, mets ça :
Cells(j + 1, i + 1) = T(i, PasY - j)


Une autre remarque :
Pour le nombre de pas suivant X ou Y, tu proposes par défaut 4. C'est clairement insuffisant. Propose par défaut un nombre plus grand, au moins 20 !


Dernier problème : la condition d'arrêt.
Pourquoi est-ce que tu mets une "1ère condition" (la boucle For) qui limite le nombre d'itérations à 400 ?
Tu ne sais pas a priori le nombre d'itérations qui seront nécessaires pour atteindre la précision demandée, donc tu ne dois pas mettre de limite à 400 !

La 2ème condition n'est pas bonne non plus.
Ton écart, c'est :
Ecart = T(PasX / 2, PasY / 2) - Tini
Premièrement, une valeur absolue est indispensable, puisque tu fais un test < juste après. Ton programme va s'arrêter tout de suite si Tini > T(PasX / 2, PasY / 2).

Ensuite, tu ne regarde l'erreur que au centre ! Pourquoi ??
Il faut regarder la différence en chaque point, puis prendre la plus grande, et seulement comparer cette valeur à Tini !

Enfin voilà..
Il te reste pas mal de trucs à corriger.

J'attends tes modifs avant de mettre une note. Cette première version n'est encore pas au point.

Bon courage
Rejoignez-nous