[x,y]=meshgrid(linspace(-pi,pi,151),linspace(-pi,pi,150));
z=3*(1-x).^2.*exp(-x.^2-(y+1).^2)-...
    10*(x/5-x.^3-y.^5).*exp(-x.^2-y.^2)-...
    exp(-(x+1).^2-y.^2)/3;
contour(x,y,z,20)
axis('equal')
hold on
title('Illiustration av gradientmetoden','FontSize',13 ,'Interpreter','latex')
%[x,y]=meshgrid(linspace(-pi,pi,21),linspace(-pi,pi,20));
f=inline('3*(1-x).^2.*exp(-x.^2-(y+1).^2)-10*(x/5-x.^3-y.^5).*exp(-x.^2-y.^2)-exp(-(x+1).^2-y.^2)/3');
%z=f(x,y);
%[px,py]=gradient(z,0.1,0.1);
%quiver(x,y,px,py)
q=[0.3,0.4];
p=[0,0];
pause
while abs(f(p(1),p(2))-f(q(1),q(2)))>0.001
    p=q;
    x=p(1);y=p(2);
    %plot(x,y,'ro')
    grad=[-6*((1-x)+x.*(1-x).^2).*exp(-x.^2-(y+1).^2)-...
    10*(1/5-3*x.^2-2*x.*(x/5-x.^3-y.^5)).*exp(-x.^2-y.^2)+...
    2*(x+1).*exp(-(x+1).^2-y.^2)/3,...
    -2*(y+1).*3*(1-x).^2.*exp(-x.^2-(y+1).^2)-...
    10*(-5*y.^4-2*y.*(x/5-x.^3-y.^5)).*exp(-x.^2-y.^2)+...
    2*y.*exp(-(x+1).^2-y.^2)/3];
    q=p+0.03*grad;
    quiver(p(1),p(2),q(1)-p(1),q(2)-p(2),0)
    pause(0.2)
end
plot(p(1),p(2),'r*')
q=[-1.8,-0.4];
p=[0,0];
while abs(f(p(1),p(2))-f(q(1),q(2)))>0.001
    p=q;
    x=p(1);y=p(2);
    %plot(x,y,'ro')
    grad=[-6*((1-x)+x.*(1-x).^2).*exp(-x.^2-(y+1).^2)-...
    10*(1/5-3*x.^2-2*x.*(x/5-x.^3-y.^5)).*exp(-x.^2-y.^2)+...
    2*(x+1).*exp(-(x+1).^2-y.^2)/3,...
    -2*(y+1).*3*(1-x).^2.*exp(-x.^2-(y+1).^2)-...
    10*(-5*y.^4-2*y.*(x/5-x.^3-y.^5)).*exp(-x.^2-y.^2)+...
    2*y.*exp(-(x+1).^2-y.^2)/3];
    q=p+0.08*grad;
    quiver(p(1),p(2),q(1)-p(1),q(2)-p(2),0)
    pause(0.2)
end
plot(p(1),p(2),'r*')
q=[1,-1.7];
p=[0,0];
while abs(f(p(1),p(2))-f(q(1),q(2)))>0.001
    p=q;
    x=p(1);y=p(2);
    %plot(x,y,'ro')
    grad=[-6*((1-x)+x.*(1-x).^2).*exp(-x.^2-(y+1).^2)-...
    10*(1/5-3*x.^2-2*x.*(x/5-x.^3-y.^5)).*exp(-x.^2-y.^2)+...
    2*(x+1).*exp(-(x+1).^2-y.^2)/3,...
    -2*(y+1).*3*(1-x).^2.*exp(-x.^2-(y+1).^2)-...
    10*(-5*y.^4-2*y.*(x/5-x.^3-y.^5)).*exp(-x.^2-y.^2)+...
    2*y.*exp(-(x+1).^2-y.^2)/3];
    q=p+0.08*grad;
    quiver(p(1),p(2),q(1)-p(1),q(2)-p(2),0)
    pause(0.2 )
end
plot(p(1),p(2),'r*')
hold off
