Newton迭代法的改进——弦截法
个人学习笔记!
一、弦截法原理
Newton法要计算函数的导数,当导数不方便计算时,可以利用导数的定义,由相近点处函数值的差来近似,这就得到
弦截法公式:
![](https://i-blog.csdnimg.cn/blog_migrate/6be7dae84ee6634bad4668b872448fd4.gif)
求解时需要给出 x0,x1两个初始值。
收敛性:超线性收敛,且收敛阶
![](https://i-blog.csdnimg.cn/blog_migrate/de0fb4489d5aeb8ee00653db365ddf2a.gif)
注意:一般非线性方程有多个根,而弦截法只能得到所给初始值附近的一个根。在应用弦截法时应注意这点
二、python程序实现
例题:求函数在x=1附近的根。
import numpy as np
def f(x):
return x**3-7.7*x*x+19.2*x-15.3
x0 = 1
x1 = 1.655889
f0 = f(x0)
f1 = f(x1)
while(np.abs(x1-x0)>1e-5):
x2 = x1 - f1*(x1-x0)/(f1-f0)
x0,x1 = x1,x2
f0,f1 = f1,f(x1)
print('root:{:.4f}'.format(x2))
经过5次迭代,
输出结果:1.7000,达到精度1e-5,迭代曲线如下:
![](https://i-blog.csdnimg.cn/blog_migrate/cdf2cae41fb92db458dd9dad3bbb3ab1.png)