Bonjour, je dois faire un programme scilab de la méthode BFGS. Je ne comprend pas pourquoi mon programme ne marche pas. Si quelqu'un peut m'aider. Merci d'avance.

function[y]=f(x)
y=100*((x(2)-x(1)^2)^2)+(1-x(1))^2;
endfunction

function[g]=gradf(x)
g=[100*(-4*x(1)*x(2)+4*x(1)^3)-2+2*x(1); 200*(x(2)-x(1)^2)]
endfunction

function[a]=rech(f,gradf,ao,b1,b2,x,d,l)
i=0;
al=0
ar=%inf;
a=ao;
while (f(x+a*d)>(f(x)+a*b1*gradf(x)' *d)| (((gradf(x+a*d))'*d)<(b2*(grad f(x))'*d )) )

if (f(x+a*d))>(f(x)+a*b1*gradf(x) '*d) then
ar=a;
a=(al+ar)/2;
elseif (((gradf(x+a*d))'*d<b2*(gradf( x))'*d) & (ar~=%inf)) then
al=a;
a=(al+ar)/2;
elseif (((gradf(x+a*d))'*d<b2*(gradf( x))'*d) &(ar==%inf)) then
al=a;
a=l*a;

end
i=i+1;

end

endfunction

function[xmin]=BFGS(f,gradf,Eps,invH,xo)
xmin=xo;
a=1;
while norm(gradf(xmin),2)>Eps

d=-invH*gradf(xmin);
xant=xmin;
a=rech(f,gradf,a,0.3,0.7,[10;1],[-2;1],20);
xmin=xmin+a*d;
d1=xmin-xant;
y=gradf(xmin)-gradf(xant);
invH=(eye(2,2)-(d1*y'/(d1'*y)))*invH*(eye(2,2)-(d1*y'/(d1'*y)))+(d1*d1')/(d1'*y);

end

endfunction