DFP算法
在拟牛顿法中取修正矩阵
D
k
\mathbf{D}_k
Dk为秩2矩阵
D
k
=
α
u
k
u
k
T
+
β
v
k
v
k
T
\mathbf{D}_k=\alpha\mathbf{u}_k\mathbf{u}_k^T+\beta\mathbf{v}_k\mathbf{v}_k^T
Dk=αukukT+βvkvkT
于是
(
H
k
+
α
u
k
u
k
T
+
β
v
k
v
k
T
)
y
k
=
s
k
\left(\mathbf{H}_k+\alpha\mathbf{u}_k\mathbf{u}_k^T+\beta\mathbf{v}_k\mathbf{v}_k^T\right)\mathbf{y}_k=\mathbf{s}_k
(Hk+αukukT+βvkvkT)yk=sk
剩下懒得写了
推到和BFGS算法基本一样
把
B
\mathbf{B}
B换成
H
\mathbf{H}
H,然后
s
\mathbf{s}
s和
y
\mathbf{y}
y互换,就可以得到结果
H
k
+
1
=
H
k
−
H
k
y
k
y
k
T
H
k
y
k
T
H
k
y
k
+
s
k
s
k
T
s
k
T
y
k
\mathbf{H}_{k+1}=\mathbf{H}_k-\frac{\mathbf{H}_k\mathbf{y}_k\mathbf{y}_k^T\mathbf{H}_k}{\mathbf{y}_k^T\mathbf{H}_k\mathbf{y}_k}+\frac{\mathbf{s}_k\mathbf{s}_k^T}{\mathbf{s}_k^T\mathbf{y}_k}
Hk+1=Hk−ykTHkykHkykykTHk+skTykskskT
B
k
+
1
=
B
k
−
y
k
s
k
T
B
k
y
k
T
s
k
−
B
k
s
k
y
k
T
y
k
T
s
k
+
y
k
s
k
T
B
k
s
k
y
k
T
(
y
k
T
s
k
)
2
+
y
k
y
k
T
y
k
T
s
k
=
(
I
−
s
k
y
k
T
y
k
T
s
k
)
T
B
k
(
I
−
s
k
y
k
T
y
k
T
s
k
)
+
y
k
y
k
T
y
k
T
s
k
\begin{aligned} \mathbf{B}_{k+1}&=\mathbf{B}_k-\frac{\mathbf{y}_k\mathbf{s}_k^T\mathbf{B}_k}{\mathbf{y}_k^T\mathbf{s}_k}-\frac{\mathbf{B}_k\mathbf{s}_k\mathbf{y}_k^T}{\mathbf{y}_k^T\mathbf{s}_k}+\frac{\mathbf{y}_k\mathbf{s}_k^T\mathbf{B}_k\mathbf{s}_k\mathbf{y}_k^T}{\left(\mathbf{y}_k^T\mathbf{s}_k\right)^2}+\frac{\mathbf{y}_k\mathbf{y}_k^T}{\mathbf{y}_k^T\mathbf{s}_k}\\ &=\left(\mathbf{I}-\frac{\mathbf{s}_k\mathbf{y}_k^T}{\mathbf{y}_k^T\mathbf{s}_k}\right)^T\mathbf{B}_{k}\left(\mathbf{I}-\frac{\mathbf{s}_k\mathbf{y}_k^T}{\mathbf{y}_k^T\mathbf{s}_k}\right)+\frac{\mathbf{y}_k\mathbf{y}_k^T}{\mathbf{y}_k^T\mathbf{s}_k} \end{aligned}
Bk+1=Bk−ykTskykskTBk−ykTskBkskykT+(ykTsk)2ykskTBkskykT+ykTskykykT=(I−ykTskskykT)TBk(I−ykTskskykT)+ykTskykykT
性质
性质1
设
H
k
\mathbf{H}_k
Hk对称正定,
H
k
+
1
\mathbf{H}_{k+1}
Hk+1由DFP校正公式确定,则
H
k
+
1
\mathbf{H}_{k+1}
Hk+1对称正定的充要条件是
s
k
T
y
k
>
0
\mathbf{s}_k^T \mathbf{y}_k>0
skTyk>0
证明:
和BFGS那篇一样
性质2
DFP中采用精确线搜索或者Wolfe搜索准则,则有 s k T y k > 0 \mathbf{s}_k^T\mathbf{y}_k>0 skTyk>0
尽管Armijo准则(回溯法)一般不能保证
s
k
T
y
k
>
0
\mathbf{s}_k^T\mathbf{y}_k>0
skTyk>0
但是因为简单,所以可以采用
H
k
+
1
=
{
H
k
,
s
k
T
y
k
≤
0
H
k
+
1
=
H
k
−
H
k
y
k
y
k
T
H
k
y
k
T
B
k
y
k
+
s
k
s
k
T
s
k
T
y
k
s
k
T
y
k
>
0
\mathbf{H}_{k+1}=\begin{cases} \mathbf{H}_k,&\mathbf{s}_k^T\mathbf{y}_k\le 0\\ \mathbf{H}_{k+1}=\mathbf{H}_k-\frac{\mathbf{H}_k\mathbf{y}_k\mathbf{y}_k^T\mathbf{H}_k}{\mathbf{y}_k^T\mathbf{B}_k\mathbf{y}_k}+\frac{\mathbf{s}_k\mathbf{s}_k^T}{\mathbf{s}_k^T\mathbf{y}_k}&\mathbf{s}_k^T\mathbf{y}_k>0 \end{cases}
Hk+1={Hk,Hk+1=Hk−ykTBkykHkykykTHk+skTykskskTskTyk≤0skTyk>0
只要
B
0
\mathbf{B}_0
B0时正定的,
B
k
+
1
\mathbf{B}_{k+1}
Bk+1也是正定的
步骤
初始化:选择起点
x
0
\mathbf{x}_0
x0,
选择
H
0
\mathbf{H}_0
H0(一般取
∇
−
2
f
(
x
0
)
\nabla^{-2} f\left(\mathbf{x}_0\right)
∇−2f(x0)或者
I
\mathbf{I}
I )
步骤
1.若
∥
g
k
∥
≤
ϵ
\|\mathbf{g}_k\|\le \epsilon
∥gk∥≤ϵ,停止,输出
x
k
\mathbf{x}_k
xk
2.计算
d
k
=
−
H
k
g
k
\mathbf{d}_k=-\mathbf{H}_k\mathbf{g}_k
dk=−Hkgk
3.求步长
α
k
\alpha_k
αk
4.
x
k
+
1
=
x
k
+
α
k
d
k
\mathbf{x}_{k+1}=\mathbf{x}_k+\alpha_k\mathbf{d}_k
xk+1=xk+αkdk,矫正
H
k
\mathbf{H}_{k}
Hk得到
H
k
+
1
\mathbf{H}_{k+1}
Hk+1
5.k=k+1,转1