Ich habe ein Mathematica-Programm, das mit dieser QuasiMonteCarlo
Methode einige Integrale in 3 oder 4 Dimensionen ausführt . Das Problem ist, dass die Ausführung so lange dauert, bis einige dieser Berechnungen nicht mehr in der auf unserem HPC-Cluster verfügbaren maximalen Auftragszeit ausgeführt werden können. Deshalb überlege ich mir, das Programm in C ++ umzuschreiben, was es meiner Meinung nach um einen großen Faktor beschleunigen wird.
Ich habe mir die GSL-Dokumente angesehen und obwohl es Abschnitte zu zufälligen Sequenzen und zur regulären MC-Integration gibt , sehe ich nichts, was sie zusammenbringt. Auch bei ein oder zwei Google-Suchvorgängen wurde nichts gefunden, was nach einer allgemein vertrauenswürdigen Implementierung aussah. Was sind meine Optionen für eine bewährte Implementierung der QMC-Integration in C ++?
Im Interesse der Konsistenz würde ich es vorziehen, etwas in der Nähe der Halton-Hammersley-Wozniakowski-Methode zu verwenden , die Mathematica implementiert , wenn dies eine Option ist.
quelle
Compile
das Integral (in C-Code) zu schreiben, bevor Sie es übergeben. IstNIntegrate
esNIntegrate
also langsam oder berechnet es die Funktion? Die Verwendung von C-kompilierten Funktionen erfordert möglicherweise zusätzliche Arbeit in einem Cluster.Antworten:
Angesichts des offensichtlichen Mangels an Monte-Carlo-Integratoren für C ++ (oder C) habe ich meine eigene Implementierung geschrieben , die mit GSL verwendet werden kann. Es ist nicht besonders gut getestet, noch implementiert es den Algorithmus von Mathematica, aber es sollte besser als nichts sein.
quelle