Remplacement de l'intégration QuasiMonteCarlo de Mathematica dans C ++

12

J'ai un programme Mathematica qui effectue des intégrales en 3 ou 4 dimensions en utilisant la QuasiMonteCarlométhode. Le problème est qu'il prend un temps énormément long pour s'exécuter, au point que certains de ces calculs ne peuvent pas se terminer dans le temps de travail maximum disponible sur notre cluster HPC. J'envisage donc de réécrire le programme en C ++, ce qui, je le soupçonne, l'accélérera considérablement.

J'ai regardé les documents GSL et bien qu'il y ait des sections sur les séquences quasi aléatoires et l' intégration régulière de MC , je ne vois rien qui les rassemble. De plus, une ou deux recherches sur Google n'ont rien révélé qui ressemblait à une implémentation largement reconnue. Quelles sont mes options pour une implémentation bien testée de l'intégration QMC en C ++?

Dans un souci de cohérence, je préférerais utiliser quelque chose de proche de la méthode Halton-Hammersley-Wozniakowski que Mathematica implémente , si c'est une option.

David Z
la source
2
vous pourriez publier l'intégrale sur Stackoverflow et nous pourrions voir ce qui se passe. Notez que Mathematica est basé sur MKL pour la précision de la machine, ce qui est assez efficace.
2
Pas une réponse à votre question, mais je me demandais si vous aviez essayé Compilel'intégrale (au code C) avant de la passer à NIntegrate, c'est- à -dire est- NIntegratece lent ou calcul de la fonction? L'utilisation de fonctions compilées en C peut cependant nécessiter un peu de travail supplémentaire sur un cluster.
Szabolcs
1
Compiler semble être une très bonne idée, je n'y avais pas pensé. Je vais essayer. Chacun de ces calculs évalue la fonction environ 5 millions de fois, selon mon estimation, et puisque le calcul complet prend environ 3 heures, c'est 2 ms par évaluation de fonction, ce qui semble plutôt lent pour certains calculs purement numériques.
David Z du
@ruebenko: Je garderai cela à l'esprit.
David Z du
2
La bibliothèque CUBA possède un certain nombre d'algorithmes pour les problèmes de faible dimension. Il a même une interface Mathematica. feynarts.de/cuba
dls

Réponses:

1

Étant donné la pénurie apparente d'intégrateurs quasi Monte Carlo pour C ++ (ou C), j'ai écrit ma propre implémentation à utiliser avec GSL. Ce n'est pas particulièrement bien testé, ni ne met en œuvre l'algorithme de Mathematica, mais il devrait être mieux que rien.

David Z
la source