Vous êtes sur la page 1sur 9

UNIVERSITE VIRTUELLE DE CÔTE D’IVOIRE

www.uvci.edu.ci

INDICATION DE SOLUTION DU DEVOIR DE MAISON MASTER 1


Calcul scientifique
Semestre 1 - Tronc Commun
Spécialités : CIO – BC – BDA

1. Informations générales
Cet exercice illustre l’utilisation pratique de l’interpolation polynomiale et présente quelques limites
rencontrées lors de l’interpolation polynomiale

Interpolation de Lagrange
L’existence et l’unicité se montrent en 2 étapes :

Etape 1 Existence

Remarquer que la famille de polynômes Li ( x ) sont tous de degré n et construire alors le polynôme

n
pn ( x ) =∑ f ( x i ) Li ( x ) et montrer que pn ( x i) =f ( x i ) où les x 0 , x 1 ,… , x nsont les n+1 points donnés
j =0

Etape 2 Unicité

Considérer deux polynômes de Lagrange de degré n solution su problème et montrer que la différence
est le polynôme nul.

L’un des inconvénients majeurs de l’utilisation directe des polynômes de Lagrange est que si l’on veut
passer d’un polynôme de degré n à un polynôme de degré n+1, par exemple par ajout d’un nouveau
point, il faut recommencer entièrement tous les calculs en estimant n+2 polynômes de degré n+1.
Cela est fastidieux. La méthode des différences divisées de Newton comble cette lacune.

Exercice 1

On considère le polynôme

p ( x ) =a0 +a 1 ( x − x 0 ) +a2 ( x − x 0) ( x − x 1 ) +…+a n ( x − x 0 ) ( x − x1 ) … ( x − x n −1 ) . On constate que ce

polynôme est de degré n et on cherche à déterminer les coefficients a 0 , a1 , a2 , … , a n tel que

p ( x i) =f ( x i ) . Par exemple on pose p ( x 0 )=f ( x0 ) =a0 ;


f ( x1 ) − a0 f ( x1 )− f ( x0 )
p ( x 1) =f ( x 1 ) =a0 +a1 ( x 1 − x0 ) donc a 1= = =f [ x 0 , x 1 ] . On itère le processus et
( x1 − x0 ) ( x 1 − x0 )
on conclue en utilisant le fait que le polynôme d’interpolation de Lagrange est l’unique solution du
problème pour conclure

Exercice 2

Nous allons implémenter ces résultats avec Scilab pour faire des tests pratiques

La fonction diffdiv(xpt, ypt) est la fonction qui permet de calculer les différences divisées de

Newton. Le résultat de cette fonction est un vecteur qui contient les n+1 points a 0 , a1 , a2 , … , a n

calculées dans l’exercice précédent. Il faut savoir que xpt est un vecteur ligne (tableau à une

dimension en informatique) qui est tel que le premier élément de ce tableau est x 0 , le deuxième est x 1

et le dernier élément est x n. C’est la même chose pour ypt qui lui contient les valeurs y i=f ( x i) des

points x i. Le tableau donné dans l’exercice peut se traduire aisément par un algorithme itératif (qui se

répété en partant de l’étape précédente). dpt est aussi un tableau à 1 dimension qui contient le même

nombre d’éléments que xpt .

Il faut stocker f ( x 0 ) dans dpt(1)

Ainsi on calcule d’abord les premières différences divisées par la formule suivante

i varie de 0 à m −1 avec m=length ( ypt ).


Par la suite on stocke f [ x 0 , x 1 ] dans dpt(2).

Etape 2.
On part des résultats précédents et on calcule les deuxièmes différences divisées à partir des premières
différences divisées par

i varie de 0 à m −2
Par la suite on stocke f [ x 0 , x 1 , x 2 ] dans dpt(3).

On recommence le processus en calculant à chaque fois les différences divisées définies


par :

Les nièmes différences divisées sont calculées à partie des (n-1) ièmes différences divisées
i varie de 0 à m −n
Par la suite on stocke f [ x 0 , x 1 , x 2 , … , x n ] dans dpt(n+1).

Evaluation du polynôme par la méthode de Horner. La méthode de Horner est une méthode
astucieuse qui permet d’évaluer la valeur d’un polynôme quelconque en n’importe quel point à partir
des coefficients du polynôme sans avoir à calculer les puissances successives. Dans notre exercice on
va l’utiliser pour alléger nos calculs et nous permettre à partir des différences divisées calculées
précédemment d’évaluer nos polynômes en n’importe quel point.

La fonction phorner prend en entrée le vecteur xpt qui contient les points x 0 , x 1 ,… , x n , le vecteur

