我写了一些代码来近似一个积分:
使用Python 3.7,但是一些奇怪的行为正在发生,这给了我错误的结果 . 我通过以下方式推导出公式:
让
然后
和
为n = 1,2,3 ......
这在我的代码中实现:
import numpy as np
I = 1
for n in range(1,21):
I = 2*(np.log(2))**n - n*I
这应该导致I = 0.0000419426270488826,但我的代码给了我50.40429353428721 . 我一直试图找出使用print语句的内容:
print("Iteration: ",n)
print("first half: ",2*(np.log(2))**n)
print("second half: ", n*I)
print("New I: ",I, "\n")
你可以看到方程的后半部分在迭代17中变为负数,但我不明白为什么,因为我和n都应该是正数 . 我猜这是问题开始发生的地方 . 有谁知道为什么结果不正确,如果我的假设是正确的?我正在使用Mac OS X el Capitan 10.11.6
1 回答
我认为这是因为溢出错误 . 如果使用Decimal增加浮动精度,它将解决问题 . 这是代码:
这是输出:
顺便说一下,需要通过用
ln(2)
替换_38331来更正公式 .更新:可能问题的名称是loss of significance