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:
S0(x0)=f(x0)=y0 (1)
Si(xi)=Si-1(xi)=f(xi)=yi (1) pour tout i=1,...,n-1
Sn-1(xn)=f(xn)=yn (1)
S'i(xi)=S'i-1(xi) (2) pour tout i=1,...,n-1
S"i(xi)=S"i-1(xi) (3) pour tout i=1,...,n-1
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