Algorithme gradient à pas fixe
Bonjour, dans le cadre d'un projet j'ai a minimiser les fonctions suivantes que j'ai stocké dans dans fichier .m
Code:
1 2 3 4 5 6 7 8
|
f1.m
function val = f1( x )
%Fonction f1 fonciton f1 des la Parite2
% Detailed explanation goes here
val=2*(x(1)+x(2)-2)^2 +(x(1)-x(2))^2;
end |
Code:
1 2 3 4 5 6 7 8
|
f2.m
function val = f2( x,y )
%Funciotn f2 Fonction f2 de la P2
% Detailed explanation goes here
val=100*(y-x^2)^2 + (1-x)^2;
end |
Code:
1 2 3 4 5 6 7 8
|
f3.m
function val = f3( x,y )
%Function f3 Summary of this function goes here
% Detailed explanation goes here
val=0.5*x^2+x*cos(y);
end |
Donc pour minimiser ses fonction, j'utilise la méthode du gradient à pas fixe que j'ai coder:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
function [Xmin,Xi] = AlgoGradPasFixe(gradf,X0,h,eps,N)
%Algorithme pas fixe du gradient
% f est la fonciton de deux variables dont on cherche le minimum
%X0 est le point de départ vecteur colonne de deux dimensions
%h le pas petit ms h>0
%eps est le critère d'arrêt
%Xi sont les X intermédiaires qu'on traverse
%gradf est le gradient de f coder dans un fichier gradf.m
%pour la norme on uttlise la norme euclidienne donner par norm(X,2)
%N est l nombre maximum d'itérations
k=1;
Xi(:,k)=X0;
normXi=norm(X0,2);
while normXi>eps && k <= N
dk=-gradf(Xi(:,k));
Xi(:,k+1)=Xi(:,k) + h.*dk;
k=k+1;
normXi=norm(gradf(Xi(:,k)),2);
end
if (k<N)
b=size(Xi);
Xmin=Xi(:,b(2));
else
error('Pas de minimum ou augmenter le nombre diteration');
end |
Mon problème , c'est que l'algorithme fonctionne parfaitement avec les fonction f1 et f3 mais pas avec la fonction f2, quelqu'un saurait-il qu'est ce qui ne va pas?