Bonjour, dans le cadre d'un projet j'ai a minimiser les fonctions suivantes que j'ai stocké dans dans fichier .m
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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?