Tengo un programa de Mathematica que realiza algunas integrales en 3 o 4 dimensiones usando el QuasiMonteCarlo
método. El problema es que lleva mucho tiempo ejecutarlo, hasta el punto de que algunos de estos cálculos no se pueden completar en el tiempo de trabajo máximo disponible en nuestro clúster HPC. Así que estoy considerando reescribir el programa en C ++, lo que sospecho que lo acelerará en gran medida.
Miré los documentos de GSL y, aunque hay secciones sobre secuencias cuasialeatorias e integración MC regular , no veo nada que las reúna. Además, una búsqueda en Google o dos no arrojaron nada que pareciera una implementación ampliamente confiable. ¿Cuáles son mis opciones para una implementación probada de la integración de QMC en C ++?
En aras de la coherencia, preferiría usar algo similar al método Halton-Hammersley-Wozniakowski que Mathematica implementa , si esa es una opción.
fuente
Compile
la integral (al código C) antes de pasarlaNIntegrate
, es decir, ¿esNIntegrate
lenta o calcula la función? Sin embargo, el uso de funciones compiladas en C puede necesitar un poco más de trabajo en un clúster.Respuestas:
Dada la aparente escasez de integradores cuasi Monte Carlo para C ++ (o C), escribí mi propia implementación para usar con GSL. No está especialmente bien probado, ni implementa el algoritmo de Mathematica, pero debería ser mejor que nada.
fuente