我正在尝试使用 python 中的插值方法(不是内置方法)来获取给定间隔的函数的根。
我已经完成了以下操作并且不知道我哪里出错了,我已经通过二分法完成了它,尽管唯一的区别是测试点。
x1 和 x2 是区间的两端,f 是函数,epsilon 是公差
def interpolation (x1,x2,f,epsilon):
i = 1
n = 100
while i<n:
m = (f(x2)- f(x1))/(x2-x1)
b = f(x2) - m*(x2)
p = b
print (i,p,f(p))
if f(p) == 0 or b< epsilon:
print ('The root is at ',p,'after',i,'iterations')
break
i+= 1
if f(x1)*f(p) > 0: #Equal signs
x1 = p
else:
x2 = p
使用 f = sin(x^2) 运行它只会返回 100 次振荡迭代,如下所示:
代码
(80, 1.3266674970489443, 0.98214554271216425)
(81, 1.4900968376899661, 0.79633049173817871)
(82, 1.3266674970489443, 0.98214554271216425)
(83, 1.4900968376899661, 0.79633049173817871)