python - Scipy nquad 给出错误的输出

标签 python scipy

我正在尝试编写代码来解决

从1到2的积分从0到x的积分,xy^2 dydx = 31/15

我还使用 Wolfram|Alpha 验证了手动解决方案。但代码给出的输出为 3.1。

from scipy.integrate import nquad

def f(x, y):
    return x * y**2
def limits_y(x):
    return [0, x]
def limits_x():
    return [1, 2]

ans,err = nquad(f, [limits_y, limits_x])
print(round(ans,3))

知道为什么吗?我错过了什么吗?

最佳答案

nquad期望被积函数的第一个参数是与最内层积分对应的变量。如果您将 f 的定义更改为

def f(y, x):
    return x * y**2

然后nquad返回预期结果:

In [73]: def f(y, x):
    ...:     return x*y**2 
    ...:

In [74]: ans, err = nquad(f, [limits_y, limits_x])

In [75]: ans
Out[75]: 2.066666666666667

关于python - Scipy nquad 给出错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67164335/

相关文章:

python - SciPy curve_fit with np.log 立即返回 popt = p0, pcov = inf

python - 关于从 PyCharm 安装 SciPy

python - 稀疏矩阵的逐元素划分,忽略 0/0

python - 无法理解uniform_filter1d()函数的工作原理(从scipy.ndimage.filters导入)

python - 正则表达式在列表中分隔 slug 和 Lastname 的问题

python - 单击链接时使用python打开IE浏览器窗口

python - wandb:获取所有工件集合以及这些工件的所有别名的列表

python-2.7 - 对可变数量的参数使用 scipy curve_fit

python - 从 Python 创建独立的文本应用程序

python - 合并两个具有不同日期时间索引的数据帧