BFGS 算法是拟牛顿算法的一种。我们知道不管是梯度下降、共轭梯度、还是牛顿法,我们都要解决两个问题,一个是下降方向,一个是搜索步长。搜索步长我们一般采取的方法是用满足wolf 条件的线搜索。
本节我们主要介绍BFGS 算法。对于这个算法。我们首先需要知道的是它是一个秩为2的算法。以及它为什么可以用来计算的原因。
重点在于定理证明的后面。
我在网上找到一段代码,但是没有看懂标红线的部分。我自己改了一个版本。得到的结果与作者发布的DFP 的最优解是一致的。所以我默认为它是对的。如果大家发现什么问题,请反馈给我。
%拟牛顿法中BFGS算法求解f = x1*x1+2*x2*x2-2*x1*x2-4*x1的最小值,起始点为x0=[1 1] H0为二阶单位阵
%算法根据最优化方法(天津大学出版社)122页编写
%v1.0 author: liuxi BIT
%format long
syms x1 x2 alpha;
f = x1*x1+2*x2*x2-2*x1*x2-4*x1;%要最小化的函数
df=jacobian(f,[x1 x2]);%函数f的偏导
epsilon=1e-6;%0.000001
k=1;
x0=[1 1];%起始点
x