#!/usr/bin/python
# -*- coding: utf-8 -*-

# Concours Centrale-Supélec
# Épreuve de Physique-Chimie II (MP)
from numpy import linspace
from pylab import grid, axis, plot, show
from scipy.integrate import odeint

# ----------------------------- ne pas modifier ---------------------------------
# Cette ligne permet de définir l'équation différentielle qui régit 
# le mouvement du mobile. Elle ne doit donc pas être modifiée.
f = lambda y,_ : [y[-1], - nu*y[-1] - k*y[-2]*(1 - l0*(y[-2]*y[0] + h*h)**-.5)/m]
# -------------------------------------------------------------------------------

# constantes physiques, à identifier éventuellement
nu = 0.1
k = 2.00
l0 = 0.50
h = 0.3

m = 1.00

# conditions initiales, position et vitesse
x0 = 0.5
v0 = 0
# valeur maximale pour le tracé
xmax = 3.0

# intervalle de temps pour la résolution
t0 = 0.0
t1 = 20.0
nbpts = 200
t = linspace(t0, t1,nbpts)

# résolution...
solution = odeint(f, [x0, v0], t)
# ... et tracé de X(t)
X, V = solution[:,0], solution[:,1]
grid()
axis([t0, t1, -xmax, xmax])
plot(t,X)
show()
