Fix: Correct jacobi, gauss, cholesky
This commit is contained in:
40
ex5.py
40
ex5.py
@@ -4,6 +4,7 @@ import numpy as np
|
||||
dich_steps = []
|
||||
new_raph_steps = []
|
||||
|
||||
|
||||
def f(x) -> float:
|
||||
return np.exp(x) - 2 * np.cos(x)
|
||||
|
||||
@@ -26,18 +27,33 @@ def dichotomie(x_0, a, b, epsilon, n=0) -> float:
|
||||
|
||||
|
||||
def f_prime(x) -> float:
|
||||
return 1 + np.sin(x)
|
||||
return np.exp(x) + 2 * np.sin(x)
|
||||
|
||||
|
||||
def newton_raphson(x_0, epsilon) -> float:
|
||||
x_1 = x_0 - (f(x_0) / f_prime(x_0))
|
||||
new_raph_steps.append(x_1)
|
||||
def newton_raphson(x_0, epsilon, max_iter=1_000) -> float | None:
|
||||
"""
|
||||
Condition : connaître la dérivée de f(x)
|
||||
:param x_0:
|
||||
:param epsilon:
|
||||
:param max_iter:
|
||||
:return:
|
||||
"""
|
||||
x = x_0
|
||||
|
||||
if np.abs(x_1 - x_0) < epsilon:
|
||||
return x_1
|
||||
elif np.abs(f(x_0)) < epsilon:
|
||||
return x_1
|
||||
return newton_raphson(x_1, epsilon)
|
||||
for _ in range(max_iter):
|
||||
x_prev = x
|
||||
fx = f(x)
|
||||
fpx = f_prime(x)
|
||||
if np.abs(fx) < epsilon:
|
||||
return x
|
||||
elif fpx == 0:
|
||||
return None
|
||||
x = x - (fx / fpx)
|
||||
new_raph_steps.append(x)
|
||||
if np.abs(x - x_prev) < epsilon:
|
||||
return x
|
||||
|
||||
return None
|
||||
|
||||
|
||||
def ex1() -> None:
|
||||
@@ -71,10 +87,10 @@ def ex1() -> None:
|
||||
plt.show()
|
||||
|
||||
"""
|
||||
La dichotomie à moins d'étape que NR, mais NR à l'air plus rapide,
|
||||
comme Flash McQueen
|
||||
La NR à moins d'étape que la dichotomie, NR à l'air rapide,
|
||||
comme Flash McQueen (Kachow)
|
||||
"""
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
ex1()
|
||||
ex1()
|
||||
|
||||
Reference in New Issue
Block a user