TP2 : Interpolation
Le présent TP a pour objectif de comprendre le principe de l’interpolation polynomiale. En
particulier les trois méthodes d’interpolation : Lagrange, Newton et les splines.
1- Interpolation de Lagrange
Programme 1 :
clc; clear; close all;
x_nodes = [0,1, 2, 3, 5]; % Abscisses des points
y_nodes = [1, 2, 9, 28, 54]; % Ordonnées des points
n = length(x_nodes); % Nombre de points
syms x; % Variable symbolique
% Calcul de chaque polynôme élémentaire de Lagrange
for i = 1:n
L_i = 1; % Initialisation de L_i(x)
for j = 1:n
if j ~= i
L_i =L_i*(x - x_nodes(j)) / (x_nodes(i) - x_nodes(j));
end
end
L(i) = L_i; % Stockage du polynôme de Lagrange L_i(x)
end
P = 0;
for i = 1:n
P = P + y_nodes(i) * L(i);
end
disp('Le polynome d''interpolaion est :' );
simplify(P)
fplot(P, [min(x_nodes)-1, max(x_nodes)+1], 'b'); % Tracé de P(x)
hold on;
plot(x_nodes, y_nodes, 'ro'); % Points
grid on;
xlabel('x'); ylabel('y'); title('Interpolation de Lagrange');
legend('Polynôme d''interpolation P(x)', 'Points d''interpolation');
2- Interpolation préprogrammée dans Matlab
Programme 2 :
clear all; clc; close all;
x_node = [0, 1, 2, 3]; % Données d'interpolation
y_node = [1, 2, 9, 28];
n = length(x_node) - 1;
p = polyfit(x_node, y_node, n); % coefficients du polynôme d'interpolation
syms x; % Déclare la variable symbolique 'x'
Poly = 0; % Initialisation du polynôme
% Construction du polynôme en ajoutant chaque terme
for i = 1:n+1
deg = n - (i - 1); % Degré du terme (n, n-1, ..., 0)
% Condition pour ignorer les petits coefficients
if abs(p(i)) < 1e-5
p(i) = 0; % Mettre à zéro si le coefficient est très petit
end
Poly = Poly + p(i) * x^deg; % Ajout du terme avec la bonne puissance
end
% Affichage du polynôme
disp('Équation du polynôme :');
Poly
3- Splines cubiques
Programme 3 :
clc; clear; close all;
% Données
x = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45];
y = [55, 60, 58, 54, 55, 60, 54, 57, 52, 49];
% Calcul des coefficients de la spline cubique
pp = spline(x, y); % Fonction de spline cubique
coeffs = [Link]; % Coefficients des polynômes par morceaux
% Points pour interpolation
xx = linspace(min(x), max(x), 200);
yy = ppval(pp, xx);
% Tracé du graphe
plot(x, y, 'ro', 'MarkerFaceColor', 'r', 'DisplayName', 'Points Donnés'); hold on;
plot(xx, yy, 'b-', 'LineWidth', 1.5, 'DisplayName', 'Spline Cubique Naturelle');
% Affichage des polynômes sur la courbe
for i = 1:length(x)-1
% Récupération des coefficients pour l'intervalle [x(i), x(i+1)]
a = coeffs(i,1); b = coeffs(i,2); c = coeffs(i,3); d = coeffs(i,4);
% Création d'une chaîne de caractères pour afficher l'équation
equation = sprintf('S_%d(x) = %.3fx^3 + %.3fx^2 + %.3fx + %.3f', i-1, a, b, c, d);
% Position pour afficher l'équation (milieu de l'intervalle)
x_mid = (x(i) + x(i+1)) / 2;
y_mid = ppval(pp, x_mid);
% Affichage sur le graphe
text(x_mid, y_mid, equation, 'FontSize', 8, 'Color', 'k', 'BackgroundColor', 'w');
end
legend;
title('Interpolation par Splines Cubiques');
xlabel('x'); ylabel('y'); grid on;
Exercice
Soient les points suivants
𝒙 0 5 10 15 20 25 30 35 40 45 50 55
𝒚 = 𝒇(𝒙) 55 60 58 54 55 60 54 57 52 49 55 53
1/ Quel est le degré du polynôme ℘𝑛 (𝑥) qui passe par tous les points du tableau ?
2/ En utilisant la méthode de Lagrange
a- Calculer les polynômes élémentaires de Lagrange ℒ𝑖 (𝑥).
b- Déterminer le polynôme ℘𝑛 (𝑥).
c- Tracer la courbe qui inclue les points du tableau et le polynôme ℘𝑛 (𝑥).
d- Déduire 𝑓(2) et 𝑓(53).
3/ Utiliser la fonction préprogrammée « polyfit » pour déterminer le polynôme d’interpolation.
a- Déterminer le polynôme d’interpolation.
b- Tracer la courbe qui inclue les points du tableau et le polynôme d’interpolation.
c- Déduire 𝑓(2) et 𝑓(53).
4/ Utiliser la fonction préprogrammée « spline » pour déterminer les splines cubiques qui
passent les points du tableau.
a- Déterminer tous les polynômes cubiques donnés par les splines.
b- Représenter graphiquement les splines cubiques et les points du tableau.
e- Déduire 𝑓(2) et 𝑓(53).