共轭梯度法不需要预先给定
Q
共轭方向,而是随着迭代的进行不断产生
Q
共轭方向。在每次的迭代中,利用上一个搜索方向和目标函数在当前迭代点的梯度向量 之间的线性组合构造一个新的方向,使其与前边已经产生的搜索方向组成
Q
共轭方向。对于一个
n
维二次型函数,沿着
Q
共轭方向进行搜索,经过
n
次迭代,即可得到极小点。
考虑二次型函数:
f(x)=12xTQx−xTb,x∈Rn
其中,
Q=QT>0
。初始点
x(0)
,搜索方向采用最速下降法的方向,即函数
f
在
x(0)
处梯度的负方向,即:
d(0)=−g(0)
产生下一个迭代点:
x(1)=x(0)+α0d(0)
其中,步长为:
α0=argminα≥0f(x(0)+α0d(0))=−g(0)Td(0)d(0)TQd(0)
再展开下一次迭代,搜索方向
d(0)
和
d(1)
应该是关于
Q
共轭的。推广开来,在
k+1
词迭代中:
d(k+1)=−g(k+1)+βkd(k),k=0,1,2…
按照如下方式选择
βk
, 可以使得
d(k+1)
和
d(0),d(1),…,d(k)
组成
Q
共轭方向:
βk=g(k+1)TQd(k)d(k)TQd(k)
共轭梯度法的算法步骤可以归纳如下:
- 令
k=0
,选择初始值:
x(0)
- 计算
g(0)=∇f(x(0))
,如果
g(0)=0
,停止。否则:
d(0)=−g(0)
.
- 计算
αk=−g(k)Td(k)d(k)TQd(k)
- 计算
x(k+1)=x(k)+αkd(k)
- 计算
g(k+1)=∇f(x(k+1))
,如果
g(k+1)=0
,停止。
- 计算
βk=g(k+1)TQd(k)d(k)TQd(k)
- 计算
d(k+1)=−g(k+1)+βkd(k)
- 令
k=k+1
,回到第
3
步。