Bon travail messieurs, vous y êtes presque!
99% du temps le problème est beaucoup moins compliquer qu'on le pense. Croyez-moi, j'ai assez d'imagination pour croire que des forces mystérieuses sont à l'oeuvre dans mon code où bien qu'un phénomène étrange vient s'immiscer dans mon modèle. Quand on est rendu à ce stade (comme penser que c'est de la faute de l'ordinateur ou peut-être la façon qu'on appuie sur une touche du clavier, et je dis ça en m'incluant... sans blague) c'est qu'on se fait des idées et qu'il faut simplement revenir sur nos vérifications: on n'a pas trouvé l'erreur la première fois, il faut chercher l'erreur à nouveau. Je dis ça avec beaucoup d'humour bien sûr, je le vis assez souvent.
Par exemple, Julien a trouvé que quelque chose cloche avec le bout de code: f(2) = g - ((sign(z(2))*k*z(2)^2)-10*(z(1)-150)-(7*z(2)*m))/m;
Étrangement, Thomas voit aussi un problème avec ce bout de code. Une coïncidence? Non, vraiment pas! Puisque je me permet de faire un peu d'humour, je vais aussi être honnête. Quand j'ai pris le temps de me faire un bout de code rapide pour voir ce qui pourrait clocher avec votre démarche plus tôt aujourd'hui, je me suis retrouvé à inverser le signe de certains termes du système. J'ai donc aussi constaté une croissance de la variable position et ainsi, bye bye sauteur! J'ai vite réalisé (parce que je sais que je fais 10 erreurs par ligne de code...) qu'en écrivant f(2) j'ai modifié le terme de droite avec des parenthèses après l'avoir écrit pour inclure le facteur 1/m qui vient de la gauche de l'équation différentielle. Et donc les parenthèses que j'ai ajoutées pour n'écrire qu'une seule fois 1/m ont du même coup transformé les signes négatifs en signes positifs. C'est exactement ce que je voulais dire quand je parlais du lièvre qui trébuche sur les fleurs du tapis!
Donc, avez-vous comptabilisé vos parenthèses? Avez-vous essayé d'écrire au long l'expression DANS VOTRE CODE pour être certain de ne pas avoir fait l'erreur?
J'ai réussi à trouver le problème rapidement dans mon code parce que j'ai compris que la force n'était pas bonne (grandit au lieu de diminuer, interprétation physique qui vient de l'expérience) et aussi parce que j'ai abusé un peu trop des parenthèses pour sauver du temps. Si on comptabilise le temps que vous avez pris à tourner en rond avec ce problème, on comprend rapidement qu'il faut écrire ses programmes comme une tortue et clarifier tout au maximum parce que inévitablement on devra y revenir pour corriger un bug..
Bon travail!