Feuille de TP 2

publicité
Université d’Orléans
L3 groupe 2
Outils numériques
2ème semestre 2006/2007
Feuille de TP 2
—————————————————
Exercice 1 : Algorithme de Hörner
Le calcul des valeurs d’un polynôme peut s’effectuer de deux manières. La méthode classique est celle de la
somme des puissances:
N
X
p(x) =
ai xi .
i=0
Une autre méthode est celle de Hörner:
p(x) = x(x(x(...(aN )...) + a2 ) + a1 ) + a0 .
Ecrire l’algorithme de Hörner sous la forme d’une suite récurrente, et programmer une fonction Scilab
y = Horner(p, x) calculant la valeur au point x du polynôme représenté par le vecteur ligne p = (a0 a1 . . . aN )
de ses coefficients.
En langage Scilab, cela se programme de la manière suivante:
p = [a0 a1 . . . aN ] ;
pol=poly(p,"x","coeff") ;
horner(pol,x)
—————————————————
Exercice 2 : Phénomène de Runge
1. Soit x = {x0 , x1 , . . . , xN } le tableau des N + 1 points d’interpolation et y = {y0 , . . . , yN } le tableau des
valeurs de la fonction aux points xi . Programmer une fonction Scilab p = interpolV DM (x, y) calculant
le polynôme d’interpolation pN , par la méthode d’inversion de la matrice de Van der Monde.
On définira x et y comme des vecteurs ligne.
2. Faire un script Scilab T racepolyV DM pour tracer sur un même graphique la fonction cos et son polynôme
d’interpolation aux points xi = 2iπ/(N + 1), i ∈ {0, . . . , N + 1}. On prendra N = 1, 2, 5, 10.
On représentera sur le même graphique les points d’interpolation par des points ou des croix. On utilisera
pour évaluer le polynôme d’interpolation en un point la fonction horner.
3. Considérons la fonction f (t) = 1/(1 + 25t2 ) sur l’intervalle [−1, 1]. Comme précédemment, écrire un
script construisant les polynômes d’interpolation de Lagrange pN de degré N aux points tj = −1 + 2j/N ,
j = 0, 1, . . . , N , pour N = 5 et N = 10, et les représentant sur un graphe, ainsi que la fonction f .
Constater l’instabilité numérique du procédé : l’interpolant présente de grandes oscillations au voisinage
des extrémités de l’intervalle. C’est le phénomène de Runge.
Que se passe-t-il si on interpole aux points suivants, dit points de Tchebychev ? (avec ici a = −1, b = 1)
(2j + 1)π
b−a
1 + cos
, j = 0, 1, . . . , N
tj = a +
2
2(N + 1)
1
Exercice 3 : Algorithme des différences divisées
Rappel de l’algorithme. On donne n + 1 points (x0 , y0 ), . . . , (xn , yn ) où les xi sont distincts. On note pn (x)
le polynôme d’interpolation de Lagrange (de degré n) qui satisfait pn (xi ) = yi ∀i ∈ {0, 1, . . . , n}. On rappelle
que
pn (x) = y[x0 ] + y[x0 , x1 ](x − x0 ) + y[x0 , x1 , x2 ](x − x0 )(x − x1 ) + · · · + y[x0 , . . . , xn ](x − x0 )(x − x1 ) . . . (x − xn−1 )
où les différences divisées sont définies par
y[xi ]
= yi
y[x1 ] − y[x0 ]
y[x0 , x1 ] =
x1 − x0
y[x1 , x2 ] − y[x0 , x1 ]
y[x0 , x1 , x2 ] =
x2 − x0
..
.
y[x1 , . . . , xn ] − y[x0 , . . . , xn−1 ]
y[x0 , . . . , xn ] =
xn − x0
Calcul pratique des différences divisées. Pour le calcul pratique des différences divisées, on range les
valeurs yi dans un tableau T ab, puis on modifie ce tableau en n étapes successives :
0
1
2
..
.
T ab(0)
y0
T ab(1)
y1
y[x0 , x1 ]
T ab(2)
y2
y[x1 , x2 ]
y[x0 , x1 , x2 ]
...
...
...
...
T ab(n − 2)
yn−2
...
...
T ab(n − 1)
yn−1
y[xn−2 , xn−1 ]
...
T ab(n)
yn
y[xn−1 , xn ]
y[xn−2,n−1,n ]
...
...
...
...
y[x0 , . . . , xn ]
n
Les espaces blancs dans le tableau ci-dessus signifient qu’on ne change pas la valeur de T ab. Remarquer
également que pour coder en Scilab cet algorithme, il faut décaler tous les indices de 1 car un tableau ne
commence jamais à 0.
Dans les questions suivantes, x désigne un tableau de taille n + 1 contenant les réels distincts xi , et y désigne
un tableau de même taille contenant les yi .
1. Programmer une fonction Scilab T ab = taby(n, x, y) calculant les différences divisées. T ab est le tableau
de même taille que y tel que T ab(k) = y[x0 , . . . , xk ].
Pour calculer la valeur pn (t) du polynôme d’interpolation à partir des différences divisées, on utilise le
schéma de Hörner :
pn (t) = T ab(0) + (x − x0 )(T ab(1) + (x − x1 )(T ab(2) + · · · + (x − xn−1 )T ab(n))).
2. Programmer une fonction Scilab val = Hornerbis(x, y, t) calculant la valeur du polynôme d’interpolation
pn (t) au point t. Cette fonction fera appel à la fonction taby précédente.
3. Faire un programme Scilab T racepoly pour tracer sur un même graphique la fonction cos et son polynôme
d’interpolation aux points xi = 2iπ/(n + 1), i ∈ {0, . . . , n + 1}. On prendra n = 1, 2, 10, 20.
4. Faire le tracé pour d’autres fonctions, par exemple cos(1/x) (avec x variant entre > 0 et 1), ou encore
xi uniformément réparti sur [0, 1] et yi choisis aléatoirement dans [0, 1].
2
Téléchargement