Vous êtes sur la page 1sur 3

INSAT 2022/2023

Analyse numérique - TP 02
Interpolation polynômiale
IMI3 Octave

Octave offre une large gamme de commandes pour la minipulation des polynômes y compris l’interpolation
polynômiale. Il suffit d’executer "lookfor polynomial" et "lookfor interpolation" pour voir toute la
liste.
Un polynôme p ∈ Rn [X] qui s’écrit
0
p(x) =
ft
X

k=n
ak xk = an xn + an−1 xn−1 + · · · + a1 x + a0 .

est représenté par, un vecteur ligne, p , de taille n + 1 contenant tous les coefficients (ak )n≥k≥0 dans l’ordre
décroissant des indices:
ra
p(x) Octave

3x2 + x + 1 p=[3 2 1]

4x5 + 3x2 + 1 q=[4 0 3 0 1]


D

Dans ce cas, pour calculer la somme de deux polynômes, il faut que les vecteurs soient de même tailles. La
commande "conv" effectue la multiplication de deux polynômes et "deconv" effectue la division, (voir le
help pour plus de détails.)

Exercice 1
1. Soient les polynômes p(x) = 3x2 + x + 1 et q(x) = 4x5 + 3x2 + 1.

(a) Déclarer p et q.
(b) Calculer p + q, p ∗ q, q/p, p′ , la primitive de p qui s’annule en 1.
(c) Déterminer les racines de p et de q.

2. (a) Evaluer p sur [−1, 1] à l’aide de la commande polyval.


(b) Tracer les courbes de p(x) et q(x) pour x ∈ [−1, 1] sur le même graphe.
p
3. On veut approcher f (x) = 2 + log(x) + cos2 (x) sur I = [1, 5] en n + 1 points par un polynôme de
degrès m. Pour cette fin, on peut uriliser "polyfit" permetteant de calculer le polynôme de degrès m
qui minimise, au sens des moindres carrés, l’écart aux données.

(a) Soit x le vecteur de 10 points d’interpolation équidistants de I.


(b) Pour m ∈ {1, 4, 9}, déterminer l’expression de pm le polynôme de degrès m qui aproche f le
mieux aux points d’interpolation.
(c) Sur le même graphe, tracer les courbes de f et pm pour les différentes valeurs de m.
(d) Comparer f et pm aux noeuds d’interpoaltions. Que peut on remarquer.
2 Mathématique appliquées – Tp 2

(e) Calculer une approximation de ||f (t) − pm (t)||∞ pour m ∈ {1, 4, 9}.

Exercice 2
p
On se propose de calculer pn le polynôme d’interpolation de Newton de f (x) = 2 + log(x) + cos2 (x)
sur I = [1, 5]. On rappelle que:
n
X
pn (x) = f [x0 , . . . , xk ](x − x0 ) · · · (x − xk−1 )
k=0

où f [x0 , . . . , xk ] est la différence divisée d’ordre k et est définie par:




 f [xk ] = f (xk ) 0≤k≤n

f [x1 , . . . , xk ] − f [x0 , . . . , xk−1 ]
 f [x0 , . . . , xk ] = 1≤k≤n


xk − x0

ft
1. On considère x le vecteur de 10 points aléatoires.

2. Écrire la fonction "transf_affine" pour transformer les points sur [a, b] à l’interval [α, β].

3. Écrire la fonction "dd=newton_dd(x,y)" pour calculer la "matrice" des différences divisées.


ra
4. Écrire la fonction "yt=newton_poly_eval_pt(dd,x,t)" pour évaluer pn en un point donné t. Les
paramètres d’entrés sont les différences divisées, le vecteur ”x” et le point t et "yt" sera la valeur de
pn (t).

5. Écrire la fonction "ytt=newton_poly_eval_vect(dd,x,tt)" qui évalue pn en un vecteur de points


tt (on peut s’inspirer de "newton_poly_eval_pt").
D

6. Tracer sur un même graphe les courbes de f et pn .

