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; endDonc 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 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
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?
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
Partager