julia - 如何在 Julia 中使用 vegas 计算具有无限边界的高维多重积分

标签 julia

我正在尝试使用 Julia(>1400 维)计算高维积分。因此,我尝试使用函数 vegas 来执行此操作,因为它大概可以计算高维积分。然而,vegas 假设积分域是 [0,1]^n,但我的积分超过了 R^n。 documentation维加斯的建议改变了变量,但我无法让它在多个维度上工作。

因此,如果我在 Julia 中输入以下二维积分:

using LinearAlgebra, Cuba
multinormal(x,μ,Σ) = det(2*π*Σ)^(-1/2)*exp(-1/2*(x-μ)'*inv(Σ)*(x-μ))
vegas((x,f)->f=multinormal(x,[0;0],[1 0;0 1]),2)

我得到了结果

Component:
 1: 0.0 ± 7.025180405943273e-18 (prob.: -999.0)
Integrand evaluations: 1000
Number of subregions:  0
Note: The desired accuracy was reached

假设积分超过 [0,1]^2。

尝试在 [0,infinity)^2 上计算相同的积分,我尝试了建议的变量变化 here作为

vegas((x,f)->f=multinormal(x./(1 .- x),[0;0],[1 0;0 1])./(1 .-x).^2,2)

这给了我结果

Component:
 1: 0.0 ± 7.025180405943273e-18 (prob.: -999.0)
Integrand evaluations: 1000
Number of subregions:  0
Note: The desired accuracy was reached

但结果应该是 0.5 而不是 0。

如何使用 vegas 计算具有无限积分极限的多元正态分布的积分?

最佳答案

如果您使用 Quadrature.jl,它会自动为您执行必要的变量更改。然后你只需使用 [-Inf,Inf] 边界。查看测试中的示例:

https://github.com/SciML/Quadrature.jl/blob/master/test/inf_integral_tests.jl

关于julia - 如何在 Julia 中使用 vegas 计算具有无限边界的高维多重积分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71912576/

相关文章:

Julia:反向迭代

julia - 以编程方式生成的函数,如何定义doc?

Julia:什么是 Julia 中的 Array 中的 undef

function - 有效使用函数作为参数

macros - Julia ·朗 : Change value of module level global at import time

julia - Julia 的范围集合

julia - Julia 中向量的唯一元素的索引

string - 如何在 Julia 中用零填充格式化整数?

python - Emacs 终端列宽(julia/python shell)

julia - 如何在 Mac OS X 中升级到 Julia 0.7