我正在尝试创建图表,但它看起来不正确。 对于范围(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。
答案 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
支持我的观点