Feat: Ajoute l'exercice 2

This commit is contained in:
Namu
2026-01-19 11:44:11 +01:00
parent 0db8d58d8f
commit c16d5536c6

48
tp8.py
View File

@@ -1,7 +1,8 @@
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import numpy as np
def euler(f, n: int, h: float, x_0: float, y_0: float) -> tuple[list[float], list[float]]: def euler_ex1(f, n: int, h: float, x_0: float, y_0: float) -> tuple[list[float], list[float]]:
""" """
:param f: la fonction f (ou y) :param f: la fonction f (ou y)
@@ -91,5 +92,48 @@ def exercice1() -> None:
plt.show() plt.show()
def euler(f, n: int, h: float, x_0: float, y_0: float) -> tuple[list[float], list[float]]:
"""
:param f: la fonction f (ou y)
:param n: jusqu'où va le calcul (le nombre d'itérations)
:param h: le pas de chaque itération
:param x_0: dans la condition initiale, c'est la valeur passée en entrée de f
:param y_0: dans la condition initiale, c'est la valeur de sortie de f.
:return:
"""
results_x = [x_0]
results_y = [y_0]
# h c'est delta_x
x = x_0
y = y_0
for i in range(n):
y = y + h * x
x = x + h * f(x, y)
results_x.append((i + 1) * h)
results_y.append(y)
return results_x, results_y
def exercice2() -> None:
g = 9.8 # c'est une constante. (intensité de la pesanteur)
dt = .01 # intervale de temps
c_1 = np.pi / 2
c_2 = 0
f = lambda x, y: -x - g * np.sin(y)
results_x, results_y = euler(f, n=int(15 / dt), h=dt, x_0=c_1, y_0=c_2)
plt.plot(results_x, results_y)
plt.xlabel('t')
plt.ylabel('teta')
plt.title('le mouvement du pendule')
plt.show()
print(f'Solution pour t = 15 : {results_y[14]}')
if __name__ == '__main__': if __name__ == '__main__':
exercice1() #exercice1()
exercice2()