Vous êtes sur la page 1sur 9

REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET

POPULAIRE MINISTERE DE L’ENSEIGNEMENT SUPERIEUR


ET DE
LA RECHERCHE SCIENTIFIQUE

Université De Kasdi Merbah Ouargla


Faculté d’hydrocarbures et des énergies
renouvelables
Et sciences de la terre et de l’univers

Département Production des Hydrocarbures

NIVEAU : 1ère Année Master


OPTION : Production professionnelle
MOUDULE : Méthodes numériques appliquées 2

Réalisé par : Dirigé par :


MAALEM Tarek Mr. DOUAK Mohamed
MECHRI Khaled (Groupe: 04)

Année universitaire: 2021 /2022


But du TP : Durant ce TP, nous allons implémenter sous Matlab des algorithmes d’interpolation
étudiés de méthodes numériques : la méthode de Lagrange et la méthode de Newton.

I/ Polynôme de Lagrange :

Quelques commandes de MATLAB utilisés dans ces programmes :

clc: efface le contenu de la fenêtre de commande.


clear : efface toutes les variables crées dans l'espace de travail.
syms : créer des objets symboliques de l'espace de travail.
~= : inégalité
% : Une ligne de commande commençant par ce caractère est une ligne de commentaire.
disp (var) : affiche le contenu de var.
pretty (x) : affiche l'expression de "x" dans une forme proche des expressions mathématiques.
simplify (x) : simplifie l'expression " x" en utilisant les règles de simplification.
inline : créer la fonction inline directement dans l’espace de travail.
size (x): nombre de lignes et de colonnes de "x".
input : permet la saisie d’une valeur depuis le clavier.
Switch … case … end : expression dont les valeurs peuvent correspondre aux valeurs associées aux différents case.
plot(x,y,'s') : tracé d'une courbe ou d'un nuage de points.
Print : imprimer le contenu de la fenêtre active.
Min (x), max (x) : minimum, maximum.

1er Programme :

clc;clear
syms X
x=[4 6 8 10];
y=[1 3 8 20];
n=size(x,2);
p=0;
for i=1:n
L=1;
for j=1:n
if(j~=i)
L=((X-x(j))/(x(i)-x(j)))*L;
end
end
p=p+y(i)*L;
pretty (L)
end
simplify (p) % collect (p)
p=inline(p);
p(5)

Résultat :

/X \/X \/X 5\
-|--3||--2||---|
\2 /\4 /\6 3/

/X \/X \/X 5\
|--2||--4||---|
\2 /\2 /\4 2/

/X \/X \/X \
-|--3||--1||--5|
\2 /\4 /\2 /

/X \/X 3\/X 2\
|--4||---||---|
\2 /\4 2/\6 3/

ans =

X^3/12 - (9*X^2)/8 + (71*X)/12 - 10

ans =

1.8750

>>

2ème Programme :

