tp Lagrange

This commit is contained in:
Denis Monnerat 2025-05-06 08:14:15 +02:00
parent 93f407f3ee
commit d30d0f4986
2 changed files with 87 additions and 0 deletions

87
num/tp3/README.md Normal file

@ -0,0 +1,87 @@
# TP3 Interpolation polynomiale
## Lagrange
On a vu dans le module d'algèbre linéaire que les polynômes de Lagrange associés à des points d'interpolations $(x_1,x_2,\ldots,x_n)$ s'écrivent
\[
L_i(x)=\frac{\prod_{j\not=i}(x-x_j)}{\prod_{j\not=i}(x_i-x_j)}
\]
Le polynôme d'interpolation s'écrit
\[
P_n(x)=\sum_{i=1}^{i=n} f_i.L_i(x)
\]
Ce polynôme prend la valeur $f_i$ au point $x_i$, pour $i = 1,\ldots,n$.
Scilab permet de construire un polynôme avec la fonction `poly`, soit à partir de ses racines :
```
--> poly([1,2,3],"x","roots")
ans =
-6 +11x -6x² +x³
```
soit à partir de ses coefficients :
```
--> poly([1,2,3],"x","coeff")
ans =
1 +2x +3x²
```
Pour évaluer un polynôme en un point avec scilab, on utilise la fonction `horner`
```
--> p=poly([1,2,3],"x","coeff")
p =
1 +2x +3x²
--> horner(p,2)
ans =
17.
```
1. Voici un code qui calcule le polynome d'interpolation pour 5 points (lesquels ?)
```
n=5
x=linspace(-5,5,n)
F=[1,3,5,6,7]
for i=1:n
y=x; y(i)=[]
P(i)=poly(y,"x")
P(i)=P(i)/horner(P(i),x(i))
end
Pn=F*P
plot2d([-5:0.1:5],horner(Pn,[-5:0.1:5]))
plot2d(x,F,-2)
```
<div align="center">
<img src="./img/lagrange1.png">
</div>
1. Modifier le code pour interpoler la fonction $f(x)=\frac{1}{1+x^2}$. Faites afficher le polynôme interpolateur et la fonction $f$ pour $n=5,10,15,20$. Que constate-t-on ?
2. Faites varier le nombre de points d'interpolation et estimer l'erreur commise
\[
\lVert P_n - f\rVert_{\infty} = \sup_{x\in [-5,5]} |P_n(x)-f(x)|
\]
et tracer la en fonction de $n$
## Approximation avec les polynômes de Bernstein.
On cherche à approcher une fonction sur $[0,1]$ par les polynômes de Bernstein :
\[
B_n(f)(x) = \sum_{k=0}^{k=n} \binom{n}{k}f(\frac{k}{n}) x^k (1-x)^{n-k}
\]
On va utiliser le fait que pour $x$ fixé dans $[0,1]$ les coefficients $\binom{n}{k}x^k(1-x)^{n-k}$ sont les probabilités d'une loi
binomiale. utilisera la fonction scilab `binomial`.
On prendra `nr=200` points pour le tracer des courbes. On cherche à approcher la fonction
\[
g(x)=\frac{\sin 5\pi x}{1+10x^2}
\]
1. Tracer sur un même graphique la fonction $g$ et $B_3(f)$
2. Tracer sur un même graphique $g$ et $B_n(f)$ pour $n$ `5:20:200`. Que constate-t-on ?

BIN
num/tp3/img/lagrange1.png Normal file

Binary file not shown.

After

(image error) Size: 28 KiB