数值分析(7)-非线性方程求根

7 非线性方程求根


这一章讲的是非线性方程求根的故事,假设有非线性函数 f ( x ) f(x) f(x),那么其对应的非线性方程求根就是求:
f ( x ) = 0 f(x)=0 f(x)=0
,也称作函数 f ( x ) f(x) f(x)的零点。如果 f ( x ) = ( x − α ) m h ( x ) f(x)=(x-\alpha)^mh(x) f(x)=(xα)mh(x),而且 h ( x ) h(x) h(x) x = α x=\alpha x=α处连续且导数不为0,那么就称 α \alpha α是方程1的 m重根,当m=1时,称作 单根。如果知道区间 [ a , b ] [a,b] [a,b]上必有方程的根,那么这个区间就称为该方程的 有根区间

高次方程没有解析形式的求根公式,而且很多非线性方程实际上都没有直接发可言,所以求解多是使用迭代方法,下面介绍几种常用的求根方法。

7.1 二分法

了解过算法的同学会对这里很熟悉,就是二分查找折半查找的原理。

二分法只适合求单根,在有根区间内只能存在一个根才行。假设 [ a , b ] [a,b] [a,b] 是方程 f ( x ) = 0 f(x)=0 f(x)=0的有根区间,二分法就是将有根区间逐次减半,使有根区间的长度越来越小,从而得到根的近似值。其迭代步骤如下:

如果有根区间为 [ a , b ] [a,b] [a,b],那么有 f ( a ) f ( b ) &lt; 0 f(a)f(b)&lt;0 f(a)f(b)<0,令 a 0 = a , b 0 = b a_0=a,\quad b_0=b a0=a,b0=b,计算 x 1 = a 0 + b 0 2 x_1=\frac{a_0+b_0}{2} x1=2a0+b0,如果此时 f ( a 0 ) f ( x 1 ) &gt; 0 f(a_0)f(x_1)&gt;0 f(a0)f(x1)>0则说明根在区间 [ x 1 , b 0 ] [x_1,b_0] [x1,b0]中,进而令 a 1 = x 1 , b 1 = b 0 a_1=x_1, b_1=b_0 a1=x1,b1=b0,得到新的有根区间,其长度恰好为上一步的一半。

依照上面的套路,重复进行计算,最后得到的区间 [ a k , b k ] [a_k,b_k] [ak,bk],这时候我们知道根就在这个区间中,从而误差为:
∣ x k − α ∣ ≤ b k − a k = b k − 1 − a k − 1 2 = ⋯ = b 0 − a 0 2 k = b − a 2 k |x_k-\alpha|\le b_k-a_k=\frac{b_{k-1}-a_{k-1}}{2}=\cdots=\frac{b_0-a_0}{2^k}=\frac{b-a}{2^k} xkαbkak=2bk1ak1==2kb0a0=2kba
这样就可以得到计算精度与迭代次数的关系:
b − a 2 k &lt; ε o r k &gt; l o g 2 b − a ε \frac{b-a}{2^k}\lt\varepsilon\quad or\quad k&gt;log_2\frac{b-a}{\varepsilon} 2kba<εork>log2εba
当满足误差 ε \varepsilon ε时,可以取近似值 x k ≈ α x_k\approx\alpha xkα

4.2 简单迭代法

4.2.1 一般形式

简单迭代法,也叫作逐次逼近法,是通过将方程 f ( x ) = 0 f(x)=0 f(x)=0通过等价变换的方式,转换为 x = φ ( x ) x=\varphi(x) x=φ(x)的形式,其中 φ ( x ) \varphi(x) φ(x)叫做迭代函数,然后构造迭代格式
x k + 1 = φ ( x k ) x_{k+1}=\varphi(x_k) xk+1=φ(xk)
得到迭代序列 { x k } \{x_k\} {xk},如果 x k x_k xk收敛于 α \alpha α,而且函数 φ ( x ) \varphi(x) φ(x) α \alpha α附近是连续的,那么根据上面的迭代格式,可以知道 α = φ ( α ) \alpha=\varphi(\alpha) α=φ(α),它就是原方程的根。如果迭代序列收敛,那么就称这个简单迭代法是收敛的

4.2.2 收敛条件

收敛定理:

假设迭代函数 φ ( x ) \varphi(x) φ(x)在区间 [ a , b ] [a,b] [a,b]上可导,且满足下面条件:

  • a ≤ φ ( x ) ≤ b , x ∈ [ a , b ] a\le\varphi(x)\le b ,\quad x\in[a,b] aφ(x)b,x[a,b]
  • 存在整数 L &lt; 1 L\lt1 L<1,使得对任意 x ∈ [ a , b ] x\in[a,b] x[a,b]均有 ∣ φ ′ ( x ) ∣ ≤ L &lt; 1 |\varphi&#x27;(x)|\le L\lt 1 φ(x)L<1(这个条件可以放宽为 ∣ φ ( x ) − φ ( y ) ∣ ≤ L ∣ x − y ∣ , ∀ x , y ∈ [ a , b ] |\varphi(x)-\varphi(y)|\le L|x-y|, \forall x,y\in [a,b] φ(x)φ(y)Lxy,x,y[a,b])。

