原理
设目标函数一阶连续可微
在
x
k
x^k
xk点处对
f
(
x
)
f(x)
f(x)进行泰勒展开,得到:
▽
f
(
x
k
)
:
f
在
点
x
k
处
的
一
阶
导
数
\bigtriangledown f(x^k):f在点x_k处的一阶导数
▽f(xk):f在点xk处的一阶导数
λ
:
为
步
长
\lambda:为步长
λ:为步长
f
(
x
k
)
−
f
(
x
k
+
t
p
k
)
=
−
λ
▽
f
(
x
k
)
T
p
k
+
o
(
∣
∣
t
p
k
∣
∣
)
f(x^k)-f(x^k+tp^k)=-\lambda\bigtriangledown f(x^k)^Tp^k+o(||tp^k||)
f(xk)−f(xk+tpk)=−λ▽f(xk)Tpk+o(∣∣tpk∣∣)
可知在令
p
k
=
−
▽
f
(
x
k
)
p^k=-\bigtriangledown f(x^k)
pk=−▽f(xk)时,函数值下降最快
步骤
k
:
迭
代
次
数
k:迭代次数
k:迭代次数
x
k
:
表
示
第
k
步
的
点
x^k:表示第k步的点
xk:表示第k步的点
ξ
:
终
止
误
差
\xi:终止误差
ξ:终止误差
p
k
:
第
k
步
的
搜
索
方
向
p^k:第k步的搜索方向
pk:第k步的搜索方向
λ
k
:
第
k
步
的
步
长
\lambda_k:第k步的步长
λk:第k步的步长
- 确定初始点 x 0 x^0 x0,终止误差 ξ > 0 \xi>0 ξ>0, k = 0 k=0 k=0
- 计算 ▽ f ( x k ) \bigtriangledown f(x^k) ▽f(xk),如果 ▽ f ( x k ) < ξ \bigtriangledown f(x^k)<\xi ▽f(xk)<ξ停止迭代,否则进行第3步
- 令 p k = − ▽ f ( x k ) p^k=-\bigtriangledown f(x^k) pk=−▽f(xk)
- 求
λ
k
\lambda_k
λk,满足:
f ( x k + λ k p k ) = m i n λ ≥ 0 f ( x k + p k ) : ( 一 般 是 对 λ k ) 构 成 的 新 的 函 数 求 导 , 得 到 其 导 数 为 0 的 点 f(x^k+\lambda_kp^k)=min_{\lambda\geq0}f(x^k+p^k):(一般是对\lambda_k)构成的新的函数求导,得到其导数为0的点 f(xk+λkpk)=minλ≥0f(xk+pk):(一般是对λk)构成的新的函数求导,得到其导数为0的点
令 x k + 1 = x k + λ k p k , k = k + 1 x^{k+1}=x^k+\lambda_kp^k,k=k+1 xk+1=xk+λkpk,k=k+1,再进行第2步
一个实例
例: m i n f ( x ) = x 1 − x 2 + 2 x 1 2 + 2 x 1 x 2 + x 2 2 minf(x)=x_1-x_2+2x_1^2+2x_1x_2+x_2^2 minf(x)=x1−x2+2x12+2x1x2+x22,给定初始点 x ( 1 ) = ( 0 , 0 ) T , x^{(1)}=(0,0)^T, x(1)=(0,0)T,
- 确定初始点 x 0 = ( 0 , 0 ) x^0=(0,0) x0=(0,0), k = 0 k=0 k=0
- 求取
▽
f
(
x
k
)
=
[
∂
f
(
x
)
∂
x
1
∂
f
(
x
)
∂
x
2
]
=
[
1
+
4
x
1
+
2
x
2
−
1
+
2
x
1
+
2
x
2
]
\bigtriangledown f(x^k)=\left[\begin{matrix}\frac{\partial f(x)}{\partial x_1}\\\frac{\partial f(x)}{\partial x_2}\end{matrix}\right]= \left[\begin{matrix}1+4x_1+2x_2\\ -1+2x_1+2x_2\end{matrix}\right]
▽f(xk)=[∂x1∂f(x)∂x2∂f(x)]=[1+4x1+2x2−1+2x1+2x2]
带入 x 0 x^0 x0得到: ▽ f ( x 0 ) = [ 1 − 1 ] \bigtriangledown f(x^0)=\left[\begin{matrix}1\\-1\end{matrix}\right] ▽f(x0)=[1−1]
得到 ξ 0 = ∣ f ( x 0 ) ∣ = 2 \xi_0=|f(x^0)|=\sqrt{2} ξ0=∣f(x0)∣=2 - 令 d ( 0 ) = − ▽ f ( x 0 ) = [ − 1 1 ] d^{(0)}=-\bigtriangledown f(x^0)=\left[\begin{matrix}-1\\1\end{matrix}\right] d(0)=−▽f(x0)=[−11]
- 求
λ
0
\lambda_0
λ0,
(1): x ( 0 ) + λ d ( 0 ) = [ 0 0 ] + λ [ − 1 1 ] = [ − λ λ ] x^{(0)}+\lambda d^{(0)}=\left[\begin{matrix}0\\0 \end{matrix}\right]+\lambda \left[\begin{matrix}-1\\1 \end{matrix}\right]=\left[\begin{matrix}-\lambda\\\lambda \end{matrix}\right] x(0)+λd(0)=[00]+λ[−11]=[−λλ],得到 x 1 = − λ , x 2 = λ 2 x_1=-\lambda,x_2=\lambda_2 x1=−λ,x2=λ2
(2)将 x 1 , x 2 x_1,x_2 x1,x2带入 f ( x ) = f ( x ( 0 ) + λ d ( 1 ) ) = ( − λ ) − λ + 2 ( − λ ) 2 + 2 λ ( − λ ) + λ 2 = λ 2 − 2 λ = ϕ 1 ( λ ) f(x)=f(x^{(0)}+\lambda d^{(1)})=(-\lambda)-\lambda+2(-\lambda)^2+2\lambda(-\lambda)+\lambda^2=\lambda^2-2 \lambda=\phi_1(\lambda) f(x)=f(x(0)+λd(1))=(−λ)−λ+2(−λ)2+2λ(−λ)+λ2=λ2−2λ=ϕ1(λ)
(3) ϕ 0 ( λ ) = 2 λ − 2 = 0 \phi_0(\lambda)=2\lambda-2=0 ϕ0(λ)=2λ−2=0, λ 0 = 1 \lambda_0=1 λ0=1
(4) x ( 1 ) = x ( 0 ) + λ 0 d ( 0 ) = [ 0 0 ] + 1 ∗ [ − 1 1 ] = [ − 1 1 ] x^{(1)}=x^{(0)}+\lambda_0 d^{(0)}=\left[\begin{matrix}0\\0 \end{matrix}\right]+1* \left[\begin{matrix}-1\\1 \end{matrix}\right]= \left[\begin{matrix}-1\\1 \end{matrix}\right] x(1)=x(0)+λ0d(0)=[00]+1∗[−11]=[−11]
步长的确定方法
原理看这里
黄金分割法
缩小区间法
插值法
优缺点
在开头几步,目标函数下降较快;但在接近极小点时,收敛速度长久不理想了。特别适当目标函数的等值 线为比较扁平的椭圆时,收敛就更慢了。