Sustitución de la integración QuasiMonteCarlo de Mathematica en C ++

12

Tengo un programa de Mathematica que realiza algunas integrales en 3 o 4 dimensiones usando el QuasiMonteCarlomé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.

David Z
fuente
2
podría publicar la integral en Stackoverflow y podríamos echar un vistazo a lo que está sucediendo. Tenga en cuenta que Mathematica se basa en MKL para la precisión de la máquina, que es bastante eficiente.
2
No es una respuesta a tu pregunta, pero me preguntaba si intentaste Compilela integral (al código C) antes de pasarla NIntegrate, es decir, ¿es NIntegratelenta 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.
Szabolcs
1
Compilar suena como una muy buena idea, no había pensado en eso. Lo probaré. Cada uno de estos cálculos evalúa la función aproximadamente 5 millones de veces, según mi cálculo, y dado que el cálculo completo lleva aproximadamente 3 horas, eso es 2 ms por evaluación de la función, lo que parece bastante lento para algunos cálculos puramente numéricos.
David Z
@ruebenko: lo tendré en cuenta.
David Z
2
La Biblioteca CUBA tiene varios algoritmos para problemas de baja dimensión. Incluso tiene una interfaz de Mathematica. feynarts.de/cuba
dls

Respuestas:

1

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.

David Z
fuente