这时,方程 x = φ ( x ) x=\varphi(x) x=φ(x) [ a , b ] [a,b] [a,b]上存在唯一根 α \alpha α,且对 [ a , b ] [a,b] [a,b]内的任意初值,其产生的迭代序列均收敛于 α \alpha α,并有误差估计
∣ x k − α ∣ ≤ L 1 − L ∣ x k − x k − 1 ∣ |x_k-\alpha|\le\frac{L}{1-L}|x_k-x_{k-1}| xkα1LLxkxk1

∣ x k − α ∣ ≤ L k 1 − L ∣ x 1 − x 0 ∣ |x_k-\alpha|\le\frac{L^k}{1-L}|x_1-x_0| xkα1LLkx1x0

进而得到近似精度与迭代次数的关系:
L k 1 − L ∣ x 1 − x 0 ∣ &lt; ε o r k &gt; l n ε ( 1 − L ) ∣ x 1 − x 0 ∣ l n L \frac{L^k}{1-L}|x_1-x_0|&lt;\varepsilon \quad or \quad k\gt\frac{ln\frac{\varepsilon(1-L)}{|x_1-x_0|}}{lnL} 1LLkx1x0<εork>lnLlnx1x0ε(1L)

4.2.3 收敛阶

收敛阶反映了迭代误差下降的速度,假设有迭代序列 { x k } \{x_k\} {xk}收敛于 α \alpha α,记误差为 e k = x k − α e_k=x_k-\alpha ek=xkα,如果存在正实数p和非零常数C使得下面式子成立:
lim ⁡ k → ∞ ∣ e k + 1 ∣ ∣ e k ∣ p = C \lim_{k\to\infty}\frac{|e_{k+1}|}{|e_k|^p}=C klimekpek+1=C
就称这个迭代序列是p阶收敛的,p是收敛阶,C是渐进误差常数。通常称p=1为线性收敛,p>1为超线性收敛,p=2为平方收敛

另外还有一个求收敛阶的定理:

假设 α = φ ( α ) , φ ( x ) \alpha=\varphi(\alpha),\varphi(x) α=φ(α),φ(x) α \alpha α的邻域充分光滑,且满足下面:
φ ′ ( α ) = φ ′ ′ ( α ) = ⋯ = φ ( p − 1 ) ( α ) = 0 , φ ( p ) ( α ) ≠ 0 , p ⩾ 2 \varphi^{\prime}(\alpha)=\varphi^{\prime \prime}(\alpha)=\cdots=\varphi^{(p-1)}(\alpha)=0, \quad \varphi^{(p)}(\alpha) \neq 0, \quad p \geqslant 2 φ(α)=φ(α)==φ(p1)(α)=0,φ(p)(α)̸=0,p2
则当初始值 x 0 x_0 x0的取值充分靠近 α \alpha α时,迭代格式是p阶收敛的,且有:
lim ⁡ k → ∞ ∣ e k + 1 ∣ ∣ e k ∣ p = 1 p ! ∣ φ ( p ) ( α ) ∣ ≠ 0 \lim _{k \rightarrow \infty} \frac{\left|e_{k+1}\right|}{\left|e_{k}\right|^{p}}=\frac{1}{p !}\left|\varphi^{(p)}(\alpha)\right| \neq 0 klimekpek+1=p!1φ(p)(α)̸=0

4.3 Newton迭代法

Newton迭代法的优点在于,在单根附近具有平方收敛,而且可以求重根、复根。基本思想是将非线性方程转换为线性方程,又因为这是根据导数进行计算,又被称为切线法

4.3.1 迭代格式

假设 f ( x ) f(x) f(x)二阶连续可微, x 0 x_0 x0 α \alpha α的某个近似值,那么在 x 0 x_0 x0处泰勒展开(Taylor):
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + f ′ ′ ( ξ 0 ) 2 ( x − x 0 ) 2 f(x)=f\left(x_{0}\right)+f^{\prime}\left(x_{0}\right)\left(x-x_{0}\right)+\frac{f^{\prime \prime}\left(\xi_{0}\right)}{2}\left(x-x_{0}\right)^{2} f(x)=f(x0)+f(x0)(xx0)+2f(ξ0)(xx0)2
其中 ξ 0 \xi_0 ξ0介于 x , x 0 x,x_0 x,x0之间,可以用其线性主部近似原函数,即:
f ( x ) ≈ f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) f(x)\approx f\left(x_{0}\right)+f^{\prime}\left(x_{0}\right)\left(x-x_{0}\right) f(x)f(x0)+f(x0)(xx0)
那么非线性方程 f ( x ) = 0 f(x)=0 f(x)=0就近似为了线性方程:
f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) = 0 f\left(x_{0}\right)+f^{\prime}\left(x_{0}\right)\left(x-x_{0}\right)=0 f(x0)+f(x0)(xx0)=0
f ′ ( x ) ≠ 0 f^\prime(x)\ne 0 f(x)̸=0,则可得到:
x 1 = x 0 − f ( x 0 ) f ′ ( x 0 ) x_1=x_0-\frac{f(x_0)}{f^\prime(x_0)} x1=x0f(x0)f(x0)
按照此套路,若 f ′ ( x ) ≠ 0 f^\prime(x)\ne 0 f(x)̸=0,可以得到Newton迭代格式
x k + 1 = x k − f ( x k ) f ′ ( x k ) , k = 0 , 1 , 2 , ⋯ x_{k+1}=x_{k}-\frac{f\left(x_{k}\right)}{f^{\prime}\left(x_{k}\right)}, \quad k=0,1,2, \cdots xk+1=xkf(xk)f(xk),k=0,1,2,