Exercice 3
p
On se propose de calculer pn le polynôme d’interpolation de Lagrange de f (x) = 2 + log(x) + cos2 (x)
sur I = [1, 5]. On rappelle que:
Xn
pn (x) = yk Lk (x)
k=0
n
Y x − xj
avec yk = f (xk ) et Lk (x) = avec 0 ≤ k ≤ n.
xk − xj
j=0, k̸=k

1. (a) Écrire la fonction "yt=lagrange_interp_eval_loop(x,y,t)" qui évalue pn , sous sa forme


de Lagrange, en m points stockés dans t. x et y sont les vecteurs des coordonnées des nœuds
d’interpolation. On aura besoin de trois boucles dans cette fonction.
(b) Valider le code avec un cas test.

2. La version précédente peut être vectorisée. Par conséquent, on peut éliminer certaines boucles ce qui
va accélérer le calcul. Pour atteindre cet objectif, on a besoin de modifier la méthode de calcul des
polynômes (Lk )0≤k≤n .
On a:
n
Y
t − xj
n
Y t − xj j=0, j̸=k β(t, k)
Lk (t) = = n =
xk − xj Y δ(k)
j=0, j̸=k xk − xj
j=0, j̸=k
Mathématiques appliquées – TP 2 3

n
Y n
Y
avec β(t, k) = t − xj et δ(k) = xk − xj .
j=0, j̸=k j=0, j̸=k
n n
Y w(t) Y
On remarque que β(t, k) = t − xj = où w(t) = (t − xk ).
t − xk
j=0, j̸=k j=0
Cette formule est plus efficace du point de vue numérique puisque w ne dépend pas de k et donc peut
être calculé une seule fois pour t donnée sans avoir besoin de boucle:
t_x=t-x
wt=prod(t_x)
Par ailleurs, δ(k) dépend de k seulement et donc peut être calculé une seule fois pour chaque valeur de
k et sera stocké dans un vecteur qu’on notera δ:
for k=1:n
delta(k)= prod( x(k)- x(setdiff(1:n,k)) )
endfor

ft
Alors, l’expression de Lk (t) devient:

Lk (t) =
w(t) 1

t − xk δ(k) 0≤k≤n
.

Cette expression permet de calculer le vecteur lk=[Lk (t)]0≤k≤n sans utiliser une boucle sur k. En effet,
ra
lk=wt./(t_k .* delta)

Conclusion: pour t donné, le calcul de tous les polynômes Lk (t) peut être accéléré en utilisant la
vectorisation.
(a) Écrire la fonction yt=lagrange_interp_eval_pt(x,y,t) qui permet d’évaluer pn en un point
D

donné t en utilisant le minimum de boucle.


(b) Écrire la fonction yt=lagrange_interp_eval(x,y,tt) qui permet d’évaluer pn en un ensemble
de points donnés stocké dans le vecteur tt en utilisant le minimum de boucle.

Exercice 4
On va comparer le temps de calcul aux trois versions implémentées (Newton, Lagrange avec bocule et
Lagrange vectorisée) pour évaluer pn en m + 1 points de I pour différentes valeurs de m.
1. Soit t le vecteur contenant m + 1 points équidistants de I.
2. Evaluer pn (t) à l’aide des trois versions et calculer le temps CPU.
3. Pour m + 1 = 2α avec α ∈ {4, . . . , 13}, tracer les trois courbes du temps CPU en fonction de m sur
un même graphe.
4. Conclure.

Exercice 5
Dans cette partie on va mettre en évidence le phénomène de Runge. Pour cela, on considère ψn le
1
polynôme d’interpolation de la fonction f (x) = en n + 1 points équidistants sur J = [−5, 5].
1 + x2
1. Pour chaque valeur n ∈ {4, 6, 8, 10}:
(a) Déterminer x le vecteur de n + 1 points équidistants sur J.
(b) Déterminer pn le polynôme d’interpolation de f aux points x.
(c) Tracer sur le même graphe la courbe de pn et celle de f .
2. Que peut on conclure?

Vous aimerez peut-être aussi