Python (école d'ingénieur) · Chapitre 12 · Exercice
Interpolation polynomiale par résolution de système
Résolution de systèmes linéaires
Énoncé
Trouver le polynôme de degré passant par points en résolvant le système de Vandermonde.
Corrigé
import numpy as np
import matplotlib.pyplot as plt
def interpolation_vandermonde(x_points, y_points):
"""
Calcule les coefficients du polynôme d'interpolation via la matrice de Vandermonde.
"""
n = len(x_points)
# Construction de la matrice de Vandermonde
V = np.zeros((n, n))
for i in range(n):
for j in range(n):
V[i, j] = x_points[i] ** j
# Résolution du système V·coeffs = y
coeffs = np.linalg.solve(V, y_points)
return coeffs
def polynome(coeffs, x):
"""Évalue le polynôme en x."""
return sum(c * x**i for i, c in enumerate(coeffs))
# Exemple : points de la fonction sin(x) sur [0, pi]
x_points = np.array([0, np.pi/4, np.pi/2, 3*np.pi/4, np.pi])
y_points = np.sin(x_points)
coeffs = interpolation_vandermonde(x_points, y_points)
print("Coefficients du polynôme :")
for i, c in enumerate(coeffs):
print(f" a_{i} = {c:.6f}")
# Tracé
x_plot = np.linspace(0, np.pi, 200)
y_sin = np.sin(x_plot)
y_interp = polynome(coeffs, x_plot)
plt.figure(figsize=(10, 6))
plt.plot(x_plot, y_sin, 'b-', linewidth=2, label='sin(x)')
plt.plot(x_plot, y_interp, 'r--', linewidth=2, label="Polynôme d'interpolation")
plt.plot(x_points, y_points, 'ro', markersize=8, label="Points d'interpolation")
plt.xlabel('x')
plt.ylabel('y')
plt.title("Interpolation polynomiale par résolution de système")
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
Interpolation polynomiale de la fonction par le polynôme résolvant le système de Vandermonde.
Résultat dans la console :
Coefficients du polynôme :
a_0 = 0.000000
a_1 = 0.999999
a_2 = -0.000000
a_3 = -0.166667
a_4 = 0.000000
Vérification :
# Évaluation aux points
for x, y in zip(x_points, y_points):
p_x = polynome(coeffs, x)
print(f" f({x:.3f}) = {y:.6f}, P({x:.3f}) = {p_x:.6f}")
Résultat dans la console :
f(0.000) = 0.000000, P(0.000) = 0.000000
f(0.785) = 0.707107, P(0.785) = 0.707107
f(1.571) = 1.000000, P(1.571) = 1.000000
f(2.356) = 0.707107, P(2.356) = 0.707107
f(3.142) = 0.000000, P(3.142) = 0.000000
Le polynôme reconstruit correctement les valeurs aux points d'interpolation.
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.