Previous Up Next

6.27.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
    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
    Le calcul des αk se fait par récurrence.
    Notations
    On note :
    αk=f[x0..xk]
    Pk le polynôme de lagrange qui interpole f en [x0..xk], donc
    Pk(x)=α01(xx0)+...+αk(xx0)(xx1)...(xxk−1)
    Qk le polynôme de lagrange qui interpole f en [x1..xk+1], donc
    Qk(x)=β01(xx1)+...+βk(xx1)(xx2)...(xxk)
    β0=f[x1], β1=f[x1x2], β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([0,1,2],[1,2,-1])

On obtient :

1+3*x-2*x^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(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