cota = input ('Cota de error objetivo: ');
xi = input ('Valor inicial de la x: ');
yi = input ('Valor inicial de la y: ');

x0=[xi yi];

i = 0; % contador de iteraciones
% Debo realizar un procedimiento iterativo mientras el error sea mayor que la cota
e=10000;
cota1=0.001;
syms x y m

fob=3*x+4*y-x^3-2*y^2;
Gf=jacobian(f,[x;y]);
 while(e>cota)&& (i <= 3)
    xnuevo=x0;
    fprintf('Punto inicial: %e %e \n', x0(1), x0(2));
    fprintf('En la iteración i: %e  \n', i);
    c1=subs(Gf(1),{x,y},{x0(1),x0(2)});
    c2=subs(Gf(2),{x,y},{x0(1),x0(2)});
    P=c1*x+c2*y;
    e1=10000;
 while(e1>cota1)
    GP=jacobian(P,[x;y]);
    GPr=subs(GP,{x,y},{x0(1),x0(2)});
    F=subs(P,{x,y},{x0(1)+m*GPr(1),x0(2)+m*GPr(2)});
    DF=diff(F);
    lambda=min(double(solve(diff(c1*(x0(1)+m*GPr(1))+c2*(x0(2)+m*GPr(2))),0)));
    F2=diff(DF);
    if double(subs(F2,{m},{lambda}))<0;
    x1=x0+lambda*GPr;
    e1= double(sqrt((x1(1)-x0(1))^2 +(x1(2)-x0(2))^2)) ;
    x0=x1;
    else
    fprintf('Se encontró la solución. Último valor calculado: %e %e \n', x0(1), x0(2));
    break
    end
 end
 e= double(sqrt((x0(1)-xnuevo(1))^2 +(x0(2)-xnuevo(2))^2)) ;
i=i+1;
 end
 fprintf('Se encontró la solución. La solución hallada es: %e %e \n', x0(1), x0(2));
   
fprintf('El número de iteraciones utilizado es: %e  \n', i);
fprintf('El test de parada es (cota 0.0001): %e  \n', e);
   
sol=mifuncion_objetivo(x0(1),x0(2));
fprintf('Y el valor de la función en dicho punto es: %e  \n', sol);
