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