数值分析:非线性方程的求解

2019-04-01  本文已影响0人  Bocchi

1 逐步搜索法

连续函数的零点定理:设f(x)在区间[a,b]上连续,且有f(a)f(b)<0,说明方程f(x)=0,在区间[a,b]上至少有一个实数根x^*

依据上面的定理,我们可以设计以下算法:
我们从左端点x_0=a出发,按某一个预定的步长h,如取h=(b-a)/n(n 为正整数),向右迈进。考虑节点x_1=x_0+h处的函数值,有3种可能:

我们可以证明,必存在某节点x_k处的函数值异号,则在x_{k-1}x_k必存在一个实根。此时可取\frac{x_{k-1}+x_{k}}{2}作为初始近似值。根的搜索到此结束。这种根的搜索方法称为逐步搜索法


2 二分法

优点:条件简单
缺点:收敛速度慢、不易求偶数重根


2.1 基本思路

对于压缩了的有根区间[a_1,b_1]又可施行同样的手段,如此反复二分下去,即可得出一系列有根区间
[a,b]\supset[a_1,b_1]\supset[a_2,b_2]\supset...\supset[a_k,b_k]\supset...其中每个区间都是前一个的一半,因此k\to\infty[a_k,b_k]的长度
\lim\limits_{k\to\infty}b_k-a_k=\lim\limits_{k\to\infty}\frac{b-a}{2^k}=0因此这些区间必定最终收敛于x^*,由于我们不能也不必无限做下去,因此,我们选取第k次二分后的中点x_k=\frac{a_k+b_k}{2}作为根的近似值。误差为:|x^*-x_k| \le \frac{b_k-a_k}{2}=\frac{b-a}{2^{k+1}}

给定精确度求解二分次数时,利用公式求解即可!!


2.2 计算步骤

(1)输入有根区间端点a,b及预先给定的精度\varepsilon
(2) 计算x=\frac{a+b}2
(3) 若f(a)f(x)同号,则令a=x,转向下一步;否则令b=x,转向下一步。
(4) 若b-a<\varepsilon,则输出方程满足精度要求的根x,否则转向步骤 (2)


3 不动点迭代法

优点:算法简单,对任意初值都能得到同样的结果
缺点:迭代格式选取需要考虑收敛性


3.1 基本思路

3.2 收敛定理

