Python (école d'ingénieur) · Chapitre 11 · Exercice
Système non linéaire (Newton 2D)
Résolution d'équations non linéaires
Énoncé
Résoudre le système d'équations non linéaires : par la méthode de Newton en dimension 2.
Corrigé
import numpy as np
def newton_systeme(F, J, x0, epsilon=1e-12, maxiter=100):
x = np.array(x0, dtype=float)
for n in range(maxiter):
Fx = F(x[0], x[1])
if np.linalg.norm(Fx) < epsilon:
return x, n+1
Jx = J(x[0], x[1])
delta = np.linalg.solve(Jx, -Fx)
x_new = x + delta
if np.linalg.norm(delta) < epsilon:
return x_new, n+1
x = x_new
raise RuntimeError("Non convergence")
# Système
def F(x, y):
return np.array([x**2 + y**2 - 4, x**2 - y - 1])
def J(x, y):
return np.array([[2*x, 2*y], [2*x, -1]])
# Recherche des racines depuis différents points initiaux
points_initiaux = [(2, 1), (-2, 1), (1, -1.5), (-1, -1.5)]
for x0, y0 in points_initiaux:
sol, iterations = newton_systeme(F, J, [x0, y0])
print(f"Init ({x0}, {y0}) -> ({sol[0]:.8f}, {sol[1]:.8f}) en {iterations} it.")
Résultat dans la console :
Init (2, 1) -> (1.73205081, 1.00000000) en 6 it.
Init (-2, 1) -> (-1.73205081, 1.00000000) en 6 it.
Init (1, -1.5) -> (0.00000000, -1.00000000) en 5 it.
Init (-1, -1.5) -> (0.00000000, -1.00000000) en 5 it.
Les quatre points d'intersection réels du système sont : et (racine double).
100 % gratuit
La suite du chapitre est sur Adloun
- 7 autres exercices corrigés dans ce chapitre, et 7 à chercher avec le tuteur
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.