Bonjour à tous,
Il y a quelque semaine de cela, on nous a donné un examen d'informatique pour la physique avec en gros le sujet suivant :
On a un pendule pesant de masse m pendu à un fil de longueur R.
Ce pendule fait un angle avec la verticale.
Une étude physique du problème nous donne l'équation différentielle :
... avec :
On ne sais pas résoudre cette équation pour trouver , donc on va utiliser une méthode incrémentale (pas à pas) pour calculer et ses dérivées ( et ).
On nous donne alors :
(formules obtenues par développement de Taylor à l'ordre 2)
C'est là que les soucis commencent :
Le jour du TP, j'ai réussi à avoir de bonnes valeurs : oscillait gentiment entre deux valeurs constantes, avec la bonne fréquence.
Aujourd'hui, en voulant refaire la même chose chez moi, j'obtiens presque la même chose, à ceci près que "diverge" : l'enveloppe de la courbe est une fonction affine (~0.0021*t + ) au lieu d'être constante...
(bleu : résultat obtenu, rouge : résultat "théorique", jaune : enveloppe)
J'ai beau tourner la chose dans tous les sens : je ne vois pas ce que j'ai pu faire pour avoir un résultat si différent.
Voici le code que j'utilise pour calculer les valeurs :
Code:float fT = 0, fY1 = 0.017f, fY2 = 0, fY3 = (-9.81f/0.25f)*sin(0.017f); // theta à t=0 vaut ~1 degré for (uint ui = 0; ui < uiPointNbr; ++ui) { // le temps fT += fDT; // theta fY1 += fDT*fY2 + (fDT*fDT/2)*fY3; // theta prime fY2 += fDT*fY3; // theta seconde fY3 = (-9.81f/0.25f)*sin(fY1); }
En utilisant une autre équation différentielle plus simple :
... j'obtiens un résultat bien plus fidèle à la réalité, mais une erreur subsiste (polynôme du second degré en t).
Pourtant, le développement de Taylor est exact ici, puisque est nul. Il y a donc une erreur dans mon traitement, mais je n'arrive pas à voir où...
Est-ce que vous auriez une piste ?
Merci d'avance !
-----