Interpolation de données

L'interpolation numérique consiste à construire une courbe qui passe exactement par un ensemble de points définis. On se limite ici à l'interpolation polynomiale, c'est-à-dire que les courbes recherchées correspondent à des polynômes.

On dispose de \(N+1\) points caractérisés par leurs coordonnées \(\left(x_i,y_i \right)\). Ces points forment le support d'interpolation.

Interpolation polynomiale

Une première classe de problèmes est de rechercher un polynôme de degré \(N\) qui passe par les \(N+1\) points du support d'interpolation. On montre mathématiquement que si ces \(N+1\) sont distincts, alors il existe un polynôme unique.

Supposons que les \(N+1\) coordonnées des points formant le support d'interpolation soient fournis dans deux vecteurs \(x\) et \(y\). La fonction MATLAB polyfit va permettre de déterminer les coefficients du polynôme d'interpolation de l'ordre voulu.

Syntaxe

>> ordre = length(x)-1 ;
>> p = polyfit(x,y,ordre)

p est un vecteur qui contient dans les coefficients du polynôme classés par ordre décroissant.

Une fois les coefficients du polynôme d'interpolation déterminés, il est possible d'évaluer ou de tracer ce polynôme par l'intermédiaire de la fonction polyval.

Syntaxe

L'expression suivante permet de connaître les valeurs du polynôme, dont les coefficients sont enregistrés dans p, pour différentes valeurs de x1.

>> y1 = polyval(p,x1) ;

De manière similaire, on peut tracer directement le polynôme ainsi :

>> plot(x1,polyval(p,x1))

Interpolation par morceaux

Une seconde classe de problèmes n'est plus de chercher un polynôme unique qui passe par la totalité du support d'interpolation, mais plutôt de chercher une succession de polynômes de degré faible (en général 0, 1, 2 ou 3) qui passent pas quelques points du support d'interpolation. C'est l'interpolation par morceaux.

L'interpolation linéaire par morceaux consiste à chercher l'ensemble des polynômes de degré 1 qui passent par deux points successifs du support d'interpolation ; en d'autres termes, on recherche les segments de droites successifs entre 2 points.

L'interpolation parabolique par morceaux consiste à chercher l'ensemble des polynômes de degré 2 qui passent par trois points successifs du support d'interpolation.

L'interpolation cubique par morceaux consiste à chercher l'ensemble des polynômes de degré 3 qui passent par quatre points successifs du support d'interpolation.

Syntaxe

La fonction interp1 permet de calculer les valeurs des polynômes d'interpolation par morceaux :

>> yq = interp1(x,y,xq,'method')

Les coordonnées du support d'interpolation sont fournies dans x et y. On cherche les valeurs des polynômes (yq) pour différentes valeurs de xq. Le type d'interpolation par morceaux est fourni par l'intermédiaire d'une chaîne de caractères ('method') qui peut soit être égale à :

  • 'nearest' : interpolation d'ordre 0 par morceaux (interpolation de type marches d'escalier) ;

  • 'linear' : interpolation linéaire par morceaux ;

  • 'spline' : interpolation cubique par morceaux (de type spline) ;

  • 'cubic' : interpolation cubique par morceaux.

Si la méthode n'est pas précisée dans l'appel de la fonction interp1, la méthode 'linear' est utilisée par défaut.

Exemple

Les lignes suivantes fournissent un exemple générique.

À partir de cinq points \(\left( x_i, y_i \right)\), on cherche une interpolation \(f \left( x \right)\) entre ces cinq points.

xi = [-1 -1/2 0 1/2 1];           
yi = [1.5 1 0 1 1/2];         
x = -1:0.1:1;
ylinear = interp1 (xi, yi, x);            % méthode linéaire utilisée par défaut
ycubic = interp1 (xi, yi, x, 'cubic');
plot(xi,yi,'o', x,ylinear,'-', x,ycubic,'--')
legend('Données', 'Interpolation linéaire', 'Interpolation cubique')

La figure suivante illustre les interpolations linéaires (en traits pleins) et cubiques (en traits pointillés) obtenues par interp1 sur ces 5 points (illustrés par des cercles). Notons que l'interpolation cubique ne fonctionne que pour des nombres de points impairs et fournit une interpolation de classe \(C^1\).

Interpolations linéaires et cubiques obtenues par interp1
Interpolations linéaires et cubiques obtenues par interp1