我有一个Mathematica程序,使用该QuasiMonteCarlo
方法在3或4维中执行一些积分。问题是,要花费一些令人讨厌的时间,以致于某些计算无法在我们的HPC群集上提供的最大工作时间内完成。因此,我正在考虑用C ++重写该程序,我怀疑它将大大提高它的速度。
我查看了GSL文档,虽然有关于准随机序列和常规MC集成的部分,但没有任何东西可以将它们组合在一起。同样,一两个Google搜索并没有发现任何看起来像是广受信任的实现。在C ++中,经过良好测试的QMC集成实现方式有哪些选择?
为了保持一致性,如果可以选择,我宁愿使用Mathematica实现的类似于Halton-Hammersley-Wozniakowski方法的方法。
2
您可以在Stackoverflow上发布积分,然后我们可以看看发生了什么。请注意,Mathematica基于MKL来实现机器精度,这非常有效。
这不是您问题的答案,但我想知道您是否
—
Szabolcs
Compile
在将整数传递给之前尝试了它(对C代码)NIntegrate
,也就是说,它NIntegrate
很慢还是正在计算函数?但是,使用C编译函数可能需要在集群上进行一些额外的工作。
编译声音是一个很好的主意,我没想到。我会尝试的。根据我的估计,这些计算中的每一个都会对函数进行大约500万次评估,并且由于整个计算大约需要3个小时,因此每次函数评估需要2毫秒,对于某些纯数值计算而言,这似乎相当慢。
—
David Z
@ruebenko:我会记住这一点。
—
David Z
CUBA库具有许多解决低维问题的算法。它甚至具有Mathematica界面。feynarts.de/cuba
—
dls