Modélisation naïve de l’oscillation d’un ressort : la méthode la moins bonne marche le mieux ?
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Modélisation naïve de l’oscillation d’un ressort : la méthode la moins bonne marche le mieux ?



  1. #1
    Hibou57

    Modélisation naïve de l’oscillation d’un ressort : la méthode la moins bonne marche le mieux ?


    ------

    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.

    -----

  2. #2
    gts2

    Re : Modélisation naïve de l’oscillation d’un ressort : la méthode la moins bonne marche le mieux ?

    Bonjour,

    Vos raisonnements partent sur de bonne base (ce sont les points de départ de l'amélioration de l'intégration d'Euler appelée explicite y(i+1)=y(i)+y'(i)*delta t).
    Voir par exemple : info-llg.fr/...equa_diff
    Mais,
    - après tests, les différences entre l+v*dt ; l+(v+dv)*dt et l+(v+dv/2)*dt ne sont pas si marquées
    - et le raisonnement que vous tenez sur l, vous pouvez le tenir aussi sur v : vous avez calculé la variation de v à partir de la longueur à l'instant t, or la longueur varie. Donc "l’erreur de raisonnement mathématique" est que vous n'avez fait que la moitié du chemin (il faut prendre en compte le problème à la fois sur l et v).

    On s'aperçoit que la meilleure méthode est celle avec évaluation à la fin de l et v : méthode d'Euler implicite .

    La prise en compte de dv/2 est un peu plus subtile et compliqué : c'est le point de départ de la méthode de Runge-Kutta (paragraphe 2 page 9.6).

    Pour ce qui est des mathématiques, la résolution numérique d'équation différentielle est un domaine mathématique reconnu. Et votre étude (calcul sur un système analytiquement soluble) peut être considéré comme un test des dites méthodes.

    Toujours du point de vue mathématiques (numériques), la vérification que les grandeurs conservatives sont bien conservées fait partie des contrôles, donc vous êtes parfaitement dans les clous (mathématiques).

  3. #3
    Black Jack 2

    Re : Modélisation naïve de l’oscillation d’un ressort : la méthode la moins bonne marche le mieux ?

    Bonjour,

    Utiliser un grand nombre de calculs répétitifs entraine souvent de la dérive.

    La méthode avec de dV/2 diminue l'imprécision des calculs intermédiaires mais pas la dérive.

    Il existe des méthodes pour minimiser la dérive, par exemple :

    La méthode d'Euler-Cromer (La plus simple)

    On abandonne le point milieu (dV/2) et on applique la vitesse finale directement. L'énergie globale reste stable.

    a = k * L / m
    dV = a * dt
    V = V + dV (On met à jour la vitesse TOUT DE SUITE)
    dL = V * dt (On utilise la nouvelle vitesse brute, sans division)
    L = L - dL

    Et voila le résultat sur excel : (avec 5000 pas de dt = 0,01512 s, Lo = 1 , m = 1 , k = 1 et Vo = 0

    Plus de dérive ...

    Il y a aussi moyen d'éviter la dérive et augmenter la précision mais c'est un peu plus complexe (méthode de Runge-Kutta 4)
    Images attachées Images attachées  

  4. #4
    Hibou57

    Re : Modélisation naïve de l’oscillation d’un ressort : la méthode la moins bonne marche le mieux ?

    Citation Envoyé par gts2
    - après tests, les différences entre l+v*dt ; l+(v+dv)*dt et l+(v+dv/2)*dt ne sont pas si marquées
    J’ai d’abord vu ça aussi, c’est après plusieurs cycle que la différence se voit et elle se voit de plus en plus.

    Citation Envoyé par gts2
    - et le raisonnement que vous tenez sur l, vous pouvez le tenir aussi sur v : vous avez calculé la variation de v à partir de la longueur à l'instant t, or la longueur varie. Donc "l’erreur de raisonnement mathématique" est que vous n'avez fait que la moitié du chemin (il faut prendre en compte le problème à la fois sur l et v).
    C’est tellement pertinent que ça ne peut être que ça. Alors en y repensant, pendant que la longueur varie aussi, ce qu’elle ne fait pas instantanément, l’accélération pendant l’intervalle, est en fait moindre et là ça colle exactement. Je ne l’ai pas encore fait, mais crois deviner que si je trouve une solution à cette correction, je vais me retrouver avec une formule équivalente à la première version, juste un peu décaler dans le temps quelque part dans un intervalle, et au final, le résultat sera le même qu’avec la première version, qui était correcte par heureux hasard pour parce que la physique le fait comme ça.

    Ce qui a fait que je n’ai pas sut le voir, c’est peut‑être d’avoir trop vu la calcul de l’accélération contre une valeur instantanée. Elle l’est, puisqu’elle est même le point de départ des variations, mais elle varie aussi et elle varie d’après la longueur.

    Il ne me reste plus qu’à prendre le temps de trouver une idée de correction tenant compte du fait que la longueur varie dans l’intervalle et normalement je devrais constater que ça se simplifie pour être quasiment la même chose que la première version.

    Citation Envoyé par Black Jack 2
    La méthode avec de dV/2 diminue l'imprécision des calculs intermédiaires mais pas la dérive.
    Oui, je suis bien conscient de ça et je m’en méfie même à priori, mais quand je vois que c’est assez fidèle, je l’accepte tout autant facilement que je m’en méfie à priori.

    Citation Envoyé par Black Jack 2
    On abandonne le point milieu (dV/2) et on applique la vitesse finale directement. L'énergie globale reste stable.
    Voilà, c’est justement ce que je crois venir de comprendre.

    Il faudra quand‑même que je me donne l’occasion de trouver les références que vous donner tous deux, même si ce n’est que pour les comprendre au moins en surface.

  5. A voir en vidéo sur Futura

Discussions similaires

  1. Modelisation d'une poutre en oscillation
    Par invite75521bd7 dans le forum Physique
    Réponses: 1
    Dernier message: 04/03/2015, 15h25
  2. Oscillation harmonique simple d'un système masse-ressort.
    Par invitefbc652a5 dans le forum Physique
    Réponses: 8
    Dernier message: 26/01/2013, 08h55
  3. Oscillation d'un ressort sous sa propre masse
    Par invite581a4c33 dans le forum Physique
    Réponses: 1
    Dernier message: 04/01/2008, 09h21
  4. Mieux vaut être riche et en bonne santé
    Par invite600c2730 dans le forum Environnement, développement durable et écologie
    Réponses: 24
    Dernier message: 05/09/2005, 01h00