function sevnn x=[1,0]'; [x,val]=dfp('fun','gfun',x) end function f=fun(x) f=100*(x(1)^2-x(2))^2+(x(1)-1)^2; end function g=gfun(x) g=[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1), -200*(x(1)^2-x(2))]'; end function He=Hess(x) He=[1200*x(1)^2-400*x(2)+2, -400*x
% FR共轭梯度法 function sixge x0=[1,0]'; [x,val,k]=frcg('fun','gfun',x0) end function f=fun(x) f=100*(x(1)^2-x(2))^2+(x(1)-1)^2; end function g=gfun(x) g=[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1), -200*(x(1)^2-x(2))]'; end function [x,val,k]=frcg(fun,gfun,x0) ma
转载请注明出处:http://www.codelast.com/ line search(一维搜索,或线搜索)是最优化(Optimization)算法中的一个基础步骤/算法.它可以分为精确的一维搜索以及不精确的一维搜索两大类.在本文中,我想用“人话”解释一下不精确的一维搜索的两大准则:Armijo-Goldstein准则 & Wolfe-Powell准则.之所以这样说,是因为我读到的所有最优化的书或资料,从来没有一个可以用初学者都能理解的方式来解释这两个准则,它们要么是长篇大论.把一堆数学公式丢
下面是 armijo线搜索+最速下降法的小程序,matlab用的很不熟,费了不少劲. 函数: function g=fun_obj(x) syms a b f = 1/2*a^2+b^2-a*b-2*a; a=x(1);b=x(2); g=eval(f); 求梯度: function g=fun_grad(x) syms a b f = 1/2*a^2+b^2-a*b-2*a; gradient = jacobian(f,[a,b]); a = x(1);b = x(2); g = eval(g