Splines cubiques — Principe et construction
Objectifs d'apprentissage
À la fin de cette leçon, vous serez en mesure de :
- Comprendre l'origine physique des splines (ruban flexible)
- Écrire la forme générale d'un polynôme cubique par morceaux
- Établir les conditions de continuité pour , et
- Dériver le système d'équations pour les dérivées secondes
Prérequis
- Interpolation polynomiale
- Notion de continuité et dérivabilité
- Résolution de systèmes linéaires
Motivation : dépasser les limites des polynômes
Le problème
Comme nous l'avons vu, les polynômes de degré élevé présentent un phénomène d'instabilité (oscillations de Runge). Pour interpoler un grand nombre de points, utiliser un polynôme unique n'est pas une bonne stratégie.
L'idée des splines
Plutôt qu'un seul polynôme de degré élevé, utilisons plusieurs polynômes de degré faible raccordés entre eux. C'est le principe des splines.
Origine du terme « spline »
Le mot « spline » vient de l'outil utilisé par les dessinateurs : une lame flexible (ruban de bois ou de métal) que l'on fait passer par des points de contrôle pour tracer des courbes lisses. La forme naturelle de cette lame minimise l'énergie de flexion, ce qui correspond mathématiquement à une spline cubique.
Spline cubique vs Polynôme de Lagrange
La spline évite les oscillations indésirables des polynômes de degré élevé
Polynôme de Lagrange
- Degré 6 (élevé)
- Oscillations près des bords
- Phénomène de Runge
Spline cubique
- 6 morceaux de degré 3
- Pas d'oscillation
- Contrôle local
Définition d'une spline cubique
Structure
Une spline cubique sur points est constituée de polynômes cubiques :
où est défini sur l'intervalle .
Forme des polynômes
Chaque polynôme s'écrit sous la forme :
Cette forme est choisie pour simplifier les calculs aux points de raccord.
Nombre d'inconnues
Chaque polynôme a 4 coefficients : .
Pour polynômes, on a donc inconnues à déterminer.
Les conditions de raccord
Continuité de la fonction (Condition 1)
La spline doit passer par tous les points de données :
pour .
Cela donne équations.
Continuité de la dérivée première (Condition 2)
Aux points intérieurs, les dérivées à gauche et à droite doivent coïncider :
pour .
Cela donne équations.
Continuité de la dérivée seconde (Condition 3)
De même pour les dérivées secondes :
pour .
Cela donne encore équations.
Bilan des équations
| Condition | Nombre d'équations |
|---|---|
| Passage par les points | |
| Continuité de | |
| Continuité de | |
| Total |
On a inconnues et équations.
Il manque 2 équations pour déterminer uniquement la spline. Ces équations supplémentaires sont les conditions aux frontières, que nous étudierons dans la prochaine leçon.
Continuité aux nœuds de la spline
Vérifiez que f, f' et f'' sont continues aux points de raccord
Continuité au nœud x = 2
| Fonction | Limite à gauche | Limite à droite | Différence | Continu ? |
|---|---|---|---|---|
| f(x) | 1.499753 | 1.500253 | 5.00e-4 | ✓ |
| f'(x) | 0.243577 | 0.256423 | 1.28e-2 | ✓ |
| f''(x) | 6.416786 | 6.416786 | 0.00e+0 | ✓ |
Les différences sont de l'ordre de l'erreur numérique (≈ 10⁻¹⁵), confirmant la continuité
Notation et dérivation
Introduction des dérivées secondes
Posons , la dérivée seconde au point .
Puisque est cubique, est linéaire :
où est le pas sur l'intervalle .
Relation avec les coefficients
En comparant avec :
En : , donc :
En : , donc :
Calcul des autres coefficients
Coefficient
La condition donne immédiatement :
Coefficient
La condition permet de trouver .
En développant :
On isole :
Résumé des coefficients
Le système pour les
Condition de continuité de
La dérivée de est :
À droite de (fin de l'intervalle ) :
À gauche de (début de l'intervalle ) :
Équation de raccord
En égalant ces expressions et après simplification, on obtient :
pour .
Structure du système
Système tridiagonal
Les équations forment un système tridiagonal de équations à inconnues .
En forme matricielle :
où les sont les seconds membres calculés à partir des données.
Cas du pas constant
Si pour tout , le système se simplifie :
La matrice devient :
Propriété importante
Cette matrice tridiagonale est symétrique définie positive, ce qui garantit l'existence et l'unicité de la solution, ainsi que la stabilité numérique de l'algorithme de résolution.
Interprétation physique
La spline comme ruban flexible
Physiquement, la spline cubique minimise l'énergie de flexion :
Cette propriété explique pourquoi :
- La dérivée seconde représente la courbure
- La continuité de assure une flexion sans à-coup
- Les conditions aux bords influencent le comportement global
Avantages des splines cubiques
| Avantage | Explication |
|---|---|
| Pas d'oscillation | Polynômes de degré 3 seulement |
| Courbe lisse | Continuité de f, f' et f'' |
| Contrôle local | Modifier un point n'affecte que les segments voisins |
| Calcul efficace | Système tridiagonal en O(n) |
Algorithme de construction
import numpy as np
def calculer_coefficients_spline(x, y, S):
"""
Calcule les coefficients a, b, c, d de chaque polynôme cubique
à partir des dérivées secondes S aux noeuds.
Paramètres:
x : abscisses des noeuds (n points)
y : ordonnées des noeuds
S : dérivées secondes aux noeuds
Retourne:
a, b, c, d : tableaux des coefficients (n-1 valeurs chacun)
"""
n = len(x)
h = np.diff(x) # h[i] = x[i+1] - x[i]
a = np.zeros(n - 1)
b = np.zeros(n - 1)
c = np.zeros(n - 1)
d = np.zeros(n - 1)
for i in range(n - 1):
a[i] = (S[i + 1] - S[i]) / (6 * h[i])
b[i] = S[i] / 2
c[i] = (y[i + 1] - y[i]) / h[i] - h[i] * (S[i + 1] + 2 * S[i]) / 6
d[i] = y[i]
return a, b, c, d
def evaluer_spline(x_data, a, b, c, d, x):
"""
Évalue la spline au point x.
Paramètres:
x_data : abscisses des noeuds
a, b, c, d : coefficients des polynômes
x : point d'évaluation
Retourne:
valeur de la spline en x
"""
# Trouver l'intervalle contenant x
n = len(x_data)
for i in range(n - 1):
if x_data[i] <= x <= x_data[i + 1]:
dx = x - x_data[i]
return a[i] * dx**3 + b[i] * dx**2 + c[i] * dx + d[i]
# Extrapolation (à éviter en général)
if x < x_data[0]:
dx = x - x_data[0]
return a[0] * dx**3 + b[0] * dx**2 + c[0] * dx + d[0]
else:
dx = x - x_data[-2]
return a[-1] * dx**3 + b[-1] * dx**2 + c[-1] * dx + d[-1]
# Exemple d'utilisation (les S seront calculés dans la prochaine leçon)
x = np.array([1, 2, 3, 4])
y = np.array([4, -2, 3, 1])
# Pour l'instant, supposons S connu (spline naturelle, exemple)
S = np.array([0, 20.4, -15.6, 0])
a, b, c, d = calculer_coefficients_spline(x, y, S)
print("Coefficients des polynômes cubiques :")
for i in range(len(a)):
print(f" Q_{i+1}(x) : a={a[i]:.2f}, b={b[i]:.2f}, c={c[i]:.2f}, d={d[i]:.2f}")Construction de la spline cubique
Ajoutez les morceaux un par un pour voir comment la spline se construit
Étape 4 : Dernier segment Q₄(x) sur [3, 4]. La spline naturelle est complète (S₀ = S₄ = 0).
Résumé
Dans cette leçon, nous avons établi les fondements des splines cubiques :
- Une spline cubique est constituée de polynômes cubiques raccordés
- Chaque polynôme a la forme
- Les conditions de continuité de , et fournissent équations
- Les coefficients s'expriment en fonction des dérivées secondes aux nœuds
- Le système pour les est tridiagonal et se résout en
Pour aller plus loin
La prochaine leçon présentera les différentes conditions aux frontières qui complètent le système : splines naturelles, paraboliques, et à pentes imposées. Nous verrons également l'algorithme complet de résolution.