Bonjour, je suis nouveau sur ce forum et je tiens à dire qu'il est très intéressant.
Alors voici mon problème : je suis en train de créer un logiciel de simulation du botafumeiro (pendule dont la longueur varie). Il m'a donc fallu résoudre une équation différentielle du 2° ordre non linéaire à coefficients variables (ça fait mal )
Jai donc utilisé la methode d' Euler :
Pour simplifier, voici l'équation : f''(t) + a(t)*f'(t) +b(t)*sin(f(t)) = 0
j'ai des conditions initiales, puis je fais la récurrence :
f(t+h) = f(t)+h*f'(t)
f'(t+h) = f'(t)+h*f''(t)
f''(t+h) = -a(t+h)*f'(t) - b(t+h)*sin(f(t+h))
Mon programme me donne des résultats totalement délirant, j'ai donc tester simplement avec un tableur. meme resultat, par contre si je fixe les coefficients en constante, la méthode fonctionne, j'obtiens une courbe pseudo périodique(c'est le pendule simple)
Du coup j'aimerais bien savoir si la méthode d'Euler fonctionne aussi avec des coefficients variables, et si oui si vous ne voyez pas une erreur dans mon application de la méthode.
Voici mon code en pascal:
Si vous pouvez m'indiquer des axes de recherche ce serait sympa.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 (*conditions initiales*) teta[0] := teta0; dteta[0] := v0; ddteta[0] := 0; For j:=1 to 100 do (* METHODE D'EULER*) begin (*excitation sinusoidale de la corde*) l := L0 * cos(2*Pi*fL*j); dl := -L0*2*Pi*fL * sin(2*Pi*fL*j); {sa dérivée} if l=0 then l := L0 * cos(2*Pi*fL*(j-0.1)); (*petite triche pour eviter la division par zero*) (*les coefficients*) a := 2*(dl+kf)/l ; b := g/l ; (* itération*) teta[j] := teta[j-1]+1*dteta[j-1]; (* pas de resolution egal à 1 *) dteta[j] := dteta[j-1]+1*ddteta[j-1]; ddteta[j] := -a * dteta[j] -b * sin(teta[j]); end;
merci d'avance
Partager