clc
disp('-------------Lagranges interpolation method------------------')
syms x
%s=input ('les valeur de x= '); %[-1 2 4 5];
%f=input ('les valeur de y= '); %[-2 43 213 376];
s=[-1 2 4 5 ];
f=[-2 43 213 376];
n=size(s,2) %length
p=0;
m = size( f ,2);
if ( n ~= m )
disp(' |')
disp ( 'erreur lagrange: nombre de coordonnees et le nombre de valeurs de la fonction
doit etre egale' )
s=input ('les valeur de x= '); %[-1 2 4 5];
f=input ('les valeur de y= '); %[-2 43 213 376];
n=length(s);
end
for i=1:n;
l=1;
for j=1:n;
switch i~=j ;% i est different de j
case 1
l=((x-s(j))/(s(i)-s(j)))*l;
end
end
l
pretty(l)
u=collect(l)
p=l.*f(i)+p;
end
disp(' |')
disp(' X(i) F(Xi)')
disp(' |')
for i=1:n;
fprintf('\t%.f\t %.f\n', s(i), f(i));
disp(' |')
end
p
p=collect(p)
h=inline(p);
u=min(s)-1:0.001:max(s)+1;
%a=input ('donne la valeur de x= ');
a=1.5
plot(s,f,'k-',s,f,'ko',u,h(u),'r-','linewidth',2)
h(a)
Résultat :
-------------Lagranges interpolation method------------------

n=

l=

-(x/3 - 2/3)*(x/5 - 4/5)*(x/6 - 5/6)

/x 2\/x 4\/x 5\
-|---||---||---|
\3 3/\5 5/\6 6/

u=

- x^3/90 + (11*x^2)/90 - (19*x)/45 + 4/9

l=

(x/2 - 2)*(x/3 + 1/3)*(x/3 - 5/3)

/x \/x 1\/x 5\
|--2||-+-||---|
\2 /\3 3/\3 3/

u=

x^3/18 - (4*x^2)/9 + (11*x)/18 + 10/9

l=

-(x/2 - 1)*(x/5 + 1/5)*(x - 5)

/x \/x 1\
- | - - 1 | | - + - | (x - 5)
\2 /\5 5/

u=

- x^3/10 + (3*x^2)/5 - (3*x)/10 - 1

l=

(x/3 - 2/3)*(x/6 + 1/6)*(x - 4)

/x 2\/x 1\
|------| | - + - | (x - 4)
\3 3/\6 6/

u=

x^3/18 - (5*x^2)/18 + x/9 + 4/9

|
X(i) F(Xi)
|
-1 -2
|
2 43
|
4 213
|
5 376
|

p=

43*(x/2 - 2)*(x/3 + 1/3)*(x/3 - 5/3) + 2*(x/3 - 2/3)*(x/5 - 4/5)*(x/6 - 5/6) - 213*(x/2 - 1)*(x/5 + 1/5)*(x - 5)
+ 376*(x/3 - 2/3)*(x/6 + 1/6)*(x - 4)

p=

2*x^3 + 4*x^2 + 5*x + 1

a=

1.5000

ans =

24.2500

>>
3ème Programme :

1- On met le programme sous un nom par exemple : "lagrange1.m"

clc; clear all;

syms X

x=[4 6 8 10];

y=[1 3 8 20];

p=lagrange(X,x,y)

2- Et un sous programme dans un autre script : "lagrange.m"

function p=lagrange(a,x,y)
clc
n=length(x);
p=0;
for i=1:n;
l=1;
for j=1:n;
if j~=i
l=((a-x(j))/(x(i)-x(j)))*l;
end
end p=l.*y(i)
+p; end
p=simplify(p);
disp(' |')
disp(' X(i) F(Xi)')
disp(' |')
for i=1:n;
fprintf('\t%.f\t f(x)=%.f\n', x(i), y(i));
disp(' |')
end
Résultat :

|
X(i) F(Xi)
|
4 f(x)=1
|
6 f(x)=3
|
8 f(x)=8
|
10 f(x)=20
|

p=

X^3/12 - (9*X^2)/8 + (71*X)/12 - 10

>>

II/ Polynôme de Newton:

4ème Programme :

clear; clc;
X=[4 6 8 10];
Y=[1 3 8 20];
syms x
p=Y;
ni=length(x);
n=length(X)-1;
for i=2:(length(p));
p(i:end)=(p(i:end)-p((i-1):(end-1)))./(X(i:end)-X(1:end-i+1));
end
Yi=p(n+1)*ones(1,ni);
for k=1:length(X)-1
Yi=p(n+1-k)+Yi.*(x-X(n+1-k));
end
Yi=collect(Yi)
f=inline(Yi);
f(5)

Résultat :

Yi =

x^3/12 - (9*x^2)/8 + (71*x)/12 - 10

ans =

1.8750

>>
5ème Programme :
clc
clear all
syms x
X=[4 6 8 10];
y=[1 3 8 20];
r=y;
a=size(x,1)
m=size(X,2)-1
for i=2:(size(r,2));
r(i:end)=(r(i:end)-r((i-1):(end-1)))./(X(i:end)-X(1:end-i+1))
end
b= r(m+1)
p = r(m+1)*ones(1,a)
for T = 1 : length(X) - 1
p = r(m+1-T)+p.*(x-X(m+1-T))
end
p=collect(p)
h=inline(p);
u=min(X)-1:0.001:max(X)+1;
plot(X,y,'k-',X,y,'ko',u,h(u),'r-','linewidth',2)
s=h(4.5)

Résultat :

a=

m=

r=

1.0000 1.0000 2.5000 6.0000

r=

1.0000 1.0000 0.3750 0.8750

r=

1.0000 1.0000 0.3750 0.0833

b=

0.0833

p=

0.0833
p=

x/12 - 7/24

p=

(x/12 - 7/24)*(x - 6) + 1

p=

((x/12 - 7/24)*(x - 6) + 1)*(x - 4) + 1

p=

x^3/12 - (9*x^2)/8 + (71*x)/12 - 10

s=

1.4375

>>

Comparaison :
Les polynômes de Lagrange , permettent d'interpoler une série de points par un polynôme qui passe
exactement par ces points appelés aussi nœuds.
Contrairement à l'interpolation newtonienne, qui est une méthode d'interpolation polynomiale permettant
d'obtenir le polynôme de Lagrange comme combinaison linéaire de polynômes de la "base newtonienne".

Vous aimerez peut-être aussi