目录
- 拟牛顿法
1.1拟牛顿法的导出与优点
1.2 算法步骤与特点 - 对称秩一校正公式
- DFP算法
3.1 DFP公式推导
3.2 要求解的问题
3.3 python实现
1.拟牛顿法
1.1拟牛顿法的导出与优点
在上一文中(牛顿法公式推导与python实现),谈到说牛顿法需要计算一个Hessian矩阵的逆,才能够迭代,但在实际工程中,计算如此大型的矩阵需要很大的计算资源,因此,有人提出能否不计算Hessian矩阵,在迭代过程中,仅仅利用相邻两个迭代点以及梯度信息,产生一个对称正定矩阵,使之逐步逼近目标函数Hessian矩阵的逆阵。
其实这就是你牛顿法的基本思想,这样做,既能保存Hessian矩阵的大部分信息(曲率),也能极大的减小计算量。
考虑无约束极小化问题。假设目标函数 f:Rn→R f : R n → R 是二次连续可微的,那么 ∇f ∇ f 在 xk+1 x k + 1 处的泰勒展开为:
∇f(x)=∇f(xk+1)+∇2f(xk+1)(x−xk+1)+o||x−xk+1|| ∇ f ( x ) = ∇ f ( x k + 1 ) + ∇ 2 f ( x k + 1 ) ( x − x k + 1 ) + o | | x − x k + 1 | |
,取
x:=xk x := x k
.当
xk与xk+1 x k 与 x k + 1
充分接近时,有:
∇2f(xk+1)(xk+1−xk)≈∇f(xk+1)−∇f(xk) ∇ 2 f ( x k + 1 ) ( x k + 1 − x k ) ≈ ∇ f ( x k + 1 ) − ∇ f ( x k )
∇2f(xk+1) ∇ 2 f ( x k + 1 )
就是
f(x) f ( x )
在
xk+1 x k + 1
处的Hessian矩阵,那么我们可以用它的近似矩阵
Bk+1 B k + 1
来代替它,得到如下等式:
Bk+1(xk+1−xk)=∇f(xk+1)−∇f(xk)(1) (1) B k + 1 ( x k + 1 − x k ) = ∇ f ( x k + 1 ) − ∇ f ( x k )
如该矩阵存在逆矩阵有:
Hk+1(∇f(xk+1)−∇f(xk))=xk+1−xk(2) (2) H k + 1 ( ∇ f ( x k + 1 ) − ∇ f ( x k ) ) = x k + 1 − x k
以上两个方程成为
拟牛顿方程(条件)。其中
Hk+1=∇2f(xk+1)−1 H k + 1 = ∇ 2 f ( x k + 1 ) − 1
,为Hessian的逆阵。
1.2 算法步骤与特点
拟牛顿法的算法步骤如下:
给出 x0∈Rn,H0∈Rnxn,0≤ϵ<1,k:=0 x 0 ∈ R n , H 0 ∈ R n x n , 0 ≤ ϵ < 1 , k := 0 ;
若