function grad(x) clc g = calc_grad(x); h=calc_hess(x); d= -inv(h)*g; k=0; f=calc_funcao(x); while norm(d)>1e-4 sprintf('Iteracao %d, f=%g, norma grad %g x=[%f %f]',k,f,norm(g),x(1),x(2)) k=k+1; alfa=calc_alfa(x,d); x=x+alfa*d; g=calc_grad(x); h=calc_hess(x); d=-inv(h)*g; f=calc_funcao(x); pause end sprintf('Iteracao %d, f=%g, norma grad %g x=[%f %f]',k,f,norm(g),x(1),x(2)) function h=calc_hess(x) h = [10 4;4 2]; function g=calc_grad(x) g=[10*x(1)+4*x(2)-14;2*x(2)+4*x(1)-6]; %5x1^2+x2^2+4x1*x2-14x1-6x2+20 %10x1+4x2-14 %2x2+4x1-6 function alfa=calc_alfa(x,d) alfa=rand(1,1); xn=x+alfa*d; g=calc_grad(xn); hl=g'*d; alfa_l=0; while hl<0 alfa_l=alfa; alfa=2*alfa; xn=x+alfa*d; g=calc_grad(xn); hl=g'*d; end alfa_u=alfa; alfa_m=(alfa_l+alfa_u)/2; it =0; itmax = ceil(log2((alfa_u-alfa_l)/1e-5)) while it0 alfa_u=alfa_m; else alfa_l=alfa_m; end alfa_m=(alfa_l+alfa_u)/2; end alfa=alfa_m; function f=calc_funcao(x) f=5*x(1)^2+x(2)^2+4*x(1)*x(2)-14*x(1)-6*x(2)+20;