From b5dd7d8820aa74a13d96bce3f6ceab3135479ca7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20MARQUET?= <72651575+BreizhHardware@users.noreply.github.com> Date: Fri, 28 Mar 2025 16:06:33 +0100 Subject: [PATCH] add simulation scripts for electron motion in electric and magnetic fields --- TP Phyisque Particule/Exercice 2.py | 59 +++++++++++++++++++++++++++++ TP Phyisque Particule/Exercice 3.py | 42 ++++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 TP Phyisque Particule/Exercice 2.py create mode 100644 TP Phyisque Particule/Exercice 3.py diff --git a/TP Phyisque Particule/Exercice 2.py b/TP Phyisque Particule/Exercice 2.py new file mode 100644 index 0000000..c94c79f --- /dev/null +++ b/TP Phyisque Particule/Exercice 2.py @@ -0,0 +1,59 @@ +import matplotlib.pyplot as plt +import numpy as np + +e = 1.602 * 10 ** (-19) # C +m = 9.11 * 10 ** (-31) # kg +V0 = 2 * 10 ** (7) # m.s**(-1) +Ub = 1000 # V +d = 0.3 # m +L = 1 # m +dt = 10 ** (-9) # s +E = Ub / d + +list_vitesse = [0] + +list_position = [0] +time_collision = None + +list_real_position = [0] + +for i in range(0, 1000): + calcul = list_vitesse[len(list_vitesse) - 1] - (e * E * dt) / m + new_pos = list_position[len(list_position) - 1] + calcul * dt + if new_pos <= -0.15 and time_collision is None: + time_collision = i * dt + list_vitesse.append(calcul) + list_position.append(new_pos) + real_pos_calcul = 1 / 2 * ((e * E) / m) * ((i * dt) ** 2) + list_real_position.append(-real_pos_calcul) +print(list_vitesse) +plt.plot(list_vitesse, label="E = Ub/d") +plt.title("Vitesse en fonction du temps") +plt.xlabel("Temps (ms)") +plt.ylabel("Vitesse (m/s)") +plt.legend() + +plt.grid() +plt.show() + +print(list_position) + +plt.plot(list_position, label="Euler Method") +plt.title("Position en fonction du temps Y") +plt.xlabel("Temps (ms)") +plt.ylabel("Position (cm)") +plt.grid() +# Changer le label en x pour remplacer les 0 jusqu'à 1000 par 0 à 1000 * dt ( arrondir de 2 unités) +plt.xticks(np.arange(0, 1000, step=100)) +plt.xticks(np.arange(0, 1000, step=100), np.arange(0, 1000 * dt, step=100 * dt)) +# Arrondir les valeurs de l'axe des x à 2 décimales +plt.xticks(np.round(plt.xticks()[0], 1)) +plt.xticks(rotation=45, ha="right") + +print("L'électron va toucher la plaque après", time_collision, "s") + +print(list_real_position) + +plt.plot(list_real_position, label="Real Position") + +plt.show() diff --git a/TP Phyisque Particule/Exercice 3.py b/TP Phyisque Particule/Exercice 3.py new file mode 100644 index 0000000..3496a51 --- /dev/null +++ b/TP Phyisque Particule/Exercice 3.py @@ -0,0 +1,42 @@ +import matplotlib.pyplot as plt +import numpy as np + +# Constantes physiques et paramètres +e = 1.602 * 10 ** (-19) # C +m = 9.11 * 10 ** (-31) # kg +V0 = 2 * 10 ** (7) # m/s +B = 1 * 10 ** (-3) # T (1 mT) +dt = 10 ** (-9) # s + +# Initialisation des listes pour stocker les valeurs +list_vx = [V0] +list_vy = [0] +list_x = [0] +list_y = [0] + +# Calcul des vitesses et positions +for i in range(1000): + # Mise à jour des vitesses selon la force de Lorentz + list_vx.append(list_vx[-1] + (e * B / m) * list_vy[-1] * dt) + list_vy.append(list_vy[-1] - (e * B / m) * list_vx[-1] * dt) + + # Mise à jour des positions + list_x.append(list_x[-1] + list_vx[-1] * dt) + list_y.append(list_y[-1] + list_vy[-1] * dt) + +# Tracé de la trajectoire +plt.figure(figsize=(10, 6)) +plt.plot(list_x, list_y, label="Trajectoire de l'électron", color="blue") +plt.xlabel("Position x (m)") +plt.ylabel("Position y (m)") +plt.title("Trajectoire de l'électron dans un champ magnétique") +plt.legend() +plt.grid(True) +plt.axis("equal") # Pour garder les mêmes échelles sur les axes x et y +plt.show() + +# Affichage des résultats +print("Vx:", list_vx) +print("Vy:", list_vy) +print("X:", list_x) +print("Y:", list_y)