Adloun

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()

Illustration 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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →