我想编写一个 Python 程序来运行二分法来确定根:
f(x) = -26 + 85x - 91x2 +44x3 -8x4 + x5
二分法是一种用于估计多项式 f(x) 的根的数值方法。
是否有任何可用的伪代码、算法或库可以用来告诉我答案?
最佳答案
基本技术
下面是一些显示基本技术的代码:
>>> def samesign(a, b):
return a * b > 0
>>> def bisect(func, low, high):
'Find root of continuous function where f(low) and f(high) have opposite signs'
assert not samesign(func(low), func(high))
for i in range(54):
midpoint = (low + high) / 2.0
if samesign(func(low), func(midpoint)):
low = midpoint
else:
high = midpoint
return midpoint
>>> def f(x):
return -26 + 85*x - 91*x**2 +44*x**3 -8*x**4 + x**5
>>> x = bisect(f, 0, 1)
>>> print(x, f(x))
0.557025516287 3.74700270811e-16
公差
要在达到给定容差时提前退出,请在循环末尾添加一个测试:
def bisect(func, low, high, tolerance=None):
assert not samesign(func(low), func(high))
for i in range(54):
midpoint = (low + high) / 2.0
if samesign(func(low), func(midpoint)):
low = midpoint
else:
high = midpoint
if tolerance is not None and abs(high - low) < tolerance:
break
return midpoint
关于python - 如何在 Python 中执行二分法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14392208/