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é

Fonction :
Points :7

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 :

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

ConditionNombre 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

Nœud :

Continuité au nœud x = 2

FonctionLimite à gaucheLimite à droiteDifférenceContinu ?
f(x)1.4997531.5002535.00e-4
f'(x)0.2435770.2564231.28e-2
f''(x)6.4167866.4167860.00e+0

Les différences sont de l'ordre de l'erreur numérique (≈ 10⁻¹⁵), confirmant la continuité

Q1(x) sur [0, 1]Q2(x) sur [1, 2]Q3(x) sur [2, 3]Q4(x) sur [3, 4]

Notation et dérivation

Introduction des dérivées secondes

Posons , la dérivée seconde au point .

Puisque est cubique, est linéaire :

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 :

  1. La dérivée seconde représente la courbure
  2. La continuité de assure une flexion sans à-coup
  3. Les conditions aux bords influencent le comportement global

Avantages des splines cubiques

AvantageExplication
Pas d'oscillationPolynômes de degré 3 seulement
Courbe lisseContinuité de f, f' et f''
Contrôle localModifier un point n'affecte que les segments voisins
Calcul efficaceSystème tridiagonal en O(n)

Algorithme de construction

spline_construction.pypython
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

Segments affichés :4/4

É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.