共轭方向法
共轭方向法的收敛速度介于最速下降法和牛顿法之间。
- 对于n维二次型问题,能够在n步之内得到结果;
- 作为共轭方向法的典型代表,共轭梯度法不需要计算黑塞矩阵;
- 两次搜索方向之间是共轭的。
对于所有的 i ≠ j i\neq j i̸=j,有 d ( i ) T Q d ( j ) = 0 d^{(i)T}Qd^{(j)}=0 d(i)TQd(j)=0,则称它们是关于Q共轭的。
如果方向 d ( 0 ) , d ( 1 ) , . . . , d ( k ) ∈ R n , k ⩽ n − 1 d^{(0)},d^{(1)},...,d^{(k)}\in R^n,k\leqslant n-1 d(0),d(1),...,d(k)∈Rn,k⩽n−1非零,且是关于 Q Q Q共轭的,那么它们是线性无关的。
顺序主子式均为正数,Q矩阵为正定矩阵
基本的共轭方向算法
针对
n
n
n维二次型函数的最小化问题:
f
(
x
)
=
1
2
x
T
Q
x
−
x
T
b
f(x)=\frac{1}{2}x^TQx-x^Tb
f(x)=21xTQx−xTb
其中,
Q
=
Q
T
>
0
,
x
∈
R
n
Q=Q^T>0,x\in R^n
Q=QT>0,x∈Rn。由于
Q
>
0
Q>0
Q>0,因此函数
f
f
f有一个全局极小点,可通过求解
Q
x
=
b
Qx=b
Qx=b得到。
迭代公式:
g
(
k
)
=
∇
f
(
x
(
k
)
)
=
Q
x
(
k
)
−
b
α
k
=
−
g
(
k
)
d
(
k
)
d
(
k
)
T
Q
d
(
k
)
x
(
k
+
1
)
=
x
(
k
)
+
α
k
d
(
k
)
g^{(k)}=\nabla f(x^{(k)})=Qx^{(k)}-b \\\alpha_k=-\frac{g^{(k)}d^{(k)}}{d^{(k)T}Qd^{(k)}} \\x^{(k+1)}=x^{(k)}+\alpha_kd^{(k)}
g(k)=∇f(x(k))=Qx(k)−bαk=−d(k)TQd(k)g(k)d(k)x(k+1)=x(k)+αkd(k)
算法过程
- 根据给定初始点 x ( 0 ) x^{(0)} x(0)以及一组关于 Q Q Q共轭的一组方向 d ( 0 ) , d ( 1 ) . . . d^{(0)},d^{(1)}... d(0),d(1)...,计算 g ( 0 ) , α 0 g^{(0)},\alpha_0 g(0),α0;
- 计算 x ( 1 ) x^{(1)} x(1);
- 重复1,2直到 x ( n ) x^{(n)} x(n)等于函数的维数 n n n。
共轭梯度法
共轭梯度法不需要预先给定 Q Q Q共轭方向,而是随着迭代的进行不断产生 Q Q Q共轭方向————利用上一个搜索方向和目标函数在当前迭代点的梯度向量之间的线性组合构造一个新方向,使其与前面已经产生的搜索方向组成 Q Q Q共轭方向。
针对
n
n
n维二次型函数的最小化问题:
f
(
x
)
=
1
2
x
T
Q
x
−
x
T
b
f(x)=\frac{1}{2}x^TQx-x^Tb
f(x)=21xTQx−xTb
其中,
Q
=
Q
T
>
0
,
x
∈
R
n
Q=Q^T>0,x\in R^n
Q=QT>0,x∈Rn。初始点为
x
(
0
)
x^{(0)}
x(0),搜索方向采用最速下降法的方向,即函数
f
f
f在
x
(
0
)
x^{(0)}
x(0)处梯度的负方向,即:
d
(
0
)
=
−
g
(
0
)
d^{(0)}=-g^{(0)}
d(0)=−g(0)
产生下一个迭代点:
x
(
1
)
=
x
(
0
)
+
α
0
d
(
0
)
x^{(1)}=x^{(0)}+\alpha_0d^{(0)}
x(1)=x(0)+α0d(0)
其中,步长为:
α
0
=
a
r
g
min
α
⩾
0
f
(
x
(
0
)
+
α
d
(
0
)
)
=
−
g
(
0
)
d
(
0
)
d
(
0
)
T
Q
d
(
0
)
\alpha_0=arg\min\limits_{\alpha\geqslant0}f(x^{(0)}+\alpha d^{(0)})=-\frac{g^{(0)}d^{(0)}}{d^{(0)T}Qd^{(0)}}
α0=argα⩾0minf(x(0)+αd(0))=−d(0)TQd(0)g(0)d(0)
将
d
(
1
)
d^{(1)}
d(1)写成
g
(
1
)
g^{(1)}
g(1)和
d
(
0
)
d^{(0)}
d(0)之间的线性组合:
d
(
k
+
1
)
=
−
g
(
k
+
1
)
+
β
k
d
(
k
)
d^{(k+1)}=-g^{(k+1)}+\beta_kd^{(k)}
d(k+1)=−g(k+1)+βkd(k)
其中,
β
k
=
g
(
k
+
1
)
T
Q
d
(
k
)
d
(
k
)
T
Q
d
(
k
)
\beta_k=\frac{g^{(k+1)T}Qd^{(k)}}{d^{(k)T}Qd^{(k)}}
βk=d(k)TQd(k)g(k+1)TQd(k)
算法过程
- 令 k = 0 k=0 k=0;选择初始值 x ( 0 ) x^{(0)} x(0);
- 计算 g ( 0 ) = ∇ f ( x ( 0 ) ) g^{(0)}=\nabla f(x^{(0)}) g(0)=∇f(x(0)),如果 g ( 0 ) = 0 g^{(0)}=0 g(0)=0,停止迭代,否则,令 d ( 0 ) = − g ( 0 ) d^{(0)}=-g^{(0)} d(0)=−g(0);
- 计算 α 0 , x ( 1 ) \alpha_0,x^{(1)} α0,x(1);
- 计算 g ( 1 ) = ∇ f ( x ( 1 ) ) g^{(1)}=\nabla f(x^{(1)}) g(1)=∇f(x(1)),如果 g ( 1 ) = 0 g^{(1)}=0 g(1)=0,停止迭代;
- 计算 β 0 \beta_0 β0;
- 计算 d ( 1 ) d^{(1)} d(1);
- 回到3。
非二次型的共轭梯度法
最优化导论== P 128 P_{128} P128==