dpt qui contient les différences divisées de Newton et y qui est le nombre dont on veut estimer la
valeur. En sortie elle nous donne la valeur estimée p ( y ). Son code consiste à implémenter
l’algorithme suivant qui vous a été donné en énoncé.

Le code suivant est donné à titre indicatif. Il existe d’autres possibilités d’implémentation de
l’algorithme

function yho=phorner(xp, dpt, y)


//polynome de Horner
//Paramètres d'entrée:
//xp= points de collocation
//dpt= coefficents des différences divisées
//y= vecteur des points dont on veut estimer la valeur par le polynome de Horner
//votre code ici
n = length(dpt) - 1;
b(n+1) = dpt(n+1);
for k=n-1:-1:0
b(k+1) = dpt(k+1)+(y - xp(k+1))* b(k+2);
end
yho = b(1);
endfunction

Pour les premiers tests il suffit d’implémenter le code qui est donné dans l’énoncé et si on ajoute un
code d’affichage des résultats. Afin de réduire le nombre de lignes on utilise le code suivant qui est
identique (réécriture plus élégante) à celui donné dans l’énoncé
// *** Premiers tests
xpt=[1,2,3,4];
phorner(xpt,dpt,3)deff('y=f(x)','y=sin(x)');
dpt=diffdiv(xpt,f(xpt));
for k=1:4
inter= phorner(xpt,dpt,k);
mprintf('y=%3d, sin(y)=%12.8f, p(y)=%12.8f, erreur=%12.8f\n',k,ypt(k),inter,abs(inter-
ypt(k)));
end

Les résultats obtenus sont les suivants

Ici il faut calculer les n+1 points x 0 , x 1 ,… , x n . Puisqu’ils sont équirepartis, cela signifie que la
distance entre ces points est la même et qu’ils subdivisent notre intervalle [-1 ; 1] en n sous intervalles.
( b− a )
Les points x i=a+i avec i=0,1, … , n b=1 ,a=−1
n
Une fois ces points calcules on calcule leurs valeurs f ( x i ) =exp ⁡( x i )

Les points x i sont stockés dans le vecteur xpt et leurs valeurs f ( x i ) dans le vecteur ypt

Pour la suite on s’inspire du code précédent des premiers tests pour évaluer la fonction
exp(x) sur l’intervalle [-2 ;2] qui contient 81 points d’évaluation (les p(y)). Le code pour
générer la fonction exp sur [-2 ;2] est contenue déjà dans la fonction phorner dans le
code suivant
vectx = -2:0.05:2;// intervalle d'études de la fonction
yvect = exp(vectx);// la fonction réelle y =f(x) pour x dans [-2; 2]])
for j=1:length(vectx)
//code à inscrire pour calculer l'estimation par polynome de Lagrange de y=f(x) =exp(x)
//les valeurs de x à estimer sont contenues dans le tableau vectx
// A compléter en vous inspirant du code écrit dan Premiers tests
....
end
Pour notre test on a considéré n=4. Pour voir la convergence, vous pouvez modifier la valeur
de n en l’augmentant et en observant à chaque fois le résultat obtenu. Pour cela exécuter le
fichier S2.sce. Les lignes correspondantes à notre fonction dans ce fichier sont les suivantes
//*** Question 3.a
n = 4;
poly_inter = interpol(n);
La courbe pour n= 4 est la suivante
Comme on peut le constater sur l’intervalle [-1 ; 1] les 2 courbes se superposent. La courbe
réelle est la courbe en noire la courbe obtenue par interpolation est la courbe en vert
b) Écrire la procédure einterp(n,f,a,b), avec en entrée n ϵ N , f une fonction définie sur [a, b] avec
a< b, qui trace sur un même graphe, la fonction f , le polynôme d’interpolation de Lagrange de f aux
k ( b − a)
points équidistants a+ avec k ϵ {0,1,2 , ⋯ , n }et les points d’interpolation avec un motif . Il faut
n
bien sûr utiliser diffdiv et phorner.

