0% ont trouvé ce document utile (0 vote)
8 vues4 pages

Interpolation polynomiale avec Python

Le document présente un TP sur l'interpolation polynomiale utilisant la méthode de Lagrange et de Newton. Il décrit les objectifs, les méthodes d'implémentation en Python avec la bibliothèque numpy, ainsi que des exemples de code pour déclarer des polynômes et effectuer des interpolations. Les étudiants doivent écrire des fonctions pour calculer les polynômes d'interpolation et déterminer les expressions de ces polynômes pour des ensembles de points donnés.

Transféré par

y.yasmine.zerzeri
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
8 vues4 pages

Interpolation polynomiale avec Python

Le document présente un TP sur l'interpolation polynomiale utilisant la méthode de Lagrange et de Newton. Il décrit les objectifs, les méthodes d'implémentation en Python avec la bibliothèque numpy, ainsi que des exemples de code pour déclarer des polynômes et effectuer des interpolations. Les étudiants doivent écrire des fonctions pour calculer les polynômes d'interpolation et déterminer les expressions de ces polynômes pour des ensembles de points donnés.

Transféré par

y.yasmine.zerzeri
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

É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 .

Vous aimerez peut-être aussi