公式为同一变量返回不同的值

时间:2019-03-30 22:04:16

标签: python numpy matplotlib equation

我正在尝试创建图表,但它看起来不正确。 对于范围(0,1000000),图表应在x轴处从0开始并在1处结束,但是它具有负值。在乞求中还可以,但是经过一些设定后,它就出错了。

我尝试手动计算特定值,但发现方程中相同值的结果不同。这是一个示例:

import numpy as np
import matplotlib.pyplot as plt

def graph(formula, x_range):
    x = np.array(x_range)
    y = eval(formula)
    print(y)
    plt.plot(x, y)
    plt.show()

formula = '1-((2**32-1)/2**32)**(x*(x-1)/2)'
graph(formula, range(80300, 80301))

x = 80300
print(eval(formula))

对于相同的值会有不同的结果,这是控制台输出:

[-0.28319476]

0.5279390283223464

我不知道为什么相同的公式和值会有不同的结果。正确的是0.5279390283223464。

1 个答案:

答案 0 :(得分:0)

要使代码正常工作,请使用较大的数据类型,即(dtype =“ float64”),将代码编辑为:

x = np.array(x_range, dtype="float64")

或者如果您希望2个结果精确匹配,请添加[0]

x = np.array(x_range, dtype="float64")[0]
x = np.array(x_range, dtype="float32")[0]

要了解原因,请阅读以下内容:

例如,如果将代码中的公式更改为简单的公式(公式=“ x + 100”),则会得到正确的结果

这是什么意思? 这意味着您的公式为'(1-((2 32-1)/ 2 32)**(x *(x-1)/ 2)'会导致numpy中出现溢出”在C中而不是python”

我尝试使用以下代码来缩小问题的可能性:

formula = '1-((2**32-1)/2**32)**(x*(x-1)/2)'
x = 80300
print(eval(formula))
x = np.array(range(80300, 80301))[0]
print(eval(formula))

崇高文字的输出>>>

0.5279390283223464
RuntimeWarning: overflow encountered in long_scalars
import numpy as np
-0.28319476138546906

支持我的观点