La fonction einterp est une généralisation de la question précédente. En effet, dans cette question, la
fonction f n’est pas connue contrairement à la question précédente où f est connue. Donc on peut
utiliser le code de interpol que l’on va adapter pour prendre en compte les nouvelles hypothèses. Le
bout de code suivant (donné à titre indicatif) de la fonction donnée à titre indicatif vous donne les
étapes à suivre pour créer les courbes de la fonction réelle et son estimée par interpolation
deff('y = f(x)', fx); //fx est une chaine de caractères entre cote simples qui contient
l'expression de f(x))
x =linspace(a,b);//vecteur ligne contenant les points de l'intervalle [a;b]
y_calc = feval(x, f);//vecteur y=f(x)
//vecteur des points de collocation
dxp = (b -a)/n;
xp = a:dxp:b;
//
//évaluation de la fonction en ces points
yp = feval(xp,f)
//Calcul des différences divisées de newton
dpt = diffdiv(xp, yp);
//évaluation de l’estimée par interpolation des points x de l'intervalle [a;b]]
for j=1:length(x);
//A compléter
...
end
Afin de tester le code , nous avons dans le fichier S2.sce, utiliser la fonction y=sin(x) sur l’intervalle
[ − π ; π ] pour tester notre resultat et evaluer la courbe d’erreur
//*** Question 3.b
n = 4;
a=-%pi ;
b = %pi;
fx = 'y=sin(x) ';
e = einterpol(n, fx, a, b);

Le résultat de la courbe de l’erreur d’interpolation est observée sur la courbe suivante

Une analyse montre que l’erreur est relativement importante et présente des oscillations qui
indiquent que le point de nombre de collocation est faible. Si on augmente ce nombre (n) , on
diminue l’importance de ces oscillations sauf aux bornes de l’intervalle(phénomène de
Runge).

Exercice 3

a) Ici, il suffit de calculer G ( x ) aux points x 0 , x 1 ,… , x n et x


b) Appliquer n +1 fois le théorème de Rolles aux intervalles [ x i ; x i+1 pour i=0,1,2 , .. ,n
( n +1 ) ( n+1 ) ( n +1) E n+1 ( x )
c) On utilise le résultat précèdent G ( ζ )=0=En ( ζ ) −ω n+1 ( ζ )
ω n+1 ( x )
( n+1 ) ( n+1 )
Calculez En ( t ) et ω n+1 ( t ) pour obtenir les résultats.
d) Chercher à majorer ω n+1 ( x ) pour x ∈ [ −1 ; 1 ]
e) Le code de la fonction interpol1 est identique à celui de einterpol. Dans le fichier
S2.sce voici le bout de code qui permet d’illustrer les résultats
//*** Question 4.e
//Illustration du phénomène de Runge
a=-5;
b = 5;
gx = 'y = 1./(1+x.*x)';
n =10;
r= interpol1(n,gx,a,b);

La figure suivante illustre les résultats

La courbe en noire est la fonction donnée, la courbe en vert, la fonction


estimée par interpolation et la courbe ne rouge l’erreur d’interpolation.
Comme on le constate des oscillations apparaissent lorsqu’on s’éloigne du
centre (Phénomène de Runge).

Exercice 5 (Interpolation de Chebyshev)

a) Le code de la fonction tinterpol est identique à celui de einterpol. La seule différence est la
construction des points x 0 , x 1 ,… , x n de xpt. Pour cela on utilise la formule donnée avec a et
b les bornes de l’intervalle d’etudes n le nombre de points de collocation (le nombre de points
dont connait la valeur de la fonction). Le code suivant dans tinterpol, vous permet de
calculer les points de Tchebychev. Le reste du code est identique à celui de einterpol
....
//calcul des valeurs exactes
x =linspace(a, b);
y_reel = feval(x, f);

//Construction des points de Tchebychev (vecteur xpt)


for k =0:n
xpt(k+1) = (b+a)/2 + ((b -a)/2)*cos(0.5*%pi*((2*k+1)/(n+1)));
end
//Construction du vecteur ypt
ypt =feval(xpt,f);
...

b) Les codes d’exécution sont dans la fonction S2.sce


///Exercice 5
//***Question 5.b tests de l'interpolation de Tchebychev sur les exemples ci-dessus
/// fonction exponentielle
n =4;
a=-2;
b=2;
fx ='y=exp(x)';
f5 =scf(5);
r1= tinterpol(n,fx,a,b);
///fonction exponentielle
a=-5;
b = 5;
gx = 'y = 1./(1+x.*x)';
n =10;
f6 =scf(6);
r= tinterpol(n,gx,a,b);

Les courbes sont les suivantes

c) Comparez les résultats avec les courbes obtenues précédemment (Question 2)


d) Commentez les résultats
e)
Fonction tinterpol pour f ( x )=x ∨. Le code suivant dans S2.sce vous permet de voir le
résultat ci-après
// Question 5.e
a=-1;
b = 1;
gx = 'y = abs(x)';
n =10;
f7 =scf(7);
r= tinterpol(n,gx,a,b);

Representation graphique

Remarque : La courbe en noir est la courbe réelle ; la courbe en vert est celle obtenue par
estimation polynomial. La courbe er rouge est l’erreur d’interpolation