#circuit RLC en régime libre
from scipy.integrate import odeint
import numpy as np
import matplotlib.pyplot as plt

#conditions initiales : condensateur chargé sous 10V et dérivée de la tension aux bornes de C nulle
u0=10
ud0=0
t0=0
tmax=50
w0=1

#on défin1t la fonction f contenant le système d'équations différentielles
Q1=5
def f1(s,t):
    u=s[0]
    ud=s[1]
    return np.array([ud,-w0*ud/Q1-w0**2*u])#on retourne la liste des dérivées de u et de ud

Q2=0.5
def f2(s,t):
    u=s[0]
    ud=s[1]
    return np.array([ud,-w0*ud/Q2-w0**2*u])

Q3=0.2
def f3(s,t):
    u=s[0]
    ud=s[1]
    return np.array([ud,-w0*ud/Q3-w0**2*u])

#vecteur des temps
t=np.linspace(t0,tmax,500)
#calcul des u et up à t
s1=odeint(f1,[u0,ud0],t)#renvoie une matrice où chaque ligne correspond aux différents instants t et les colonnes respectivement à u(t) et ud(t)
s2=odeint(f2,[u0,ud0],t)
s3=odeint(f3,[u0,ud0],t)


#tracé des courbes
plt.subplot(311)
plt.plot(t,s1[:,0],label='Q=5') # on ne prend que la première colonne de s pour avoir u
plt.legend(loc="best")
plt.xlabel("temps en s")
plt.ylabel("tension en V ")
plt.title ("tension aux bornes de C en fonction du temps pour différentes valeurs de Q")
plt.grid(True)

plt.subplot(312)
plt.plot(t,s2[:,0],label='Q=0.5') # on ne prend que la première colonne de s pour avoir u
plt.legend(loc="best")
plt.xlabel("temps en s")
plt.ylabel("tension en V ")
plt.grid(True)

plt.subplot(313)
plt.plot(t,s3[:,0],label='Q=0.2') # on ne prend que la première colonne de s pour avoir u
plt.legend(loc="best")
plt.xlabel("temps en s")
plt.ylabel("tension en V ")
plt.grid(True)


plt.show()