mirror of
https://github.com/BreizhHardware/py_CIPA3.git
synced 2026-01-18 16:37:30 +01:00
add simulation scripts for electron motion in electric and magnetic fields
This commit is contained in:
59
TP Phyisque Particule/Exercice 2.py
Normal file
59
TP Phyisque Particule/Exercice 2.py
Normal file
@@ -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()
|
||||
42
TP Phyisque Particule/Exercice 3.py
Normal file
42
TP Phyisque Particule/Exercice 3.py
Normal file
@@ -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)
|
||||
Reference in New Issue
Block a user