QuasiMonteCarlo
メソッドを使用して3次元または4次元で積分を実行するMathematicaプログラムがあります。問題は、これらの計算の一部がHPCクラスターで利用可能な最大ジョブ時間で完了できない点まで、実行するのに非常に長い時間がかかることです。だから私はプログラムをC ++で書き直すことを考えています。
GSLのドキュメントを見て、準ランダムシーケンスと通常のMC統合に関するセクションはありますが、それらをまとめるものは見当たりません。また、1つか2つのGoogle検索では、広く信頼されている実装のように見えるものは何も見つかりませんでした。C ++でのQMC統合の十分にテストされた実装のオプションは何ですか?
一貫性を保つために、Mathematicaが実装するHalton-Hammersley-Wozniakowskiメソッドに近いものを使用することをお勧めします(オプションの場合)。
2
Stackoverflowに積分を投稿すると、何が起こっているのかを見ることができます。Mathematicaは機械精度のためにMKLに基づいていることに注意してください。これは非常に効率的です。
あなたの質問への答えではありませんが、
—
サボルクス
Compile
それをに渡す前に積分を(Cコードに)試みたのだろうかと思っていましたNIntegrate
。つまり、NIntegrate
遅いのですか、それとも関数を計算していますか?ただし、Cでコンパイルされた関数を使用するには、クラスターで少し余分な作業が必要になる場合があります。
コンパイルは非常に良いアイデアのように聞こえますが、私はそれを考えていませんでした。試してみます。私の推定では、これらの各計算は約500万回関数を評価します。計算全体に約3時間かかるため、関数評価ごとに2ミリ秒になります。
—
デビッドZ
@ruebenko:そのことを心に留めておきます。
—
デビッドZ
CUBAライブラリには、低次元の問題のための多くのアルゴリズムがあります。Mathematicaインターフェースも備えています。feynarts.de/cuba
—
DLS