我试图把一个函数积分到一个给定的范围内,这个函数表示粒子在零角(θ)方向的流动,作为粒子能量E的函数。我试过好几种方法,但最后还是有两种错误。我对Python的知识是有限的,我试图学习一些新的方法来处理我需要的东西,但是我已经使用这个函数好几天了,没有成功。在
我现在的职能是:
from numpy import radians, cos, arange
from scipy.integrate import quad
def integral(self):
theta=0
E = arange(1, 5000, 1)
costh = cos(radians(theta))
a = 18 / (E * costh + 145)
b = (E + 2.7 / costh)**-2.7
c = (E + 5) / (E + 5 / costh)
return a*b*c*1**4
A = quad(integral, 500, 1000)
将“quad”应用于函数,如下所示:
TypeError: only length-1 arrays can be converted to Python scalars
如果函数中没有将“self”作为参数,它将返回:
TypeError: integral() takes 0 positional arguments but 1 was given
有人知道怎么绕过这个吗?在
integral
必须具有scipy documentation中描述的签名之一。在您的例子中,一个以double作为参数并返回double的函数似乎是合适的。在self
仅用于类的成员函数。它在类定义之外没有意义。将其替换为一个简单的名称,比如x
,它将是要集成的函数的输入参数。在函数必须返回
double
。由于E
是一个数组,并且您似乎在用它进行计算,那么计算出的返回值也可能是一个数组。它必须是标量。把它修好就行了。当您将函数替换为以下内容时:那就行了。当然,这不是您需要的,但这是
quad()
工作所需的参数和返回值。在您可能想查看here如何使用
quad()
的示例。在一些建议:
相关问题 更多 >
编程相关推荐