Python:Numpy函数不能产生正确的结果

Python:Numpy函数不能产生正确的结果,python,arrays,numpy,polynomial-math,polynomials,Python,Arrays,Numpy,Polynomial Math,Polynomials,在使用python/numpy时,我有一个关于多项式方程结果的问题。 我定义了一个函数,它使用一个前导系数很小的多项式。 以下是我的代码和公式: import matplotlib.pyplot as plt import numpy as np def myfunction(X): return 9.06043895*10**(-9)*X**6-1.67073053*10**(-6)*X**5 + \ 7.49688511*10**(-5)*X**4 + 7.9

在使用python/numpy时,我有一个关于多项式方程结果的问题。 我定义了一个函数,它使用一个前导系数很小的多项式。 以下是我的代码和公式:

import matplotlib.pyplot as plt
import numpy as np 

def myfunction(X):
    return 9.06043895*10**(-9)*X**6-1.67073053*10**(-6)*X**5 + \
          7.49688511*10**(-5)*X**4 + 7.97984114*10**(-4)*X**3 - \
          6.07927087*10**(-2)*X**2 - 0.415861627*X + 80.62563

Input = np.arange(0, 100, 1)
Output = myfunction(Input)

plt.plot(Input, Output)
这将生成以下曲线图:

当数组本身关闭时,计算结果Y的方式似乎存在错误。(值与绘图匹配,但格式正确)

使用WolframAlpha绘制的完全相同方程式的样本: (从上面的文字复制/粘贴减去并返回)

有人能帮我解释一下这个问题吗

我有一种感觉,在处理函数时可能会有一些截断,但我觉得这个方程并没有那么糟糕


谢谢你们的时间和帮助

这是一个
int
float
的问题。您将获得整数溢出:

>>> np.int32(100)**6
-727379968
>>> np.float32(100)**6
1000000000000.0
因为
np.arange(01001)
给你整数

你可以随意让它们浮动——我通常使用
np.arange(01001.0)
,但老实说,我更喜欢
np.linspace

使用浮动,我得到:


这是一个
int
float
的问题。您将获得整数溢出:

>>> np.int32(100)**6
-727379968
>>> np.float32(100)**6
1000000000000.0
因为
np.arange(01001)
给你整数

你可以随意让它们浮动——我通常使用
np.arange(01001.0)
,但老实说,我更喜欢
np.linspace

使用浮动,我得到:


在python中对我来说很好。你能发布你为
输出
数组得到的值吗?顺便说一下,你可以使用
np.polyval
函数来计算多项式,而不必键入所有的
X**6+。。。X**5
等等。因此,键入函数更简单的方法可能是:
coeffs=[9.06043895e-9,-1.67073053e-6,7.49688511e-5,7.97984114e-4,-6.07927087e-2,-0.415861627,80.62563]
然后
np.polyval(coeffs,X)
还要注意,我使用了
9.06e-9
而不是
9.06*10**(9)
在python中看起来不错。你能发布你为
输出
数组得到的值吗?顺便说一下,你可以使用
np.polyval
函数来计算多项式,而不必键入所有的
X**6+。。。X**5
等等。因此,键入函数的更简单方法可能是:
coeffs=[9.06043895e-9,-1.67073053e-6,7.49688511e-5,7.97984114e-4,-6.07927087e-2,-0.415861627,80.62563]
然后
np.polyval(coeffs,X)
还请注意,我使用了
9.06e-9
,而不是
9.06*10**(9)