 
 
 
6.28.33  Interpolation de Lagrange : lagrange interp
 
Selon le dernier paramètre on a :
- 
lagrange permet d’interpoler une fonction f aux points 
d’abscisses xk (k=0..n−1) par un polynôme de degré n−1 : c’est le 
polynôme d’interpolation de Lagrange.
 lagrange renvoie ce polynôme soit sous forme symbolique, soit selon la 
liste de ses coefficients (le dernier paramètre doit être alors le nom de 
la variable choisie ou []).
- lagrange effectue aussi le calcul des différences divisées du 
polynôme de Lagrange (le dernier paramètre est alors lagrange).
- 
Polynôme d’interpolation de Lagrange
 lagrange a 1, 2 ou 3 arguments :- 
deux listes de longueur n (ou une matrice de deux lignes et n
colonnes) et eventuellement le nom de la variable var (par défaut 
x) pour que le polynôme soit sous forme symbolique ou eventuellement 
une liste vide ([]) pour que le polynôme soit selon la liste de ses 
coefficients.
 La première liste (ou ligne) correspond à des valeurs d’abscisses xk, et 
La deuxième liste (ou ligne) correspond à des valeurs d’ordonnées yk 
pour k allant de 0 à n-1,
- une liste de longueur n correspondant aux valeurs d’abscisses xk 
et une fonction f et eventuellement [] ou le nom de la variable 
var (par défaut x).
 Les valeurs des ordonnées sont alors yk=f(xk) pour k=0..n−1.
 lagrange renvoie une expression polynômiale P(var) de degré 
n-1 tel que P(xk)=yk (k=0..n−1) ou la liste des coefficients de
P (selon les puissances décroissantes) c’est à dire l’écriture 
liste du polynôme de degré n-1 tel que P(xk)=yk (k=0..n−1).
 
 
- Différences divisées du polynôme de Lagrange
 lagrange a comme argument deux listes de longueur n (ou une matrice
de deux lignes et n colonnes) et comme dernier argument l’option 
lagrange de la commande lagrange.
 lagrange renvoie la liste des différences divisées :
 [α0...αn−1].
 Définition de α0,..,αn−1
 Si P(xk)=yk=f(xk) (k=0..n−1) i.e. si P interpole f en 
