### 6.26.33 Interpolation de Lagrange : `lagrange interp`

`lagrange` a comme argument 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`):
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 1 à `n`.
`lagrange` renvoie une expression polynômiale `P(var)` de degré `n-1` tel que P(xk)=yk.
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`

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`