一、参考
《数值最优化算法与理论》
二、前言
Newton法和拟Newton法算法具有较快的收敛速度。但算法需要储存矩阵 B k B_k Bk。因而,在求解大规模问题时遇到困难。
最速下降法具有存储量少的特点。但该算法收敛速度慢。
下面求解无约束问题的共轭梯度法。该算法具有存储量少且收敛速度较快的特点。
三、二次函数极小化问题的共轭方向法
二次函数极小化问题:
m
i
n
f
(
x
)
=
1
2
x
T
Q
x
+
q
T
x
min f(x) = \frac 1 2 x^T Q x + q^T x
minf(x)=21xTQx+qTx
其中,
Q
∈
R
n
×
n
Q \in R^{n \times n}
Q∈Rn×n对称正定,
q
∈
R
n
。
x
∈
R
n
。
f
:
R
n
→
R
q \in R^n。\quad x \in R^n。\quad f:R^n \to R
q∈Rn。x∈Rn。f:Rn→R。
1、向量组共轭
设
A
∈
R
n
×
n
A \in R^{n \times n}
A∈Rn×n对称正定,
d
(
1
)
,
d
(
2
)
,
⋅
⋅
⋅
,
d
(
m
)
d^{(1)},d^{(2)},···,d^{(m)}
d(1),d(2),⋅⋅⋅,d(m)是
R
n
R^n
Rn中的非零向量。若对
i
,
j
=
1
,
2
,
⋅
⋅
⋅
,
m
i,j = 1,2,···,m
i,j=1,2,⋅⋅⋅,m,有:
d
(
i
)
T
A
d
(
j
)
=
0
,
(
i
≠
j
)
d^{(i)T} A d^{(j)} = 0, \quad (i \neq j)
d(i)TAd(j)=0,(i=j)
则称向量组
d
(
1
)
,
d
(
2
)
,
⋅
⋅
⋅
,
d
(
m
)
d^{(1)},d^{(2)},···,d^{(m)}
d(1),d(2),⋅⋅⋅,d(m)关于矩阵
A
A
A相互共轭
。
由共轭向量组的定义易知,若 A = I A=I A=I是单位向量,则向量组的共轭性等价于正交性。
向量正交: α T β = 0 \alpha ^T \beta = 0 αTβ=0
一般地,令 p ( i ) = A 1 / 2 d ( i ) p^{(i)} = A^{1/2} d^{(i)} p(i)=A1/2d(i)。
实对称正定矩阵存在平方根的证明:证明
则向量组 d ( 1 ) , d ( 2 ) , ⋅ ⋅ ⋅ , d ( m ) d^{(1)},d^{(2)},···,d^{(m)} d(1),d(2),⋅⋅⋅,d(m)关于矩阵 A A A相互共轭等价于向量组 p ( i ) , ( i = 1 , 2 , ⋅ ⋅ ⋅ , m ) p^{(i)}, (i=1,2,···,m) p(i),(i=1,2,⋅⋅⋅,m)相互正交。因此共轭是正交概念的推广。
定理
:设
A
∈
R
n
×
n
A \in R^{n \times n}
A∈Rn×n对称正定。非零向量组
d
(
1
)
,
d
(
2
)
,
⋅
⋅
⋅
,
d
(
m
)
∈
R
n
×
n
d^{(1)},d^{(2)},···,d^{(m)} \in R^{n \times n}
d(1),d(2),⋅⋅⋅,d(m)∈Rn×n关于矩阵
A
A
A相互共轭。则
d
(
1
)
,
d
(
2
)
,
⋅
⋅
⋅
,
d
(
m
)
d^{(1)},d^{(2)},···,d^{(m)}
d(1),d(2),⋅⋅⋅,d(m)线性无关。(即共轭向量组线性无关。)
2. 二次函数极小值问题的共轭方向法
求解思想:从某个初始点
x
(
0
)
x^{(0)}
x(0)出发,依次沿关于
Q
Q
Q相互共轭的
n
n
n个方向
d
(
i
)
,
(
i
=
0
,
1
,
⋅
⋅
⋅
,
n
−
1
)
d^{(i)}, (i=0,1,···,n-1)
d(i),(i=0,1,⋅⋅⋅,n−1)进行精确线性搜索,即令:
x
(
k
+
1
)
=
x
(
k
)
+
α
k
d
(
k
)
,
(
k
=
0
,
1
,
⋅
⋅
⋅
,
n
−
1
)
x^{(k+1)} = x^{(k)} + \alpha _k d^{(k)}, \quad (k=0,1,···,n-1)
x(k+1)=x(k)+αkd(k),(k=0,1,⋅⋅⋅,n−1)
其中,
α
k
\alpha _k
αk是下面问题的解:
f
(
x
(
k
)
+
α
k
d
(
k
)
)
=
m
i
n
α
∈
R
f
(
x
(
k
)
+
α
d
(
k
)
)
f(x^{(k)} + \alpha _k d^{(k)}) = \underset{\alpha \in R} {min} f(x^{(k)} + \alpha d^{(k)})
f(x(k)+αkd(k))=α∈Rminf(x(k)+αd(k))
注:由于 d ( k ) d^{(k)} d(k)可能不是函数 f f f在 x ( k ) x^{(k)} x(k)处的下降方向,因此,上面的精确线性搜索在整个实数轴上进行。
共轭方向可用类似于Gram-Schmidt(施密特)正交化过程产生:
- 给定线性无关向量组 p ( 0 ) , p ( 1 ) , ⋅ ⋅ ⋅ , p ( n − 1 ) ∈ R n p^{(0)},p^{(1)},···,p^{(n-1)} \in R^n p(0),p(1),⋅⋅⋅,p(n−1)∈Rn。令 d ( 0 ) = p ( 0 ) , k = 0 d^{(0)} = p^{(0)}, k=0 d(0)=p(0),k=0。
- 计算:
d ( k + 1 ) = p ( k + 1 ) − ∑ j = 0 k d ( j ) T Q p ( k + 1 ) d ( j ) T Q d ( j ) d ( j ) d^{(k+1)} = p^{(k+1)} - \sum^{k}_{j=0} \frac {d^{(j)T} Q p^{(k+1)}} {d^{(j)T} Q d^{(j)}} d^{(j)} d(k+1)=p(k+1)−j=0∑kd(j)TQd(j)d(j)TQp(k+1)d(j) - 若 k = n − 2 k=n-2 k=n−2,则停止。否则,令 k = k + 1 k=k+1 k=k+1。转1。
四、非线性共轭梯度法
求解无约束问题的非线性共轭梯度法是在求解二次函数极小值问题的共轭梯度法的基础上发展起来的。非线性共轭梯度法利用负梯度
−
∇
f
(
x
(
k
)
)
-\nabla f(x^{(k)})
−∇f(x(k))与算法的前一个方向的线性组合作为第
k
k
k次迭代的搜索方向。且取初始方向为
−
∇
f
(
x
(
0
)
)
-\nabla f(x^{(0)})
−∇f(x(0)),即:
d
(
k
)
=
{
−
∇
f
(
x
(
0
)
)
,
若
k
=
0
−
∇
f
(
x
(
k
)
)
+
β
k
d
(
k
−
1
)
,
若
k
≥
1
d^{(k)} = \left\{ \begin{aligned} &- \nabla f(x^{(0)}), \quad &若k=0 \\ &- \nabla f(x^{(k)}) + \beta _k d^{(k-1)}, \quad &若k \geq 1 \\ \end{aligned} \right.
d(k)={−∇f(x(0)),−∇f(x(k))+βkd(k−1),若k=0若k≥1
其中,参数
β
k
\beta _k
βk的确定使得算法用于求解二次函数极小值问题时,
d
(
k
)
d^{(k)}
d(k)与
d
(
k
−
1
)
d^{(k-1)}
d(k−1)关于
Q
Q
Q相互共轭。下面给出
β
k
\beta _k
βk的计算公式:
β
k
=
∇
f
(
x
(
k
)
)
T
[
∇
f
(
x
(
k
)
)
−
∇
f
(
x
(
k
−
1
)
)
]
d
(
k
−
1
)
T
[
∇
f
(
x
(
k
)
)
−
∇
f
(
x
(
k
−
1
)
)
]
,
(
k
=
1
,
2
⋅
⋅
⋅
)
\beta_k = \frac {\nabla f(x^{(k)})^T [\nabla f(x^{(k)}) - \nabla f(x^{(k-1)})]} {d^{(k-1)T} [\nabla f(x^{(k)}) - \nabla f(x^{(k-1)})]} , \quad (k=1,2···)
βk=d(k−1)T[∇f(x(k))−∇f(x(k−1))]∇f(x(k))T[∇f(x(k))−∇f(x(k−1))],(k=1,2⋅⋅⋅)
非线性共轭梯度法(HS算法)的计算步骤:
- 取初始点 x ( 0 ) ∈ R n , d ( 0 ) = − ∇ f ( x ( 0 ) ) x^{(0)} \in R^n, d^{(0)} = -\nabla f(x^{(0)}) x(0)∈Rn,d(0)=−∇f(x(0)),精度 ϵ > 0 \epsilon >0 ϵ>0。令 k = 0 k=0 k=0。
- 若 ∣ ∣ ∇ f ( x ( k ) ) ∣ ∣ ≤ ϵ ||\nabla f(x^{(k)})|| \leq \epsilon ∣∣∇f(x(k))∣∣≤ϵ,则算法终止。得问题的解 x ( k ) x^{(k)} x(k)。否则,转3。
- 由线性搜索确定步长 α k \alpha _k αk。
- 令 x ( k + 1 ) = x ( k ) + α k d ( k ) x^{(k+1)} = x^{(k)} + \alpha _k d^{(k)} x(k+1)=x(k)+αkd(k)。
- 由上面确定 d ( k + 1 ) d^{(k+1)} d(k+1),令 k = k + 1 k=k+1 k=k+1。转2。