Sostituendo l'integrazione QuasiMonteCarlo di Mathematica in C ++


12

Ho un programma Mathematica che esegue alcuni integrali in 3 o 4 dimensioni usando il QuasiMonteCarlometodo. Il problema è che richiede un tempo fastidiosamente lungo per essere eseguito, al punto che alcuni di questi calcoli non possono essere completati nel tempo di lavoro massimo disponibile sul nostro cluster HPC. Quindi sto pensando di riscrivere il programma in C ++, che sospetto possa accelerarlo di molto.

Ho esaminato i documenti GSL e mentre ci sono sezioni sulle sequenze quasirandom e la normale integrazione MC , non vedo nulla che li unisca . Anche una o due ricerche su Google non hanno mostrato nulla che sembrasse un'implementazione ampiamente affidabile. Quali sono le mie opzioni per un'implementazione ben collaudata dell'integrazione QMC in C ++?

Nell'interesse della coerenza, preferirei usare qualcosa di simile al metodo Halton-Hammersley-Wozniakowski che Mathematica implementa , se questa è un'opzione.


2
potresti pubblicare l'integrale su StackOverflow e dare un'occhiata a quello che sta succedendo. Nota, Mathematica si basa su MKL per la precisione della macchina, che è abbastanza efficiente.

2
Non è una risposta alla tua domanda, ma mi chiedevo se hai provato Compilel'integrale (al codice C) prima di passarlo a NIntegrate, cioè è NIntegratelento o sta calcolando la funzione? L'uso delle funzioni compilate in C potrebbe tuttavia richiedere un po 'di lavoro in più su un cluster.
Szabolcs,

1
Compilare sembra un'ottima idea, non ci avevo pensato. Lo proverò. Ciascuno di questi calcoli valuta la funzione circa 5 milioni di volte, secondo la mia stima, e poiché l'intero calcolo richiede circa 3 ore, sono 2 ms per valutazione della funzione, che sembra piuttosto lento per alcuni calcoli puramente numerici.
David Z,

@ruebenko: lo terrò a mente.
David Z,

2
La libreria CUBA ha una serie di algoritmi per problemi a bassa dimensione. Ha anche un'interfaccia Mathematica. feynarts.de/cuba
dls

Risposte:


1

Data l'apparente carenza di integratori quasi Monte Carlo per C ++ (o C), ho scritto la mia implementazione da utilizzare con GSL. Non è particolarmente ben testato, né implementa l'algoritmo di Mathematica, ma dovrebbe essere meglio di niente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.