概要:文章介绍了非线性方程求解方法。具体为二分法、简单迭代法、迭代加速、以及一种特殊的迭代加速方法(Newton迭代法)

前置知识
数值求解非线性方程主要关注:
1.确定迭代格式
2.讨论收敛性
3.分析收敛速度

1 非线性方程二分法

核心

取半求异

python实现马斯京根算法_迭代


误差、收敛性和收敛速度分析

python实现马斯京根算法_线性代数_02


python实现马斯京根算法_算法_03


特点:(1)计算简单、编程容易;(2)对f(x)要求不高;(3)无法求出复根和重根;(4)收敛速度慢

2 简单迭代法

核心

构建Xk+1=g(Xk)

敛散定理

定理一是全局收敛(一般不用于计算,只作为定义手段)

python实现马斯京根算法_python实现马斯京根算法_04


定理1常用形式,可用于计算

python实现马斯京根算法_python实现马斯京根算法_05


定理二是局部收敛(同样只是定义)

python实现马斯京根算法_python实现马斯京根算法_06


类似的,计算形式如下:

python实现马斯京根算法_线性代数_07


定理三是发散定理,和上面定理2相反

python实现马斯京根算法_概率论_08

3 迭代加速方法

简单迭代法大多数情况下式线性收敛,可通过加权方法加速收敛,方法如下:

python实现马斯京根算法_python实现马斯京根算法_09

3.1 埃特金(AITKEN)加速

原理推导(实话说这个我没推导)

python实现马斯京根算法_迭代_10


迭代格式

python实现马斯京根算法_迭代_11


加速序列

python实现马斯京根算法_算法_12


python实现马斯京根算法_线性代数_13


看不懂,记住Aitken具有超线性收敛就行了吧

3.2 斯蒂芬森(Steffensen)加速

迭代格式(三组三组计算,单线计算相较于上面的双线计算)

python实现马斯京根算法_算法_14


加速序列

python实现马斯京根算法_python实现马斯京根算法_15


python实现马斯京根算法_概率论_16


斯蒂芬森是二阶以上收敛

4 NEWTON迭代法(又称切线方法)

4.1 Newton切线法

Newton迭代原理:将非线性方程逐步线性化,从而将非线性方程的求根转化为线性方程的求根问题

python实现马斯京根算法_算法_17


(级数展开的一阶形式)

迭代格式

python实现马斯京根算法_python实现马斯京根算法_18


收敛定理

python实现马斯京根算法_python实现马斯京根算法_19


牛顿迭代具有二阶收敛速度

缺点:Newton方法的收敛性依赖于X0的选取

收敛性计算

python实现马斯京根算法_线性代数_20

4.2 Newton下山法

**原理:**加权平均

python实现马斯京根算法_线性代数_21


计算步骤

python实现马斯京根算法_线性代数_22


这里的选取λ=1/2应该为λ=1/(2^m)

5 总结一下

python实现马斯京根算法_迭代_23