替换C ++中的Mathematica的QuasiMonteCarlo集成


12

我有一个Mathematica程序,使用该QuasiMonteCarlo方法在3或4维中执行一些积分。问题是,要花费一些令人讨厌的时间,以致于某些计算无法在我们的HPC群集上提供的最大工作时间内完成。因此,我正在考虑用C ++重写该程序,我怀疑它将大大提高它的速度。

我查看了GSL文档,虽然有关于准随机序列常规MC集成的部分,但没有任何东西可以将它们组合在一起。同样,一两个Google搜索并没有发现任何看起来像是广受信任的实现。在C ++中,经过良好测试的QMC集成实现方式有哪些选择?

为了保持一致性,如果可以选择,我宁愿使用Mathematica实现的类似于Halton-Hammersley-Wozniakowski方法的方法。


2
您可以在Stackoverflow上发布积分,然后我们可以看看发生了什么。请注意,Mathematica基于MKL来实现机器精度,这非常有效。

2
这不是您问题的答案,但我想知道您是否Compile在将整数传递给之前尝试了它(对C代码)NIntegrate,也就是说,它NIntegrate很慢还是正在计算函数?但是,使用C编译函数可能需要在集群上进行一些额外的工作。
Szabolcs

1
编译声音是一个很好的主意,我没想到。我会尝试的。根据我的估计,这些计算中的每一个都会对函数进行大约500万次评估,并且由于整个计算大约需要3个小时,因此每次函数评估需要2毫秒,对于某些纯数值计算而言,这似乎相当慢。
David Z

@ruebenko:我会记住这一点。
David Z

2
CUBA库具有许多解决低维问题的算法。它甚至具有Mathematica界面。feynarts.de/cuba
dls

Answers:


1

考虑到C ++(或C)的准蒙特卡洛积分器的明显匮乏,我编写了自己的实现以与GSL一起使用。它没有经过特别测试,也没有实现Mathematica的算法,但是总比没有好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.