Bonjour à tous,

J'essaye en fait de trouver numériquement le minimum de la fonction ave la méthode de Nelder-Mead.
Je me base sur l'article de wikipedia http://en.wikipedia.org/wiki/Nelder%E2%80%93Mead_method et adapte pour le cas à 2 variables.
J'ai nommé mes points:
i)B (best) pour le sommet du triangle qui a la plus petite valeur quand évalué en f
ii)G (good)
iii)W (worst)

Dans matlab (je connais mal, du coup je dois avoir écrit beaucoup de choses bizarres).

J'ai défini dans un fichier f.m ma fonction
-------------------
function [z]=f(x,y)
z=x.^2-4.*x+y.^2-y-x.^y;
end
------------------
Puis dans le fichier Nelder.m j'ai implémenter mon programme, mais il ne trouve pas le minimum. En effet, un calcul explicite montre qu'il se trouverait en (9/3,2) et f(9/3,2)=-7 mais quand je cherche avec mon programme il trouve -l'infini comme minimum et je n'arrive pas à mettre le doigts sur mon erreur. Quelqu'un pourrait t'il m'aider?

fichier Nelder.m
---------------------
clear all
clc
B=[1.2,0];
G=[0,0.8];
W=[0,0];
counter=0;
while counter<20
V=[B;G;W];
Y=[f(B(1),B(2)),f(G(1),G(2)),f(W( 1),W(2))];
[O I]=sort(Y);
B=V(I(1),1:2);
G=V(I(2),1:2);
W=V(I(3),1:2);

M=0.5*(G+B);
R=M+(M-W);
if f(R(1),R(2))<f(G(1),G(2))
if f(R(1),R(2))<f(B(1),B(2))
E=M+2*(M-W);
if f(E(1),E(2))<f(B(1),B(2))
W=E;
else
W=R;
end
else
W=R;
end
else
C=0.5*(M+W);
if f(C(1),C(2))<f(W(1),W(2))
W=C;
else
C1=0.5*(W+M);
C2=0.5*(M+R);
if f(C1(1),C1(2))<f(C2(1),C2(2))
W=C1;
else
W=C2;
end
end
end
counter=counter+1
end
-------------------------------