近期刚学习了dogleg狗腿最优化算法,老师给出了一个大体的框架并给出了一个练习,让我们用程序去实现它,鉴于本人刚刚开始接触最优化,对MATLAB语言的使用也很生疏,在网上查阅了大量的资料,一个通宵把算法写出来,并在matlab中得到了验证。
老师给出的练习为
,。Dogleg狗腿算法是信赖域算法中的一个subproblem,其主要用来求d向量,也就是搜索方向。在写代码的时候,发现老师给出的框架当中,没有涉及到
的取值,在查阅了很多资料之后,知道
的取值与
和
和信赖域的取值有关,具体的关系会在程序中体现。此外,在代码程序中,最困扰的我是程序对函数的普适性,只要给出一个函数,代码会自动的进行,而不是需要人为地把函数各个变量的系数先算出来。代码如下:
主程序(demo_dogleg):
%programed by Lu Qi,UCAS
%my email:qqlu1992@gmail.com
global syms x y
pars.f_x_y=100*(y - x^2).^2 + (1 - x)^2;
pars.dfdx=diff(pars.f_x_y,x,1);
pars.dfdy=diff(pars.f_x_y,y,1);
pars.df2dxdy=diff(pars.dfdx,y