Previous Up Next

6.28.33  Interpolation de Lagrange : lagrange interp

Selon le dernier paramètre on a :

  1. 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 []).
  2. lagrange effectue aussi le calcul des différences divisées du polynôme de Lagrange (le dernier paramètre est alors lagrange).
  1. Polynôme d’interpolation de Lagrange
    lagrange a 1, 2 ou 3 arguments :
  2. 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)=α01(xx0)+...+αn−1(xx0)(xx1)...(xxn−2)
    On a alors :
    α0=P(x0)=f(x0)
    α1=f(x1)−f(x0)/x1x0=f[x0,x1]
    P(x2)=α01(xx0)+α2(xx0)(xx1)
    donc
    α2=P(x2)−α0/(x2x0)(x2x1)−α1/x2x1
    P(x3)=α01(xx0)+α2(xx0)(xx1)+α(xx0)(xx1)(xx2)
    donc
    α3=P(x3)−α0−α1(xx0)−α2(xx0)(xx1/(xx0)(xx1)(xx2)=
    P(x3)−α0/(x3x0)(x3x1)(x3x2)−α1/(x3x1)(x3x2)−α2/x3x2
    Notations
    On note :
    f[x0,x1]=α1= f(x1)−f(x0)/x1x0
    α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)=α01(xx0)+...+αk(xx0)(xx1)...(xxk−1)
    Si Qk est le polynôme de lagrange qui interpole f en [x1,..,xk+1], on a :
    Qk(x)=β01(xx1)+...+βk(xx1)(xx2)...(xxk)
    β0=f[x1], β1=f[x1,x2], βk=f[x1,..,xk+1].
    Propriétés
    On a :
    Pk+1(x)=(xk+1x)Pk(x)+(xx0)Qk(x)/xk+1x0
    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+1x0)
    αk+1=(βk−αk)/(xk+1x0) 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)=e2e,
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


Previous Up Next