Interpolation.


Soit une fonction y = f(x) connue seulement par quelques couples (x,y).
Le problème qui se pose est le suivant: comment déterminer la valeur de y pour d'autres x que ceux donnés?

La technique permettant de répondre à cette question s'appelle "interpolation".

On peut considérer deux approches différentes:


Note: Il existe un autre problème fondamentalement différent du précédent mais très proche dans sa formulation: déterminer une fonction ne vérifiant pas les couples (x,y) donnés mais passant "au mieux" à travers les points donnés. La méthode de résolution la plus connue est la méthode des moindres carrés dont le principal inconvénient est de devoir déterminer au préalable le type de fonction qui répond le mieux au problème (exponentielle, logarithmique, ...).

Méthode des splines:


Soient n+1 points donnés (xi;yi) i=0,..,n. Nous recherchons une fonction y=f(x) qui passe par ces points et dont les dérivées f'(x) et f"(x) sont continues sur [x0;xn]. Les points xi sont appelés noeuds et hi=xi+1-xi le pas (pas nécessairement constant mais positif: x0<x1<...<xn).

Il faut donc rechercher n fonctions Si(X) i=0,1,..,n-1 telles que:
Comme les Si(x) sont des polynômes de degré <= 3, nous devons déterminer, pour chaque cubique, les 4 coefficients des puissances de x. Il y a donc au total 4n nombres à déterminer grâce à: Nous disposons donc de 4n-2 conditions linéaires en les coefficients des Si(x).
Comme il nous manque 2 conditions, nous pourrons imposer 2 conditions supplémentaires: par exemple:
S'0(x0)=f'(x0) et S'n-1(xn)=f'(xn)
ou
S'0(x0)=f'(x0) et S"0(x0)=f"(x0)
ou
S"0(x0)=S"n-1(xn)=0  (splines naturelles)
ou
........
Comme Si(x) est de degré <=3, S"i(x) est linéaire et donc combinaison linéaire de f"i=f"(xi) et f"i+1=f"(xi+1):
S"i(x)=(xi+1-x)/hi*f"i+(x-xi)/hi*f"i+1
Deux intégrations successives permettent de faire apparaître:
Si=yi*(xi+1-x)/hi

  +yi+1*(x-xi)/hi

  -h2i/6*f"i[(xi+1-x)/hi-((xi+1-x)/hi)3]

  -h2i/6*f"i+1[(x-xi)/hi-((x-xi)/hi)3]
En dérivant, on a:

S'i(xi)

=(yi+1-yi)/hi-hi/6*(f"i+1+2*f"i)

=S'i-1(xi)  même tangente aux points de contact 

=(yi-yi-1)/hi-1+hi-1/6*(f"i-1+2*f"i)

Ceci fournit n-1 équations. Comme ce nombre est insuffisant pour déterminer les n+1 f"i, nous ajouterons f"0=f"N=0.
Ce système sera résolu par la méthode de Gauss-Seidel qui dit que si un système d'équations linéaires peut être écrit sous la forme
x=f(x, y, ...)
y=g(x, y, ...)
...
avec la matrice des coefficients des inconnues des seconds membres ayant une norme <1, la résolution se fait par calculs successifs des x, y, ... à partir de n'importe quelles valeurs initiales.

Méthode de Newton

Déterminons le polynôme d'interpolation de degré <= n admettant les valeurs yi pour x=xi i=0,..,n. Il n'est pas exigé que xi+1-xi=cste.
Ecrivons le polynome sous la forme:

Pn(X)=a0

     +a1*(x-x0)

     +a2*(x-x0)*(x-x1)

     +...

     +an*(x-x0)*(x-x1)*...*(x-xN-1)

Si x=x0:
Pn(x0)=y0=a0
dont on déduit a0=y0
Si x=x1:
Pn(x1)=y1=a0+a1*(x1-x0)=y0+a1*(x1-x0)
dont on déduit a1=(y1-y0)/(x1-x0)=D1y0 différence divisée.
En continuant avec x=x2, x=x3, ..., on obtient

ak=(Dk-1yi+1-Dk-1yi)/(xi+k-xi)=Dkyi

La formule finale est donc

Pn(X)=y0

     +Dy0*(x-x0)

     +D2y0*(x-x0)*(x-x1)

     +...

     +DNy0*(x-x0)*(x-x1)*...*(x-xN-1)

En privilégiant xN, on aurait obtenu:

Pn(X)=yN

     +Dy0*(x-xN)

     +D2yN-2*(x-xN)*(x-xN-1)

     +...

     +DNy0*(x-xN)*(x-xN-1)*...*(x-x1)


J'ai écrit un programme en Turbo Pascal qui interpole par les 2 méthodes et surtout dessine les graphes de chaque solution ainsi que la fonction initiale. Je sais que cela n'a pas de sens d'interpoler une fonction qu'on connaît mais cela permet de visualiser le degré de précision des 2 méthodes et entre autres, que quand le nombre de points donnés est grand et que les points sont équidistants, il apparaît des variations très grandes aux bords du domaine.
Pour charger une archive contenant le source, cliquer ici

Page d'accueil.