bonjour pour un projet je dois resoudre une equation differentielle du second ordre non linéaire avec la fonction odeint. Elle est de la forme :
d²u/dt² + du/dt + Q²sin(u) = 0.
Pour u(0) < pi, tout se passe bien et le graphe que j'obtiens est bien celui attendu.
Cependant, une fois cette valeur dépassée pour ma dondition initiale, les oscillations ne se font plus autour de 0 mais de u(0).
Est-ce normal ? Sinon comment régler cela ? (code ci dessous)

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
29
30
31
32
33
34
35
36
37
38
39
40
 
pas = 0.01
Q=10
t=30
u0=pi
v0=0
X_CI=np.array([u0,v0])
pasQ = 0.01
a = 0.1
b = 3
 
def F(X, t, Q) :
 
    """
    Entrée:
        X tableau contenant u et v
        t un flottant
    Sortie:
        dérivées de u et v
    """
 
    u=X[0]
    v=X[1]
    dudt=v
    dvdt=-v-Q*Q*sin(u)
 
    return([dudt , dvdt])
 
temps=np.arange(0,t,pas)
sol=odeint(F, X_CI, temps, args=(Q,))
u=sol[:,0]
v=sol[:,1]
 
plt.plot(temps,u,'r',label='u(t)')                                            #tracé de u(t)
plt.title('evolution de u et du/dt au cours du temps')
plt.plot(temps,v,'b',label='du(t)/dt')
plt.xlabel('temps')
plt.legend(loc='best')
plt.grid()
plt.show()