函数集成 returns “只有长度为 1 的数组可以转换为 Python 标量”
Function integration returns “only length-1 arrays can be converted to Python scalars”
我正在尝试将函数集成到给定范围内,该范围显示零角 (theta) 方向上的粒子流与粒子能量 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"应用到这样的函数returns:
TypeError: only length-1 arrays can be converted to Python scalars
如果我不把 "self" 作为函数的参数,它 returns:
TypeError: integral() takes 0 positional arguments but 1 was given
有人知道如何绕过这个吗?
integral
必须具有 scipy documentation 中描述的签名之一。在你的例子中,一个以双精度作为参数并 returning 双精度的函数似乎是合适的。
self
仅用于class的成员函数。它在 class 定义之外没有意义。将其替换为一个简单的名称,例如 x
,它将作为要集成的函数的输入参数。
函数必须return一个double
。由于 E
是一个数组并且您似乎用它进行计算,因此计算出的 return 值也可能是一个数组。它必须是一个标量。修复它,它将起作用。当您用以下内容替换函数时:
def integral(x):
return x * x
然后就可以了。当然,这不是您需要的,但这是 quad()
工作所需的参数和 return 值。
您可能想查看 以了解如何使用 quad()
的示例。
一些建议:
- 使用四个空格进行缩进(不是示例中的 5 个)
- 结果周围的括号不是必需的。删除更清楚。
我正在尝试将函数集成到给定范围内,该范围显示零角 (theta) 方向上的粒子流与粒子能量 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"应用到这样的函数returns:
TypeError: only length-1 arrays can be converted to Python scalars
如果我不把 "self" 作为函数的参数,它 returns:
TypeError: integral() takes 0 positional arguments but 1 was given
有人知道如何绕过这个吗?
integral
必须具有 scipy documentation 中描述的签名之一。在你的例子中,一个以双精度作为参数并 returning 双精度的函数似乎是合适的。
self
仅用于class的成员函数。它在 class 定义之外没有意义。将其替换为一个简单的名称,例如 x
,它将作为要集成的函数的输入参数。
函数必须return一个double
。由于 E
是一个数组并且您似乎用它进行计算,因此计算出的 return 值也可能是一个数组。它必须是一个标量。修复它,它将起作用。当您用以下内容替换函数时:
def integral(x):
return x * x
然后就可以了。当然,这不是您需要的,但这是 quad()
工作所需的参数和 return 值。
您可能想查看 quad()
的示例。
一些建议:
- 使用四个空格进行缩进(不是示例中的 5 个)
- 结果周围的括号不是必需的。删除更清楚。