diff --git a/num/tp3/README.md b/num/tp3/README.md new file mode 100644 index 0000000..fae83be --- /dev/null +++ b/num/tp3/README.md @@ -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 ? diff --git a/num/tp3/img/lagrange1.png b/num/tp3/img/lagrange1.png new file mode 100644 index 0000000..6abb377 Binary files /dev/null and b/num/tp3/img/lagrange1.png differ