On s’intéresse au circuit électrique d’ordre 3 représenté ci-dessous.
Les valeurs des composants sont , et . La source de tension fournit une tension constante .
L’évolution de est régie par l’équation différentielle
On suppose que les conditions initiales sont , et . L’objectif de cet exercice est de déterminer l’évolution de au cours du temps.
1/ On note et . Mettre le problème sous la forme d’un problème d’Euler en exprimant , et en fonction de , et .
2/ On note Y np.array([u, v, w]). Définir une fonction dY_dt(Y,t) qui retourne le tableau en prenant comme entrée le temps et le tableau .
def dY_dt(Y, t):
u, v, w = Y
du_dt = v
dv_dt = w
dw_dt = (-2 * L * C * w - R * C * v - u) / (R * L * C**2)
return np.array([du_dt, dv_dt, dw_dt])3/ Écrire une suite d’instructions permettant de calculer l’évolution de entre et avec un pas de temps en utilisant la méthode d’Euler explicite.
# Définir les constantes
R = 10 # ohm
L = 1e-3 # H
C = 1e-6 # F
E = 10 # V
# Conditions initiales
u0 = 0 # V
v0 = 3 # V/s
w0 = 0 # V/s²
Y0 = np.array([u0, v0, w0])
# Paramètres de temps
t_final = 1e-3 # s
dt = 1e-6 # s
# Listes pour stocker les résultats
temps = [0]
Y = [Y0]
while temps[-1] < t_final:
Y.append(Y[-1] + dY_dt(Y[-1], temps[-1]) * dt)
temps.append(temps[-1] + dt)4/ Tracer l’évolution de au cours du temps.
import matplotlib.pyplot as plt
u = [y[0] for y in Y]
plt.plot(temps, u)
plt.xlabel('Temps (s)')
plt.ylabel('Tension u(t) (V)')
plt.title('Évolution de la tension u(t) au cours du temps')
plt.grid()
plt.show()La fonction odeint(func, y0, t)1 de la bibliothèque scipy.integrate permet de résoudre des problèmes d’Euler en appliquant des méthodes plus sophistiquées mais reposant sur le même principe. Elle prend en entrée
func: une fonction qui retourne la dérivée de l’état en fonction de l’état et du temps,y0: l’état initial,t: un tableau des instants où l’on souhaite connaître la solution.5/ Reprendre la question 3 en utilisant la fonction odeint pour calculer l’évolution de .
from scipy.integrate import odeint
# Paramètres de temps
t_final = 1e-3 # s
dt = 1e-6 # s
t = np.arange(0, t_final, dt)
# Calcul de l'évolution de Y(t) avec odeint
Y = odeint(dY_dt, Y0, t)