from scipy import integrateimport numpy as npdef f(x,z): return (3*x**2 + 3*z**2)**0.5def limits_y(x,z): return [(2*x**2+2*z**2),8]def limits_z(): return [0,2*np.pi]def limits_x(): return [0,2]integrate.nquad(f,[limits_y,limits_z,limits_x])这是我的程序……写完之后显示错误:" limits_z takes 0 positional arguments but 1 was given "
2 回答
牧羊人nacy
TA贡献1862条经验 获得超7个赞
该文档说您有两个选择limits_z
(以及所有其他限制)
通过元组
(start, end)
传递一个可调用的(就像你一样)。如果您传递一个可调用对象,它将使用所有集成参数进行调用。这就是函数所做的,因为你的
limit_z
函数不接受参数,你会得到一个错误
因此,最简单的方法是将其设置为变量
limits_z = [0,2*np.pi]
PIPIONE
TA贡献1829条经验 获得超9个赞
您的函数签名不正确。f想要三个,limits_z想要一个参数。恩夸德
我添加了一个未使用的参数,称为dump。
from scipy import integrate
import numpy as np
def f(x,z,dump):
return (3*x**2 + 3*z**2)**0.5
def limits_y(x,z):
return [(2*x**2+2*z**2),8]
def limits_z(dump):
return [0,2*np.pi]
def limits_x():
return [0,2]
print(integrate.nquad(f,[limits_y,limits_z,limits_x]))
添加回答
举报
0/150
提交
取消