我正在尝试在所有空间上集成3个变量f(x,y,z)的函数。
当我进行少量集成时,我得到的结果大致正确。但是,当我增加积分量时,python表示积分为零。
我非常有信心,这里的问题是函数f在很小的空间区域内只是非零的,并且当积分量很大时,tplquad在该区域的采样不够。我在此链接中找到了针对1D中类似问题的答案。 scipy.integrate.quad gives wrong result on large ranges。一维解决方案是将参数“ points”传递给scipy.integrate.quad,这有助于Quad将焦点集中在积分不为零的区间上。
我的问题是; tplquad是否有与“点”类似的论点? 还是我可以指示tplquad专注于特定空间区域的其他方式?
答案 0 :(得分:1)
方法tplquad
只是nquad
的包装,它没有公开后者的所有选项。使用nquad
,它支持通过points
参数将quad
传递到opts
。一个简单的示例,所有范围都具有相同的点:
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
可以在它们之间有所不同。它们还可以依赖于其他变量,例如积分限制。请参阅文档中的示例。