[x0,..,xn−1], on a :
 P(x)=α0+α1(x−x0)+...+αn−1(x−x0)(x−x1)...(x−xn−2)
 On a alors :
 α0=P(x0)=f(x0)
 α1=f(x1)−f(x0)/x1−x0=f[x0,x1]
 P(x2)=α0+α1(x−x0)+α2(x−x0)(x−x1)
 donc
 α2=P(x2)−α0/(x2−x0)(x2−x1)−α1/x2−x1
 P(x3)=α0+α1(x−x0)+α2(x−x0)(x−x1)+α(x−x0)(x−x1)(x−x2)
 donc
 α3=P(x3)−α0−α1(x−x0)−α2(x−x0)(x−x1/(x−x0)(x−x1)(x−x2)=
 P(x3)−α0/(x3−x0)(x3−x1)(x3−x2)−α1/(x3−x1)(x3−x2)−α2/x3−x2
 Notations
 On note :
 f[x0,x1]=α1= f(x1)−f(x0)/x1−x0
 αk=f[x0,..,xk]
 Le calcul des αk se fait par récurrence.
 Si Pk est le polynôme de lagrange qui interpole f en [x0,..,xk], 
on a:
 Pk(x)=α0+α1(x−x0)+...+αk(x−x0)(x−x1)...(x−xk−1)
 Si Qk est le polynôme de lagrange qui interpole f en [x1,..,xk+1], 
on a :
 Qk(x)=β0+β1(x−x1)+...+βk(x−x1)(x−x2)...(x−xk)
 β0=f[x1], β1=f[x1,x2], βk=f[x1,..,xk+1].
 Propriétés
 On a :
 Pk+1(x)=(xk+1−x)Pk(x)+(x−x0)Qk(x)/xk+1−x0
 et
 αk+1 est le lcoeff de Pk+1 (lcoeff(P) est le 
coefficient du terme de plus haut degré (dominant=leading)) donc
 αk+1=(lcoeff(Qk)-lcoeff(Pk))/(xk+1−x0)
 αk+1=(βk−αk)/(xk+1−x0)
ce qui donne l’algorithme calculant les différences divisées.
On tape :
lagrange([[1,3],[0,1]])
Ou on tape :
lagrange([1,3],[0,1])
On obtient :
(x-1)/2
en effet pour x=1 on a x−1/2=0  et pour x=3 on a 
x−1/2=1.
On tape :
lagrange([1,3],[0,1],y)
On obtient :
(y-1)/2
On tape :
lagrange([1,3],[0,1],[])
On obtient :
[1/2,-1/2]
qui est l’écriture liste du polynôme x/2-1/2
On tape :
lagrange([1,3],[0,1],lagrange)
On obtient :
[0,1/2]
en effet :
P(x)=(x−1)/2=0+1/2(x−1)
On tape :
lagrange([1,2,3,4],[15,24,33,54],x)
On obtient :
(2*(x-3)*(x-2)+9)*(x-1)+15
On tape :
lagrange([1,2,3,4],[15,24,33,54],[])
On obtient :
[2,-12,31,-6]
qui est la liste a3,a2,a1,a0 des coefficients ak de xk du polynôme 
(2*(x-3)*(x-2)+9)*(x-1)+15=2*x^3-12*x^2+31*x-6
On tape (lorsque l’écriture des polynômes est selon les puissances 
décroissantes) :
normal((2*(x-3)*(x-2)+9)*(x-1)+15)
On obtient :
2*x^3-12*x^2+31*x-6
On tape :
lagrange([1,2,3,4],[15,24,33,54],lagrange)
On obtient :
[15,9,0,2]
en effet, on a P(x)=2*x3−12*x2+31*x−6 donc :
P(1)=15, (P(2)−P(1))/(2−1)=9, (P(3)−15)/2−9=(33−15)/2−9=0
(P(4)−15)/((4−1)*(3−1)*(2−1))−9/((3−1)*(2−1))=(54−15)/6−9/2=2
On tape :
lagrange([0,1,2],[1,2,-1])
On obtient :
1+3*x-2*x^2
On tape :
lagrange([0,1,2],[1,2,-1],y)
On obtient :
(-2*(y-1)+1)*y+1
soit après simplification :
(1+3*y-2*y^2
On tape :
lagrange([0,1,2],[1,2,-1],[])
On obtient :
[-2,3,1]
qui est l’écriture liste du polynôme -2*x^2+3x+1
On tape :
lagrange([0,1,2],[1,2,-1],lagrange)
On obtient :
[1,1,-2]
en effet : P(0)=1, P(1)=2, P(2)=−1 et 
P(x)=1+1*(x−0)−2*(x−0)*(x−1)=−2x2+3x+1
P(x)=1+x(1+(x−1)*(−2))=1+x−2x(x−1)=−2x2+3x+1
On tape :
f(x):=exp(x)-1
lagrange([-1,0,1],[f(-1),f(0),f(1)])
ou
lagrange([-1,0,1],[1/e-1,0,e-1])
ou
lagrange([-1,0,1],f)
On obtient après simplification et linéarisation du numérateur :
(-x+x^2+(x+x^2)*exp(2)-2*x^2*exp(1))/(2*exp(1))
On tape :
lagrange([0,1,2],[1,exp(1),exp(2)],[])
On obtient :
[(1-2*exp(1)+exp(1)^2)/2,(-3+4*exp(1)-exp(1)^2)/2,1]
On tape :
lagrange([0,1,2],[1,exp(1),exp(2)],lagrange)
ou 
lagrange([0,1,2],exp,lagrange)
On obtient :
[1,exp(1)-1,(exp(1)-1)^2/2]
On a en effet :
P(x)=1+x((exp(1)−1)+(x−1)(exp(1)−1)2/2)
On a bien P(0)=1, P(1)=e−1, P(2)=1+2(e−1+e2/2−e+1/2)=1−2+1+e2=e2
Si on applique l’algorithme :
f[x0]=α0=1, f[x1]=β0=e, f[x2]=γ0=e2,
f[x0x1]=α1=(β0−α0)/(1−0)=e−1,
f[x1x2]=β1=(γ0−β0)/(1−0)=e2−e,
f[x1x2x3]=α2=(β1−α1)/(2−0)=(e2−2e+1)/2
Attention
lagrange([1,2],[3,4],y) ne renvoie pas une fonction mais une expression.
mais on peut définir une fonction en mettant :
f(x):=lagrange([1,2],[3,4],x) ou
f(y):=lagrange([1,2],[3,4],y) et alors 
f(4) renvoie 6 car f(x)=x+2)
Bien voir la différence entre :
g(x):=lagrange([1,2],[3,4]) et
f(x):=lagrange([1,2],[3,4],x).
g(x):=lagrange([1,2],[3,4]) ne definit pas une fonction,
par exemple, g(2)=x-1+3 alors que f(2)=4.
Ceci dit, la définition of f n’est pas efficace car le polynôme sera 
recalculé depuis le
début à chaque appel de f (quand on définit une fonction le membre 
de droite n’est pas évalué, l’évaluation est faite seulement quand on 
appelle f).
Pour être efficace il faut utiliser unapply:
f:=unapply(lagrange([1,2],[3,4]),x) ou
f:=unapply(lagrange([1,2],[3,4],y),y).
Exercice
Soient f(x) = 1/x, x0=2 x1 = 2.5 et x2 =4.
On demande de calculer le polynôme L d’interpolation de Lagrange et sa 
valeur en x=3 et x=4.5.
On tape :
f(x):=1/x
L:=unapply(normal(lagrange([2,2.5,4],[f(2),f(2.5),f(4)])),x)
On obtient :
x->0.05*x^2-0.425*x+1.15
On tape :
L(3),L(4.5)
On obtient :
0.325,0.25
 
 
