Interpolation polynomiale de Lagrange
L’interpolation consiste à trouver l’expression générale d’une fonction à partir d’un nombre
limité de points.
Quand la fonction recherchée est un polynôme l’interpolation est dite polynomial.
Dans notre TP on va arborer l’implémentation de la méthode d’interpolation polynomiale de
Lagrange.
Principe :
Soit f une fonction donnée définie sur . Interpoler la fonction f par un polynôme P de degré
n sachant les n+1 points : ( x0, f(x0) ), ( x1, f(x1) ), . . . , ( xn, f(xn) ) consiste à résoudre le
problème suivant :
Trouver un polynôme P de degré ≤ n tel que : yi=P(xi) = f(xi), 0 ≤ i ≤ n.
Ce polynôme est donnée par :
Pj est un polynôme qui passe par le point (xj, f(xj)) et qui s’annule dans tous les autres points,
et on peut le calculer par :
Construction du polynôme d'interpolation de Lagrange
Supposons que le polynôme d'interpolation est donné par :
Afin que ce dernier passe par l'ensemble des points à interpoler, il faut que les coefficients
a0…an respectent le système d’équation linéaire suivant :
Donc pour trouver la formule du polynôme P il suffit de résoudre ce système d’équation.
1
function P = lagrange(X,Y)
N = length(X)‐1;
A = ones(N+1,N+1);
for i=1:N+1
for j=1:N
A(i,j) = X(i)^(N+1‐j);
end
end
P = A\Y';
>> x = [‐3,‐2,‐1,0,1,2, 3];
>> y = [‐1, 1, 3,7,2,0,‐2];
>> P = lagrange(x,y)
P =
‐0.1028
‐0.0083
1.4722
0.1250
‐5.8694
‐0.6167
7.0000
>> a = ‐3.2:0.2:3.2;
>> b = polyval(P, a);
>> plot(a,b,x,y,'o')
On aurait pu faire le même travail en utilisant la fonction Matlab polyfit comme suit :
>> x = [‐3,‐2,‐1,0,1,2, 3];
>> y = [‐1, 1, 3,7,2,0,‐2];
>> P = polyfit(x,y,6)
P =
‐0.1028 ‐0.0083 1.4722 0.1250 ‐5.8694 ‐0.6167 7.0000
>> a = ‐3.2:0.2:3.2;
>> b = polyval(P, a);
>> plot(a,b,x,y,'o')
2
Pour programmer une fonction Matlab qui permet l’évaluation du polynôme mais sans
donner son expression (les coefficients) on peut utiliser le code suivant :
function y = lagrangeEval(x,PX,PY)
N = length(PX);
y = 0;
for j=1:N
prod = 1;
for k = [1:j‐1,j+1:N]
prod = prod*(x‐PX(k))/(PX(j)‐PX(k));
end
y = y + PY(j)*prod;
end
>> x = [‐3,‐2,‐1,0,1,2, 3];
>> y = [‐1, 1, 3,7,2,0,‐2];
>> lagrangeEval(5,x,y)
ans =
‐839.0000
Pour vérifier si le résultat est correct, on utilise la fonction Matlab polyval comme suit :
>> P = polyfit(x,y,6);
>> polyval(P,5)
ans =
‐839.0000