R语言中二分法和迭代法求方程组的解 二分法求迭代次数_迭代


前言

上一篇文章,介绍了线性迭代法求解方程组的Jacobi迭代法和Gauss-Seidel迭代法,下面将介绍非线性方程组迭代法。

一、简单迭代法

对于非线性问题形如


,求解其根。初中高中阶段我们都学习过一次,二次,三次求解根的方法,但是阶数大于等于四之后,解析法很难求解到精确的根,因此这里提出了迭代法来求解非线性方程的根问题。


R语言中二分法和迭代法求方程组的解 二分法求迭代次数_迭代_02


对于f(x)=0在区间[a,b]上,如果仅有一个根,则称[a,b]为单根区间,多个根称为多根区间。多根问题较为复杂,我们主要研究方程在单根区间上的求解方法。

简单迭代法是将f(x)=0转换为一个同解的方程


,通过迭代法求解


满足该等式。



R语言中二分法和迭代法求方程组的解 二分法求迭代次数_迭代法_03

简单迭代法

同样的称


迭代法收敛。迭代法的几何直观理解如下图所示,


R语言中二分法和迭代法求方程组的解 二分法求迭代次数_迭代_04


实际上,我们很容易看出来


的构造方式很多,但是迭代法的收敛与发散,依赖于迭代函数的构造,那么迭代函数须满足什么条件,迭代法才能收敛呢?


R语言中二分法和迭代法求方程组的解 二分法求迭代次数_二分法求方程的根_05

迭代法收敛定理

显然图中箭头位置指向的[a, b]区间很难验证,具体多大无从得知,但是我们一般都只在根的附近区间来进行迭代法的运算,当区间足够小,就能通过迭代法确定解。因此我们要求在根


的附近满足


,则该迭代法局部收敛。(后续谈到的收敛如果不特殊指明都是局部收敛)。


有关L的推导公式需要借助于微分中值定理,


R语言中二分法和迭代法求方程组的解 二分法求迭代次数_牛顿法_06


通过公式,我们还可以通过L,来确定迭代需要的步数。


R语言中二分法和迭代法求方程组的解 二分法求迭代次数_R语言中二分法和迭代法求方程组的解_07


虽然算法可以正常收敛,但是收敛速度并不相同。这里引入收敛速度的阶的概念,作为判断迭代法收敛速度的重要标准。


R语言中二分法和迭代法求方程组的解 二分法求迭代次数_迭代_08


收敛阶

先给出迭代法收敛阶的定义,


R语言中二分法和迭代法求方程组的解 二分法求迭代次数_迭代法_09


上面结论的推导是借助于泰勒公式实现的,


R语言中二分法和迭代法求方程组的解 二分法求迭代次数_二分法求方程的根_10


R语言中二分法和迭代法求方程组的解 二分法求迭代次数_迭代_11


因此,如果想要证明一种迭代法是至少平方收敛的,则只需要证明其一阶导函数等于零即可



二、Newton收敛法

首先定义牛顿爹迭代法迭代格式,


R语言中二分法和迭代法求方程组的解 二分法求迭代次数_R语言中二分法和迭代法求方程组的解_12


这种迭代格式是如何推导得到的呢?


,若要平方收敛,则满足


,因此求导得到



Newton法迭代格式由此得到。

牛顿法性质这么好,但是其实是有要求的:

  1. 牛顿法好处是收敛的很快,但坏处是局部收敛。
  2. 牛顿法要求不能有重根。
  3. 牛顿法要求有良好的初始点。

实际计算过程中,有时导数的计算我们并不喜欢,比如Newton中的


,因此我们提出割线法来替代求导,


R语言中二分法和迭代法求方程组的解 二分法求迭代次数_牛顿法_13


需要注意的是割线法或弦截法的收敛阶只有1.618,是局部超线性收敛的。如果有好的初始点还是建议使用Newton法,收敛阶大于1的只有牛顿法和割线法两种。

从几何角度来看,Newton法是切线法,而割线法是一种以直代曲的方法。


R语言中二分法和迭代法求方程组的解 二分法求迭代次数_二分法求方程的根_14


还有单步弦截法,


R语言中二分法和迭代法求方程组的解 二分法求迭代次数_迭代_15


三、多根区间上的逐次逼近法

上面探讨的都是单根区间的求解问题,我们不免要讨论多根区间的问题。

多根区间主要情况有两种,


R语言中二分法和迭代法求方程组的解 二分法求迭代次数_牛顿法_16


我们主要采用二分法的策略来迭代计算求解,


R语言中二分法和迭代法求方程组的解 二分法求迭代次数_迭代法_17


二分法作用:

  1. 用于求方程的近似根,有根区间趋于零的速度较慢。
  2. 可用于求迭代法的初始值:从某个区间[ci,di]开始使用其他迭代法求解,将 或 作为迭代法的初始值。
  3. 是一种好的并行算法。

有重根的多根区间

如果是有重根的多根区间,


R语言中二分法和迭代法求方程组的解 二分法求迭代次数_二分法求方程的根_18


R语言中二分法和迭代法求方程组的解 二分法求迭代次数_迭代法_19


上面是改进后的Newton迭代法,将线性收敛重新变为至少平方收敛。

总结

以上内容是全部的非线性方程迭代法求解过程,对于数值求解方程根非常有用。之后将介绍幂法与反幂法的相关知识。