fonction odeint équation du second ordre
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:
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() |