Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Compte Rendu TP3 Optim

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 7

Compte Rendu TP3 : Algorithmes de descente pour la recherche

du minimum d’une fonction. Algorithme du gradient à pas fixe,


algorithme du gradient conjugué et algorithme de Newton.
Réalisé par :
ZOHRA DARDOUR
ISLEM LOUHICHI
1TA4

1. Fonctions objectifs :
Soit la fonction f(x,y)= x 𝑒 −𝑥 2−𝑦2 et g(x,y)= x²+y²+z²-xy-yz+3x-y-2z

Q1.1- Saisir les instructions suivantes :

x = linspace(-2,2,20);
y = x' ;
z = x .* exp(-x.^2 - y.^2);
surf(x,y,z)

Q1.2-
function [Y]=gradf(X)
% je décompose X en deux éléments
x=X(1);
y=X(2);
% j’initialise Y
Y=zeros(1,2);
% Je calcule la dérivée partielle de f par rapport à x
Y(1)=exp(-x^2-y^2)-2*x^2*exp(-x^2-y^2);
% Je calcule la dérivée partielle de f par rapport à y
Y(2)=-2*y*x*exp(-x^2-y^2);
% Ces mêmes résultats peuvent être calculés à partir de la fonction
prédéfinie sur Matlab
Syms pour Création de variables symboliques
syms x y
f=x*exp(-x^2-y^2);
YY=subs(gradient(f),[x,y],[X(1),X(2)]);
End

Dans ce cas :
function [Y,YY]=gradf(X)
x=X(1);
y=X(2);
Y=zeros(1,2);
YY=zeros(1,2);
Y(1)=exp(-x^2-y^2)-2*x^2*exp(-x^2-y^2);
Y(2)=-2*y*x*exp(-x^2-y^2);
syms x y
f=x*exp(-x^2-y^2);
YY=subs(gradient(f),[x,y],[X(1),X(2)]);
end

Appel en Main
X=[0.5 1.5];
[Y,YY]=gradf(X);

----> Résultat de simulation


Y=
0.0410 -0.1231
YY =
exp(-5/2)/2
-(3*exp(-5/2))/2

Q 1.3-
function [H]=hessf(X)
syms x y
f=x*exp(-x^2-y^2);
X=[0.5 1.5];
A=subs(hessian(f,[x,y]),[x,y],[X(1),X(2)]);
H=eval(A);
End

Main Program
X=[0.5 1.5];
[H]=hessf(x);
Solution :
H=
-0.2052 -0.1231
-0.1231 0.2873

Q1.4-
function [Y]=gradg(X)
syms x y z
g=x^2+y^2+z^2-x*y-y*z+3*x-y-2*z;
sol=subs(gradient(g),[x,y,z],[X(1),X(2),X(3)]);
Y=eval(sol)
end
Main program
Xg=[0.5 1.5 1];
[Yg]=gradg(Xg);
Résultat de simulation
Yg =
2.5000
0.5000
-1.5000

2. Algorithme du gradient à pas fixe :


Q 2.1 -
function [X,k]=gradfix(x0,e,p)
X=x0;
k=0;
while norm(gradf(X))>e;
X=X-p*eval(gradf(X))
k=k+1;
eval(gradf(X));
end
End

Main program
x0=[0.5;1.5];
e=10^-3;
p=0.5;
k=0;
[X,k]=gradfix(x0,e,p)

-----> Résultat de simulation


>> [X,k]=gradfix(x0,e,p)
X=
-0.7071
0.0007
k = 152
-----> Résultat de simulation
p=1 ;
[X,k]=gradfix(x0,e,p)
X=
-0.7076
0.0002
k = 80

3. Algorithme de Newton:
function [X,k]=newton(x0,e)
X=x0;
k=0;
while norm(gradf(X))>e
X=X-hessf(X)\(eval(gradf(X)));
k=k+1;
eval(gradf(X));
end
End

Main Program
e=10^-12;
[X1,k1]=newton(X0,e);

------> Résultat de simulation


X1 =
0.2377
5.3651
k1 = 25

Interprétation:
- Newton converge plus rapidement ( ici pour vérifier ceci il faut choisir
e=10^-12)
- Si p=1 Newton et gradient fixe donnent le même résultat

4. Algorithme du gradient conjugué :


function [X,k]=gradconj(A,b,x0,e)
X=x0;
k=0;
while norm(gradg(X))>e
C=A*X-b;
D=-eval(gradg(X));
F=A*D;
alpha=-sum(C.*D)/sum(F.*D);
X=X-alpha*eval(gradg(X));
k=k+1;
end
end
Main program
A=[1 -1 0;-1 1 -1;0 -1 1];
b=[-3;1;2];
[X,k]=gradconj(A,b,X0,e)

Vous aimerez peut-être aussi