# Créé par ruben, le 05/02/2025 en Python 3.7
# ------ Import des bibliotheques
import matplotlib . pyplot as plt # pour les graphiques
import numpy as np # pour les tableaux
import scipy . integrate as sp # pour les outils numeriques comme odeint
# ------ Parametres physiques
g = 9.81 # pesanteur , m/s**2
l = 1.00 # longeur du pendule , m
w0 = (g/l )**0.5 # calcul de la pulsation , rad /s
T0=2*3.14/w0
# ------ Solution de l 'é quation générale , sans approximation , à l 'aide d'odeint
# Dé finition de la fonction f telle que d/dt(theta , theta_point ) = F(theta , theta_point )
def F(y,t):
    return (y[1] , -w0 **2* np.sin (y [0]))
t = np. linspace (0 ,5*T0 ,1000) # tableau des temps , va de 0 à 5 xla période , avec 1000 pointstheta0 = 50 * np.pi /180. # angle initial ( rad )
theta_prime0 = 0 # vitesse angulaire initiale ( rad /s)
theta0 = 50 * np.pi /180.# angle initiale
y_ini = ( theta0 , theta_prime0 ) # valeur initiale de y = (theta , theta_point )
y_sol = sp. odeint (F,y_ini ,t)
theta = y_sol [: ,0]
theta_prime = y_sol [: ,1]
plt . plot (t,theta , label =" solution de l 'é quation non lin é aire avec odeint ")
plt . xlabel ("t (s)")
plt . ylabel (" theta ( degr és)")
plt . legend ()
plt . show ()
# ------
# ------ Pour trouver automatiquement la pé riode de la solution
L=[]
for k in range ( len (t) -1):
    if theta [k]* theta [k+1] <0:
        L.append (t[k])
print (L[2] -L [0])

