牛顿迭代法

最优化方法

迭代法

\(x\ 为不动点 \iff f(x) = x\)

求解非线性方程 $$f(x)=0$$,可将其改写为具有解为不动点形式的另一个函数 \(g(x)\),使得 \(\forall x[f(x)=0\leftrightarrow g(x)=x]\)。取任意初始值 \(x_0\) 和相应的迭代结果 \(x_n=g(x_{n-1})=(\underbrace{g\circ\cdots\circ g}_{n})(x_0)\),得到序列 \(\lbrace x_0,x_1,\dots,x_n\rbrace\),若 \(\lim_{n\to\infty}x_n\to x_c\),由于 \(\lim_{n\to\infty}g(x_n)=\lim_{n\to\infty}x_{n+1}\to x_c\),故 \(x_c=g(x_c)\)\(x_c\) 为原方程 \(f(x)\) 的一个解。称这一迭代法得到的序列收敛,也称这一迭代法本身收敛;否则发散。

由于构造的 \(g(x)\) 和选择的 \(x_0\) 不同,不同迭代法的收敛性和收敛过程也不同。

压缩映像原理

\(g(x)\ 为区间\ [a,b]\ 上的压缩映像\iff \forall x\in[a,b](g(x)\in[a,b])\text{ and }\exists L_c\in(0,1),\forall x,y\in[a,b](\vert g(x)-g(y)\vert\le L_c\vert x-y\vert)\)

\(g(x)\ 为区间\ [a,b]\ 上的压缩映像\),则

  • \(g(x)\text{ 在区间 }[a,b]\text{ 上存在 }g(x)=x\text{ 的唯一解 }x_c\)
  • \(\forall x_0\in[a,b](\lim_n x_n\to x_c)\)
  • 迭代 \(k\) 次后的误差:先验估计误差 \({L_c^k\over1-L_c}\vert g(x_0)-x_0\vert\),后验估计误差 \({L_c\over1-L_c}\vert x_n-x_{n-1}\vert\)

\(L_c\) 代表了压缩比例。由误差公式可知,\(L_c\) 越小,误差越小,收敛速度越快。在比较小的一个区间内,\(L_c\) 近似为函数的导数的绝对值,\(L_c\approx\vert g^\prime(x_c)\vert\),故此绝对值越小,局部收敛速度越快。

加速方法

参数法 \(x_{n+1}={g(x_n)-\theta x_n\over1-\theta}\)

\[\begin{align*} g(x)-\theta x&=(1-\theta)x\\ h(x)&={g(x)-\theta x\over1-\theta}\\\ \text{ $h(x)$ 为新的迭代函数}&\text{, 且 }h^\prime(x)={g^\prime(x)-\theta\over1-\theta}\\ \end{align*} \]

选择适当的 \(\theta\),令 \(\vert h^\prime\vert\) 尽可能小。

松弛法 \(\begin{cases}\omega_n=\frac1{1-g^\prime(x_n)},\\x_{n+1}=(1-\omega_n)x_n+\omega_ng(x_n).\end{cases}\)

\[\begin{align*} h(x)&=(1-\omega)x+\omega g(x)\\ h^\prime(x)&=(1-\omega)+\omega g^\prime(x)\\ h^\prime(x)=0&\implies\omega=\frac1{1-g^\prime(x)} \end{align*} \]

Altken 方法 \(\begin{cases}x_{n1}=g(x_n),\\[0.1cm]x_{n2}=g(x_{n1}),\\x_{n+1}=x_{n2}-{(x_{n2}-x_{n1})^2\over x_{n2}-2x_{n1}+x_n}.\end{cases}\)

取参数法的参数 \(\theta_n={g(g(x_n))-g(x_n)\over g(x_n)-x_n}={x_{n2}-x_{n1}\over x_{n1}-x_n}\),在参数法中能够令 \(h^\prime(x)\approx0\)

\[\begin{align*} x_{n+1}&={g(x_n)-\theta\over1-\theta}\\ &=x_{n2}-{(x_{n2}-x_{n1})^2\over x_{n2}-2x_{n1}+x_n} \end{align*} \]

牛顿迭代法

迭代法是利用函数的收敛性计算非线性方程的解的一种方法,关键是要保证选择的迭代函数的收敛性。牛顿迭代法如下。

求单调函数 \(f(x) = 0\) 的解

  1. 选择一个接近零点的数 \(x_0\)
  2. \(x_{n+1} = g(x_n) = x_n-{f(x_n)\over f^\prime(x_n)}\)
  3. \(x_n\) 收敛到不动点。

该方法几种不同理解(获得方式):

从图像上看,这一过程实际上是在求解方程 \(x_{n+1}f^\prime(x_n)+f(x_n)-x_nf^\prime(x_n)=0\),这是一个过点 \((x_n,f(x_n))\) 且斜率为 \(f^\prime(x_n)\) 的直线。这条直线来源于原函数的泰勒展开,忽略二阶及以上的项,\(f(x)\approx f(x_0)+f^\prime(x_0)(x-x_0)\)。变形后得到迭代函数 \(g(x)\)

收敛速度:由压缩映像原理一节可知,\(x_c\) 周围的迭代函数导数绝对值越小,收敛速度越快,若 \(f^\prime(x_c)\ne0\),由于 \(f(x_c)=0\)\(g^\prime(x_c)=1-{{f^\prime}^2(x_c)\over{f^\prime}^2(x_c)}=0\),具有较快的收敛速度。

参数法中,选择迭代函数 \(g(x)=x+f(x)\)。获得速度优化后的新迭代函数 \(h(x)={g(x)-\theta x\over1-\theta},h^\prime(x)={g^\prime(x)-\theta\over1-\theta}={1+f^\prime(x)-\theta\over1-\theta}\),令 \(h^\prime(x)=0\)\(\theta=1+f^\prime(x)=g^\prime(x)\),最终 \(h(x)={g(x)-\theta x\over1-\theta}=x-{f(x)\over f^\prime(x)}\)。但函数名还是被改为 \(g(x)\),即 \(g(x)\leftarrow h(x)\)


证明牛顿迭代法的收敛性

\[\begin{align*} &\begin{array}{rlrl} g(x)&=x-{f(x)\over f^\prime(x)},&g^\prime(x)&={f(x)f^{\prime\prime}(x)\over [f^\prime(x)]^2},\\ g(x_c)&=x_c,&g^\prime(x_c)&=0,\\ \end{array}\\\implies& \forall q\in(0,1)\exists\delta\forall x\in(x_c-\delta,x_c+\delta)[g^\prime(x)<q]\\\implies& g(x)\text{ 为 $(x_c-\delta,x_c+\delta)$ 上的压缩映像} \end{align*} \]

再由压缩映像原理得出函数收敛性。

由于收敛性关乎 \(\delta\) 的选择,\(\delta\) 应当尽可能小,即 \(x_0\) 尽可能接近 \(x_c\),否则可能无法收敛。以下几个条件可以在区间 \([a,b]\) 建立收敛条件:

  • 根存在:\(f(a)f(b)<0\)
  • 单调:\(\forall x\in[a,b][f^\prime(x)\ne0]\)
  • 导数单调:\(\forall x,y\in[a,b][f^{\prime\prime}(x)f^{\prime\prime}(y)\ge0]\)
  • 迭代函数为闭函数:\(\forall x\in[a,b][f(x)f^{\prime\prime}(x)>0]\)
posted @ 2022-10-27 14:07  Violeshnv  阅读(140)  评论(0编辑  收藏  举报