École Supérieure Privée d’Ingénierie et de Technologies
Correction TP n°2 :
Interpolation polynomiale
Module: Analyse Numérique Classes: 3A-B
1 Objectif du TP
L’objectif du TP est de :
- Interpoler un nuage de points donné par un polynôme en utilisant la méthode d’interpolation
de Lagrange.
Afin d’implémenter les méthodes d’interpolation et d’approximation polynomiale, on aura be-
soin des bibliothèques numpy . Les polynômes dans numpy peuvent être créés, manipulés et même
ajustés à l’aide de la classe Polynomial du package [Link]. Il faudra charger ces mod-
ules, en tapant les commandes suivantes:
[ ]: import numpy as np
from [Link] import Polynomial
1.1 Déclaration d’un Polynôme
Un polynôme P ∈ Rn [ X ] à une indéterminée X s’écrit sous la forme :
n
P ( X ) = a0 + a1 X + a2 X 2 + · · · a n X n = ∑ ai X i ,
i =0
avec ai ∈ R.
Le polynôme P est caractérisé par ses coefficients a0 , a1 ,...,an .
Pour déclarer le polynôme P, On utilise la classe Polynomial comme suit :
P=Polynomial([a0,a1,...,an])
Il faut écrire les coefficients par ordre de degré croissant.
Exemple:
Soient P et Q deux polynômes définies par P( x ) = 1 + 2x + 3x3 , et Q( x ) = P( x ) ∗ P( x ).
Le script ci-dessous renvoie correctement l’expression des polynômes P, l’expression du
polynôme Q ainsi que l’image de 2 par P et Q.
[ ]: P=Polynomial([1,2,0,3])
print(P)
Q=P*P
print(Q)
1
print("P(2)=",P(2))
print("Q(2)=",Q(2))
2 Méthode d’interpolation de Lagrange
Question 1 :
T
Écrire une fonction nommée base_lagrange(X,i) prenant en entrée X = x0 , x1 , · · · , xn , un
vecteur colonne contenant les abscisses, i un indice tel que 0 ≤ i ≤ n, et retourne le polynôme de
la base de Lagrange Li ( x ) donné ci-dessus en utilisant la classe Polynomial.
n x − xj
Li ( x ) = ∏ xi − x j .
j =0
j ̸ =i
[ ]: def base_lagrange(X,i):
L=Polynomial([1]) # Initialisation de L
for j in range(len(X)): #len(x)=n+1
if j!=i:
a0= -X[j,0] / (X[i,0]-X[j,0])
a1= 1 / (X[i,0]-X[j,0])
L=L*Polynomial([a0,a1])
return L
Question 2 :
T
Écrire une fonction nommée polynome_lagrange(X,Y) prenant en entrée X = x0 , x1 , · · · , xn
T
un vecteur colonne contenant les abscisses, Y = y0 , y1 , · · · , yn un vecteur colonne contenant
les ordonnées, et retourne le polynôme
n
P( x ) = ∑ y i L i ( x ).
i =0
[ ]: def polynome_Lagrange(X,Y):
P=Polynomial([0]) # Initialisation de P
for i in range(len(X)):
produit=Y[i,0]* base_lagrange(X,i) #yi *Li(x)
P=P+produit
return P
Question 3 :
R
Déterminer l’expression du polynôme d’interpolation P ∈ 2 [ X ] qui relie les points de coordon-
nées (−1, 2), (0, 1) et (1, −1) en utilisant la fonction polynome_lagrange.
[ ]: X=[Link]([[-1,0,1]]).T
Y=[Link]([[2,1,-1]]).T
polynome_Lagrange(X,Y)
Out[ ]: x 7→ 1.0 − 1.5x − 0.5x2 .
2
3 Méthode d’interpolation de Newton
Question 1 :
Écrire une fonction nommée differences_divisees(X, Y) prenant en entrée :
T
• X = x0 , x1 , · · · , xn , un vecteur contenant les abscisses,
T
• Y = y0 , y1 , · · · , yn , un vecteur contenant les ordonnées.
Cette fonction doit retourner les coefficients de Newton β 0 , β 1 , · · · , β n qui sont les différences di-
visées utilisées dans le polynôme d’interpolation de Newton. Les différences divisées sont définies
récursivement par :
β 0 = f [ x0 ] = y0 et d’une manière générale f [ xi ] = yi
y1 − y0 f [ xi+1 ]− f [ xi ]
β 1 = f [ x0 , x1 ] = x1 − x0 et d’une manière générale f [ xi , xi+1 ] = x i +1 − x i
f [ x1 ,...,xi ]− f [ x0 ,x1 ,...,xi−1 ]
β i = f [ x0 , x1 , . . . , xi ] = x i − x0 et d’une manière génrale
f [ x i +1 , · · · , x j ] − f [ x i , · · · , x j −1 ]
f [ x i , x i +1 , · · · , x j ] =
x j − xi
[ ]: def differences_divisees(X, Y):
n = len(X)
diff_div = [Link]((n, n))
diff_div[:,0] = Y
for j in range(1, n):
for i in range(j,n):
diff_div[i,j] = (diff_div [i,j-1] - diff_div[i-1,j-1]) / (X[i] - X[i-j])
return [Link](diff_div)
Question 2 : Écrire une fonction nommée base_Newton(X,i) prenant en entrée X =
T
x0 , x1 , · · · , xn , un vecteur colonne contenant les abscisses xi des points d’interpolation, i un
indice tel que 0 ≤ i ≤ n, et retourne le polynôme de la base de Newton Wi ( x ) donné ci-dessus en
utilisant la classe Polynomial.
i
Wi ( x ) = ∏ ( x − x j ). ∀i ∈ {0, ..., n}
j =0
[ ]: def base_Newton(X,i):
W=Polynomial([1]) # Initialisation de W
for j in range(i):
a0= -X[j]
a1= 1
W=W*Polynomial([a0,a1])
return W
Question 3 :
3
T
Écrire une fonction nommée polynome_Newton(X,Y) prenant en entrée X = x0 , x1 , · · · , xn un
T
vecteur colonne contenant les abscisses, Y = y0 , y1 , · · · , yn un vecteur colonne contenant les
ordonnées, et retourne le polynôme
n
P( x ) = ∑ βi Wi (x).
i =0
[ ]: def polynome_Newton(X,Y):
P=Polynomial([0]) # Initialisation de P
beta=differences_divisees(X, Y)
for i in range(len(X)):
P+=beta[i]* base_Newton(X,i)
return P
Question 4 :
R
Déterminer l’expression du polynôme d’interpolation P ∈ 2 [ X ] qui relie les points de coordon-
nées (−1, 2), (0, 1) et (1, −1) en utilisant la fonction polynome_Newton.
[ ]: X=[Link]([-1,0,1]).T
Y=[Link]([2,1,-1]).T
polynome_Newton(X,Y)
Out[ ]: x 7→ 1.0 − 1.5x − 0.5x2 .