Comparaison de 3 méthodes
Interpolation de Lagrange en utilisant
- interpolate de Scipy
- différences divisées de Newton
- formule barycentrique
Interpolation de Lagrange en utilisant
Soit \(f\) une fonction et soient \(n+1\) réels distincts \((x_i)_{0\leq i\leq n}\) (dans l'ensemble de définition de \(f\)). On cherche à évaluer le polynôme, noté \(p\), d'interpolation de Lagrange de la fonction aux points \(x_i\).
Les différences divisées et la formule barycentrique sont grosso modo équivalentes en nombre d'opérations. Avec Python et
le but est de faire une fonction interp(x,f,xx) où xx est un vecteur (tableau dimension 1) qui renvoie les valeurs du polynôme en xx sous forme d'un vecteur.
Avec \(f[x_i,\ldots,x_{i+p}]\) les différences divisées
Évaluation via la méthode de Horner
Difficulté : aucune, il s'agit juste d'utiliser la vectorisation et un tableau de dimension 1 pour les différences divisées
Vient des polynômes de Lagrange avec une réécriture pour obtenir un calcul en \(O(n^2)\).
Difficulté : gestion des valeurs interdites, vectorisation
scipy.interpolate.lagrange(x,y)
retourne le polynôme cherché, c'est un type poly1D
In [1]: import numpy as np
In [2]: import scipy.interpolate as interp
In [3]: x =np.linspace(-5,5,5)
In [4]: type(interp.lagrange(x,np.cos(x)))
Out[4]: numpy.lib.polynomial.poly1d
In [5]: print(interp.lagrange(x,np.cos(x)))