Ersetzen der QuasiMonteCarlo-Integration von Mathematica in C ++


12

Ich habe ein Mathematica-Programm, das mit dieser QuasiMonteCarloMethode 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.


2
Sie könnten das Integral auf Stackoverflow posten und wir könnten einen Blick darauf werfen, was los ist. Beachten Sie, dass die Mathematica auf MKL basiert, um die Maschinengenauigkeit zu verbessern, was sehr effizient ist.

2
Keine Antwort auf Ihre Frage, aber ich habe mich gefragt, ob Sie versucht haben, Compiledas Integral (in C-Code) zu schreiben, bevor Sie es übergeben. Ist NIntegratees NIntegratealso langsam oder berechnet es die Funktion? Die Verwendung von C-kompilierten Funktionen erfordert möglicherweise zusätzliche Arbeit in einem Cluster.
Szabolcs

1
Das Kompilieren klingt nach einer sehr guten Idee, daran hatte ich nicht gedacht. Ich werde es versuchen. Jede dieser Berechnungen wertet die Funktion nach meiner Schätzung ungefähr 5 Millionen Mal aus, und da die gesamte Berechnung ungefähr 3 Stunden dauert, sind das 2 ms pro Funktionsbewertung, was für einige rein numerische Berechnungen ziemlich langsam zu sein scheint.
David Z

@ruebenko: Ich werde das im Hinterkopf behalten.
David Z

2
Die CUBA Library verfügt über eine Reihe von Algorithmen für niedrigdimensionale Probleme. Es hat sogar eine Mathematica-Schnittstelle. feynarts.de/cuba
dls 20.03.12

Antworten:


1

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.