在 Julia 中以数字方式集成多变量函数 WRT 单个变量的问题(使用 hcubature)

Issues numerically integrating a multivariable function WRT a single variable in Julia (using hcubature)

hcubature 一直为我返回零。

我有一个多变量函数,我想对一个变量进行积分。作为测试,我使用 quadgk,它只能用于 1 个变量(对其他变量进行硬编码),并且有效。

但是,当使用 hcubature 我的积分 returns 零。

这是我的最小非工作示例

psi_1D_PIB(x, n, L) = sqrt(2/L) * sin(n * π * x / L)
psi_conj_PIB(x, n, L) = conj(psi_1D_PIB(x, n, L)) * psi_1D_PIB(x, n, L) 
psi_conj_PIB(v) = psi_conj_PIB(v...)  # as per hcubature documentation, send an array
println(hcubature(psi_conj_PIB, (1.,1, 5.), (5.,1,5.))) # integrate x from 1 to 5, n from 1 to 1, and L from 5 to 5.
                                                        # first tuple is LH bounds, second is RH integration bounds

输出是 0.0, 0.0) 缺少的左括号似乎不是拼写错误

使用guadgk来计算这个本质上是单变量的积分,

psi_1D_PIB(x) = sqrt(2/5) * sin(1 * π * x / 5)
psi_conj_PIB(x) = conj(psi_1D_PIB(x)) * psi_1D_PIB(x) 
println(quadgk(psi_conj_PIB, 1., 5.))

输出为(0.9513653457281316, 2.5028679129235343e-10)

有关附加信息,这是正在集成的功能

您必须使用:

julia> println(hcubature(x->psi_conj_PIB(first(x),1,5),[1.],[5.]))
(0.9513653457281317, 2.5028645822544604e-10)

你有一个函数 f(x,y,z) 并且想要计算它在给定值 y=1 的 [1,5] 区间 x 上的积分, z=5.

正确的做法是将 R^3 函数 f(x,y,z) 限制为 R 函数:x->g(x) = f(x,1,5) 并计算 g 的积分 在 [1,5] 区间内。在 Julia 中,这是这样写的

x->psi_conj_PIB(first(x),1,5)

注意:这里必须使用额外的first(x)从一维的x向量中得到一个标量,因为您的 R^n 积分域实际上是一个简单的 R 域,由下限 = [1]、上限 = [5] 定义.

注 2: 这不等同于在 (x,y,z) 区域计算积分 [1,5]x[1,1]x[5,5]。这个 R^3 区域有一个空的“体积”:(5-1)x(1-1)x(5-5) = 4x0x0 = 0,因此无论你想要什么函数在这个区域整合它的积分是空的。这就是您在示例中进行的实验。