Mam program Mathematica, który wykonuje niektóre całki w 3 lub 4 wymiarach przy użyciu tej QuasiMonteCarlo
metody. Problem polega na tym, że uruchomienie zajmuje denerwująco dużo czasu, do momentu, gdy niektóre z tych obliczeń nie mogą się zakończyć w maksymalnym czasie pracy dostępnym w naszym klastrze HPC. Zastanawiam się więc nad przepisaniem programu w C ++, co, jak podejrzewam, przyspieszy go w dużym stopniu.
Spojrzałem na dokumenty GSL i chociaż są sekcje na temat quasirandomowych sekwencji i regularnej integracji MC , nie widzę niczego, co je łączy. Również wyszukiwarka Google nie wykryła niczego, co wyglądałoby jak zaufane wdrożenie. Jakie są moje opcje dobrze przetestowanej implementacji integracji QMC w C ++?
W trosce o spójność wolałbym zastosować coś podobnego do metody Halton-Hammersley-Woźniakowskiego, którą Mathematica implementuje , jeśli taka jest opcja.
źródło
Compile
całkę (do kodu C) przed jej przekazaniemNIntegrate
, tj. Czy jest toNIntegrate
powolne czy obliczanie funkcji? Jednak korzystanie z funkcji skompilowanych w języku C może wymagać nieco dodatkowej pracy w klastrze.Odpowiedzi:
Biorąc pod uwagę pozorny brak quasi-integratorów Monte Carlo dla C ++ (lub C), napisałem własną implementację do użycia z GSL. Nie jest specjalnie dobrze przetestowany, ani nie implementuje algorytmu Mathematica, ale powinien być lepszy niż nic.
źródło