1

我正在尝试在所有空间上集成 3 个变量 f(x,y,z) 的函数。

当我整合小体积时,我得到了大致正确的结果。但是,当我增加积分量时,python 说积分为零。

我相当有信心,这里的问题是函数 f 仅在空间的一小块区域中不为零,并且当积分量很大时,tplquad 在该区域上的采样不足。我在此链接上找到了 1D 中类似问题的答案;scipy.integrate.quad 在大范围内给出错误的结果。1D 中的解决方案是将参数“points”传递给 scipy.integrate.quad,这有助于 quad 专注于积分非零的区间。

我的问题是;tplquad 的“积分”是否有类似的论点?或者也许我可以通过其他方式指示 tplquad 专注于特定的空间区域?

4

1 回答 1

1

该方法tplquad只是一个包装器nquad,不会暴露后者的所有选项。使用nquad,它支持points通过参数传递quadopts一个简单的例子,所有范围都有相同的点:

import numpy as np
from scipy.integrate import nquad
f = lambda x, y, z: np.exp(-x**2-y**2-z**2)
nquad(f, [[-150, 90], [-150, 90], [-150, 90]])[0]   # 2.260158041551299e-16, wrong
nquad(f, [[-150, 90], [-150, 90], [-150, 90]], opts={"points": [-5, 5]})[0]   # 5.568327996820292, correct

一般来说,opts可以是多个集成的不同步骤的不同选项的列表,并且points它们之间可以有所不同。它们还可以取决于其他变量,例如积分限制;请参阅文档中的示例。

于 2018-07-10T13:51:09.280 回答