Bonjour les gens,
J’ai voulu écrire sous forme d’une minuscule programme, une modélisation d’un ressort, surtout un ressort qui oscille. Ceci n’a rien d’exception et est plus naïf ou trivial. J’ai d’abord écrit une première version qui fonctionne parfaitement bien, mais en la relisant, j’ai trouvé que quelque chose n’était pas mathématiquement correcte. En voulant corrigé cette erreur, j’ai eu la déception de constater que la version me semblant la plus correcte, ne fonctionne pas bien. C’est ce que j’essaie de comprendre. La question concerne un peu plus les maths que la physique, mais comme c’est un modèle numérique d’un phénomène physique, je le poste en physique.
La première version :
Quatre variables sont initialisées :
k = 1 -- La raideur du ressort, en N/m.
m = 1 -- La masse au bout du ressort, en Kg.
l = 1 -- La longueur initiale d’étirement/compression du ressort en m.
v = 0 -- La vitesse initiale du bout du ressort en m/s, toujours zéro.
dt = 0.01 -- La variation de temps entre chaque pas de la simulation, en s.
Seules l et v varie, k, m et dt ne changent pas après l’initialisation, v est toujours initialisé à zéro.
Mise à jour en boucle :
a = (l * k) / m -- Accélération du bout du ressort d’après son étirement et sa masse, en m/s/s.
dv = a * dt -- Variation de la vitesse après l’intervalle dt.
dl = (v + dv) * dt -- Variation de la longueur d’après dv.
l = l - dl -- Nouvelle longueur après l’intervalle dt.
v = v + dv -- Nouvelle vitesse après l’intervalle dt.
La longueur l est affichée sur un graphique en début de chaque cycle.
Avec cette version, j’observe bien une oscillation cyclique, elle est exactement de 2 pi, ce qui est bon signe. Je constate aussi que pour multipli"' la fréquence par n, je dois multiplier la raideur par n² (ou multiplier la raideur par n et divisé la masse par n, les deux en même temps). Ça m’a surpris, parce que je pensais que la fréquence serait proportionnelle à n, mais bien que surpris, ça ne me semble pas impossible et j’ai par hasard trouvé une confirmation de cette relation ici : Quand le vent nous fait vibrer (interstices.info), 15 Mai 2025.
« Dans le cas d’un simple ressort, la fréquence propre a pour valeur la racine carrée du quotient de la raideur par la masse, divisée par 2Pi. »
Ça marche, oui, mais …
Problème théorique. Pendant l’intervalle dt, la vitesse passe de v à v + dv, mais v + dv, c’est la vitesse à la fin de l’intervalle dt. Pendant cette intervalle, la vitesse évolue. Je me suis donc dit que la variation de la longueur était nécessairement surestimée. En effet, elle est calculée avec l’expression (v + dv) * dt, qui suppose que la vitesse est constante pendant tout l’intervalle. Alors j’ai pensé à une meilleur approximation. En considérant une variation linéaire de la vitesse pendant l’intervalle dt, la variation de longueur doit être divisée par deux, intuitivement d’après la représentation graphique qui relie une vitesse par rapport au temps et la distance parcourue par rapport au même temps, c’est la surface sous la courbe de la vitesse. Si la vitesse est constante pendant l’intervalle dt, c’est la surface d’un rectangle dont la hauteur est dv et dont la largeur est dt. En supposant une variation linéaire de zéro à dv, (en oubliant pas que dv st ajouté à v), alors la courbe de la vitesse c’est la diagonale de ce rectangle et alors la distance parcourue, qui est la surface en dessous, c’est la moitié de la surface de ce rectangle. C’est équivalent en fait à la distance parcourue en considérant une vitesse constante pendant l’intervalle, cette vitesse étant la moyenne de zéro à dv, c’est à dire dv / 2 (un rectangle deux fois moins haut).
Mais si je remplace ceci :
dl = (v + dv) * dt
Par ceci :
dl = (v + (dv / 2)) * dt
Problème pratique. J’observe toujours une oscillation période, mais son amplitude ne fait que augmenter. L’amplitude passe de -1..+1 à quasiment -2..+2 en à peine 6 cycles et au delà c’est encore pire, par exemple au bout de 12 cycles, l’amplitude est déjà d’environ -14..+14.
Intuitivement, je me l’explique en me disant que la longueur (en étirement ou en compression) est moins réduite qu’elle ne le devrait et que alors le bout ressort du ressort, reçoit à chaque étape un supplément d’accélération (la variable a), qu’il n’a pas dans la version précédente.
Ça explique pourquoi l’amplitude de l’oscillation augmente, mais ça n’explique où est l’erreur de raisonnement mathématique pour décrire le phénomène physique. Parce que la seconde version, est mathématique plus correcte, ou je me trompe ?
Est‑ce un détail du calcul infinitésimal que je ne comprends pas ? Je me souviens que j’avais déjà remarqué, que étrangement, pour calculer des intégrale, décomposer le graphe en rectangles, fait des résultats plus correcte qu’en décomposant le graphe en trapèze. Est‑ce lié ? Parce que là aussi, je n’ai jamais compris qu’un calcul semblant mathématiquement plus précis, donne en pratique des résultats moins correctes.
Remarque : je ne suis pas très versé dans les maths et pas beaucoup plus dans la physique, raison pour laquelle je préfère utiliser ce genre de modèle plutôt que des mise en équation directement mathématiquement exacte, ce que je ne saurais pas démontré. Je sais que beaucoup profs de math n’accepteraient pas ça, mais je ne fait justement pas un exercice de math, j’essaie de trouver une solution à quelque chose (quelque chose d’autre sera ajouté à cette modélisation, plus tard).
Bref, je ne comprend pas qu’un calcul semblant plus précis produise un résultat physiquement aberrant, dans le cas présent, une oscillation dont l’amplitude ne fait qu’augmenter sans qu’il n’y ait d’apport d’énergie supplémentaire. C’est ça que je ne comprend pas.
-----

