function z=f(X)
    x=X(1);y=X(2);
    z=(x-1)^4+2*y^4
endfunction
function Z=gradf(X)
     x=X(1);y=X(2);
     Z=[8*(x-1)^3;8*y^4];    
endfunction

//
//   méthode de descente////
//
// parametres
//
alphainit=1
beta=0.001
tau=0.3
//
X0=[2;1];
Niter=evstr(x_dialog('nombre d''iterations','20'));
X=X0;
Xtot=X;
for i=1:Niter
  d=-gradf(X)  
  alpha=alphainit
  while f(X+alpha*d)>f(X)+beta*alpha*(d'*gradf(X))
  alpha=tau*alpha;
  end    
X=X+alpha*d;Xtot=[Xtot,X];      
end
disp('valeur obtenue:');disp(X)
//
///////////////// tracé//////////
Nt=100;
x=linspace(-1,2,Nt);
y=linspace(-1,2,Nt);
z=zeros(Nt,Nt);
for i=1:Nt
    for j=1:Nt
       z(i,j)=f([x(i),y(j)]) 
    end
end
//
xset('window',1)
clf()
contour(x,y,z,[0:0.1:1,2:10])
plot2d(Xtot(1,:),Xtot(2,:))









