🖥️ Circuit électrique d’ordre 3

Notebook Capytale de cet exercice : afd4-11678457

On s’intéresse au circuit électrique d’ordre 3 représenté ci-dessous.

Les valeurs des composants sont 𝑅=10 Ω, 𝐿=1⋅10−3 H et 𝐶=1⋅10−6 F. La source de tension fournit une tension constante 𝐸=10 V.

L’évolution de 𝑢 est régie par l’équation différentielle

𝑅𝐿𝐶2d3𝑢d𝑡3+2𝐿𝐶d2𝑢d𝑡2+𝑅𝐶d𝑢d𝑡+𝑢(𝑡)=0

On suppose que les conditions initiales sont 𝑢(𝑡=0)=0, d𝑢d𝑡|𝑡=0=3 V s−1 et d2𝑢d𝑡2|𝑡=0=0. L’objectif de cet exercice est de déterminer l’évolution de 𝑢(𝑡) au cours du temps.

1/ On note 𝑣(𝑡)=d𝑢d𝑡 et 𝑤(𝑡)=d2𝑢d𝑡2. Mettre le problème sous la forme d’un problème d’Euler en exprimant d𝑢d𝑡, d𝑣d𝑡 et d𝑤d𝑡 en fonction de 𝑢(𝑡), 𝑣(𝑡) et 𝑤(𝑡).

Corrigé
{d𝑢d𝑡=𝑣d𝑣d𝑡=d2𝑢d𝑡2=𝑤d𝑤d𝑡=d3𝑢d𝑡3=−2𝐿𝐶𝑤(𝑡)−𝑅𝐶𝑣(𝑡)−𝑢(𝑡)𝑅𝐿𝐶2

2/ On note Y np.array([u, v, w]). Définir une fonction dY_dt(Y,t) qui retourne le tableau d𝑌d𝑡 en prenant comme entrée le temps 𝑡 et le tableau 𝑌.

Corrigé
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 𝑡=0 et 𝑡=1 ms avec un pas de temps Δ𝑡=1 µs en utilisant la méthode d’Euler explicite.

Corrigé
# 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.

Corrigé
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

5/ Reprendre la question 3 en utilisant la fonction odeint pour calculer l’évolution de 𝑌(𝑡).

Corrigé
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)
  1. 1Documentation complète disponible à l’adresse https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.odeint.html