4.3.2 收敛性

Newton迭代法迭代函数为:
φ ( x ) = x − f ( x ) f ′ ( x ) \varphi(x)=x-\frac{f(x)}{f^\prime(x)} φ(x)=xf(x)f(x)
又因为Newton迭代法要求在根的位置一阶可导,且原函数在有根区间二次连续可微,那么可以知道迭代函数的导数为:
φ ′ ( x ) = 1 − ( f ′ ( x ) ) 2 − f ( x ) f ′ ′ ( x ) ( f ′ ( x ) ) 2 = f ( x ) f ′ ′ ( x ) ( f ′ ( x ) ) 2 ≠ 0 \varphi^{\prime}(x)=1-\frac{\left(f^{\prime}(x)\right)^{2}-f(x) f^{\prime \prime}(x)}{\left(f^{\prime}(x)\right)^{2}}=\frac{f(x) f^{\prime \prime}(x)}{\left(f^{\prime}(x)\right)^{2}} \ne 0 φ(x)=1(f(x))2(f(x))2f(x)f(x)=(f(x))2f(x)f(x)̸=0
所以知道,Newton迭代法是局部收敛的,而且至少是平方收敛。进一步可以得到如下收敛定理

设函数 f ( x ) f(x) f(x)在根 α \alpha α邻域有二阶连续导数,且 f ′ ( α ) ≠ 0 f^\prime(\alpha)\ne 0 f(α)̸=0,则对充分接近 α \alpha α的初值 x 0 x_0 x0,Newton迭代法产生的迭代序列 { x k } \{x_k\} {xk}收敛于 α \alpha α,并有:
lim ⁡ h → ∞ x k + 1 − α ( x k − α ) 2 = f ′ ′ ( α ) 2 f ′ ( α ) \lim _{h \rightarrow \infty} \frac{x_{k+1}-\alpha}{\left(x_{k}-\alpha\right)^{2}}=\frac{f^{\prime \prime}(\alpha)}{2 f^{\prime}(\alpha)} hlim(xkα)2xk+1α=2f(α)f(α)
上面定理说明了,一般情况下,Newton迭代是平方收敛,如果 f ′ ′ ( x ) = 0 f^{\prime\prime}(x)=0 f(x)=0那么收敛阶会更高。

下面讨论初始值的要求

M 2 = max ⁡ ∣ f ′ ′ ( x ) ∣ , m 1 = min ⁡ ∣ f ′ ( x ) ∣ , C = M 2 2 m 1 M_{2}=\max \left|f^{\prime \prime}(x)\right|, m_{1}=\min \left|f^{\prime}(x)\right|,C=\frac{M_2}{2m_1} M2=maxf(x),m1=minf(x),C=2m1M2,则有上面公式,有:
∣ x k + 1 − α ∣ ⩽ C ∣ x k − α ∣ 2 , k = 0 , 1 , 2 , ⋯ \left|x_{k+1}-\alpha\right| \leqslant C\left|x_{k}-\alpha\right|^{2}, \quad k=0,1,2, \cdots xk+1αCxkα2,k=0,1,2,
为了方便计算,改写为:
C ∣ x k + 1 − α ∣ ⩽ ( C ∣ x k − α ∣ ) 2 , k = 0 , 1 , 2 , ⋯ C\left|x_{k+1}-\alpha\right| \leqslant\left(C\left|x_{k}-\alpha\right|\right)^{2}, \quad k=0,1,2, \cdots Cxk+1α(Cxkα)2,k=0,1,2,
于是有:
C ∣ x k − α ∣ ≤ ( C ∣ x 0 − α ∣ ) 2 k C|x_k-\alpha|\le(C|x_0-\alpha|)^{2k} Cxkα(Cx0α)2k
将C带入:
∣ x k − α ∣ ≤ 2 m 1 M 2 ( M 2 2 m 1 ∣ x 0 − α ∣ ) 2 k |x_k-\alpha|\le\frac{2m_1}{M_2}\left(\frac{M_2}{2m_1}|x_0-\alpha|\right)^{2k} xkαM22m1(2m1M2x0α)2k
要保证 ∣ x k − α ∣ |x_k-\alpha| xkα趋近于0,那么对于 x 0 x_0 x0的选择,要保证 ∣ x 0 − α ∣ &lt; 2 m 1 M 2 |x_0-\alpha|\lt\frac{2m_1}{M_2} x0α<M22m1

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值