函数集成返回“只有length1数组可以转换为Python标量”

2024-10-01 00:26:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图把一个函数积分到一个给定的范围内,这个函数表示粒子在零角(θ)方向的流动,作为粒子能量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

有人知道怎么绕过这个吗?在


Tags: 方法函数fromimportself粒子cosquad
1条回答
网友
1楼 · 发布于 2024-10-01 00:26:16

integral必须具有scipy documentation中描述的签名之一。在您的例子中,一个以double作为参数并返回double的函数似乎是合适的。在

self仅用于类的成员函数。它在类定义之外没有意义。将其替换为一个简单的名称,比如x,它将是要集成的函数的输入参数。在

函数必须返回double。由于E是一个数组,并且您似乎在用它进行计算,那么计算出的返回值也可能是一个数组。它必须是标量。把它修好就行了。当您将函数替换为以下内容时:

def integral(x):
    return x * x

那就行了。当然,这不是您需要的,但这是quad()工作所需的参数和返回值。在

您可能想查看here如何使用quad()的示例。在

一些建议:

  • 使用四个空格缩进(不是示例中的5个空格)
  • 结果两边不需要括号。为了更清楚起见,请将其拆下。在

相关问题 更多 >