Python:Numpy函数不能产生正确的结果
在使用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
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)