import numpy as np
import matplotlib.pyplot as plt # pour les graphiques
from scipy.integrate import odeint # pour obtenir un module contenant différentes méthodes d'intégration
from math import sin, cos, pi


##### Constantes et conditions expérimentales #####

R = ..... # résistance totale du circuit, en \Omega
L = ..... # inductance de la bobine, en H
C = ..... # capacité du condensateur, en F
w0 = ..... # pulsation propre de l'oscillateur
T0 = ..... # période propre de l'oscillateur
Q = ..... # Facteur de qualité de l'oscillateur
Em = ..... # amplitude de la force électromotrice de la source de tension, en V
wi = ..... # borne inférieure en pulsation, en rad/s
wf = 3*w0 # borne supérieure en pulsation, en rad/s
N = 10000 # nombre de points de discrétisation pour le tracé
w = np.linspace(wi,wf,N) # liste des pulsations (N+1 pulsations) réparties régulièrement entre wi et wf
x = w / w0 # pulsation réduite, sans dimension


##### Graphiques #####

plt.figure(1)
for Q in [0.5, 1.0, 2.0, 3.0, 5.0, Q]:
    g = (1-x**2)**2 + (x/Q)**2
    Ucm = Em/(np.sqrt(g)) # amplitude (réelle) de la tension aux bornes du condensateur
    plt.plot(x, Ucm/Em, label='Q='+str(round(Q,2)), linewidth=1)
plt.legend(loc='right')
plt.title(r'Résonance (ou non) en tension aux bornes du condensateur dans un circuit $RLC$ série') # titre du graphique
plt.xlabel(r'$x = \dfrac{\omega}{\omega_0}$')
plt.ylabel(r'$\dfrac{{U_c}_\mathrm{m}}{E_\mathrm{m}}$')
plt.show()
plt.grid() # affichage d'une grille


plt.figure(2)
g = (1-x**2)**2 + (x/Q)**2
for Q in [0.5, 1.0, 2.0, 3.0, 5.0, Q]:
    phi = - pi/2 + np.arctan((1-x**2)*(Q/x))
    plt.plot(x, phi, label='Q='+str(round(Q,2)), linewidth=1)
plt.legend(loc='right')
plt.title(r'Déphasage de la tension aux bornes du condensateur dans un circuit $RLC$ série') # titre du graphique
plt.xlabel(r'$x = \dfrac{\omega}{\omega_0}$')
plt.ylabel(r'$\varphi \, (\mathrm{rad})$')
plt.show()
plt.grid() # affichage d'une grille