
#circuit RLC en régime libre

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
nt=500#nombre de points de discrétisation
Te=(tmax-t0)/(nt-1)#pas de discrétisation


#vecteur des temps
t=np.linspace(t0,tmax,nt)

#calcul par la méthode d'Euler de la tension u pour différentes valeurs du facteur de qualité
Q1=5
u1=np.zeros(nt)
u1[0]=u0
u1[1]=u0
for i in range(1,nt-1):
    u1[i+1]=Q1/(w0*Te+Q1)*(u1[i]*(2+(w0*Te)/Q1-w0**2*Te**2)-u1[i-1])

Q2=0.5
u2=np.zeros(nt)
u2[0]=u0
u2[1]=u0
for i in range(1,nt-1):
    u2[i+1]=Q2/(w0*Te+Q2)*(u2[i]*(2+(w0*Te)/Q2-w0**2*Te**2)-u2[i-1])
Q3=0.2
u3=np.zeros(nt)
u3[0]=u0
u3[1]=u0
for i in range(1,nt-1):
    u3[i+1]=Q3/(w0*Te+Q3)*(u3[i]*(2+(w0*Te)/Q3-w0**2*Te**2)-u3[i-1])

#tracé des courbes
plt.subplot(311)
plt.plot(t,u1,label='Q=5')
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,u2,label='Q=0.5')
plt.legend(loc="best")
plt.xlabel("temps en s")
plt.ylabel("tension en V ")
plt.grid(True)

plt.subplot(313)
plt.plot(t,u3,label='Q=0.2')
plt.legend(loc="best")
plt.xlabel("temps en s")
plt.ylabel("tension en V ")
plt.grid(True)



plt.show()