定理 1(全局收敛定理) 设迭代函数\varphi(x)[a,b]上有连续一阶导数,且
(1)当x\in[a,b]时,a\le\varphi(x)\le b
(2)存在正数q<1q为利普希茨常数),使对任意x\in[a,b],有|\varphi{'}(x)|\le q<1;
则方程x=\varphi(x)在区间上存在唯一的根x^*,且对任意初值x_0\in[a,b],由迭代格式x_{k+1}=\varphi(x_k)在区间上存在唯一的根x^*,且对任意初值x_0\in[a,b],有迭代格式所确定的序列\{x_k\}收敛于x^*

推论 如果|\varphi'(x)>1|,则迭代格式x_{k+1}=\varphi(x_k)所确定的序列\{x_k\},对任意初值x_0\in[a,b]发散

定理 2 设\varphi(x) \in C[a,b]满足定理1中的两个条件1,则对任意x_0\in [a,b]由迭代式x_{k+1}=\varphi(x_k)得到的迭代序列\{x_k\}收敛到\varphi(x)的不动点x^*,并有误差估计|x_k-x^*| \leq \frac{L^k}{1-L} |x_1-x_0|不难推导出(后验误差估计法)|x^*-x_k|\leq\frac{1}{1-L}|x_{k+1}-x_k|

注:先验误差估计不用计算x_k的值,如误差定理推导迭代次数。而后验误差估计需要计算相关的近似值


3.3 计算步骤

(对于迭代过程x_{k+1}=\varphi(x_k)
(1)选取初始近似值x_0,精确度\varepsilon
(2)由方程f(x)=0确定迭代函数\varphi(x)
(3)按照迭代格式x_{k+1}=\varphi(x_k)计算x_1=\varphi(x_0)
(4)如果|x_1-x_0| \le \varepsilon,则停止计算否则用x_1代替x_0重复(3)和(4)


3.4 局部收敛性与收敛阶

定义 1 设\varphi(x)有不动点x^*,如果存在x^*的某个邻域R:|x-x^*|\le \delta,对任意x_0 \in R,迭代法x_{k+1}=\varphi(x)产生的序列\{x_k\} \subset R,且收敛到x^*,则称迭代法x_{k+1}=\varphi(x) 局部收敛

定理 3(局部收敛定理) 设迭代函数\varphi(x)x^*的邻域上有连续一阶导数,且有|\varphi{'}(x)|<1;则称迭代格式x_{k+1}=\varphi(x_k)在根x^*的邻域上具有 局部收敛性

定义 2 设迭代过程x_{k+1}=\varphi(x_k)收敛于方程x=\varphi(x)的根x^*,如果当k \to \infty时迭代误差e^k=x_k-x^*满足渐进关系式
\frac{e_{k+1}}{e_k^p} \to C\mbox{,常数}C \neq 0则称该迭代过程是 p阶收敛 的。特别的,p=1(|C|<1)时称为 线性收敛p>1时称为 超线性收敛p=2时称为 平方收敛

定理 4 对于迭代过程x_{k+1}=\varphi(x_k)及正整数p,如果\varphi^{(p)}(x)在所求根x^*的邻域连续,且
\varphi'(x^*)=\varphi''(x^*)=...=\varphi^{p-1}(x^*)\mbox{,}\varphi^{p}(x^*) \neq 0则该迭代过程在点x^*的邻域内时p阶收敛的


3.5 Aitken加速方法

x'_{k+1}=x_k-\frac{(x_{k+1}-x_k)^2}{x_k-2x_{k+1}+x_{k+2}}


4 牛顿法

优点:收敛速度快
缺点:对初值的选取要求较高


4.1 基本思路

对于非线性方程f(x)=0,设x_0是一个初始近似根(可由逐步搜索法确定)
,函数f(x)x_0处的泰勒展开为
f(x)=f(x_0)+f'(x_0)(x-x_0)+...+\frac{f^{(n)}(x_0)}{n!}(x-x_0)^n
用一阶泰勒展开近似f(x),即有
f(x) \approx f(x_0)+f'(x_0)(x-x_0)
于是,方程f(x)在点x_0附近可近似表示为f(x_0)+f'(x_0)(x-x_0)=0,将它的根x_1=x_0-\frac{f(x_0)}{f'(x_0)}作为原方程f(x)的一个近似新根。重复上述过程得迭代格式x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)}这个方法叫做 牛顿迭代法,简称 牛顿法


4.2 计算步骤

(1)选取初始近似值x_0,允许误差\varepsilon_1,\varepsilon_2,计算f_0=f(x_0),f_0'=f'(x_0)
(2)按公式x_1=x_0-\frac{f_0}{f'_0}   迭代一次,得到新的近似值x_1,计算f_1=f(x_1),f'_1=f'(x_1)
(3)如果x_1满足|\delta|<\varepsilon_1|f_1|<\varepsilon_2,则终止迭代格式,以x_1作为所求的根;否则转步骤4。其中
\delta=\left\{ \begin{aligned} & |x_1-x_0| ,\mbox{当}|x_1|<C \\ & \frac{|x_1-x_0|}{x_1} ,\mbox{当}|x_1| \geq C\\ \end{aligned} \right.其中C是取绝对值误差或相对误差的控制常数,一般可取C=1
(4)如果迭代次数达到预先指定的次数N,或者f/_1=0,则方法失败;否则以(x_1,f_1,f'_1)代替(x_0,f_0,f'_0)转步骤(2)继续迭代


4.3 简化牛顿法与牛顿下山法

5 弦截法

优点:计算量比牛顿法小
缺点:收敛速度较牛顿法稍慢


5.1 基本思路

x_k,x_{k-1}f(x)=0的近似根,我们利用f(x_k),f(x_{k+1})构造一次插值多项式p_1(x),并用p_1(x)=0的根作为f(x)=0的心近似根,由于p_1(x)=f(x_k)+\frac{f(x_k)-f(x_{k-1})}{x_k-x_{k-1}}(x-x_k)因此有x_{k+1}=x_k-\frac{f(x_k)}{f(x_k)-f(x_{k-1})}(x_k-x_{k-1})这样导出的公式可看作牛顿法x_{k+1}=x_k-\frac{f(x)}{f’(x_k)}中的导数f’(x)用差商\frac{f(x_k)-f(x_{k-1})}{x_k-x_{k-1}}取代的结果


5.2 计算步骤

求解步骤与牛顿法类似,需要注意的是使用这种方法必须先给出两个初始值x_0,x_1


小结

上一篇 下一篇

猜你喜欢

热点阅读