У меня есть программа Mathematica, которая выполняет некоторые интегралы в 3 или 4 измерениях, используя QuasiMonteCarlo
метод. Проблема в том, что запуск занимает очень много времени, и некоторые из этих вычислений не могут быть завершены в течение максимального рабочего времени, доступного в нашем кластере HPC. Поэтому я рассматриваю возможность переписать программу на C ++, что, я подозреваю, значительно ускорит ее.
Я посмотрел документы GSL, и хотя есть разделы о квазислучайных последовательностях и регулярной интеграции MC , я не вижу ничего, что могло бы их объединить. Кроме того, поиск в Google или два не обнаружили ничего похожего на широко доверенную реализацию. Какие у меня варианты для хорошо протестированной реализации интеграции QMC в C ++?
В интересах последовательности, я бы предпочел использовать метод , близкий к методу Халтона-Хаммерсли-Возняковского, который реализует Mathematica , если это вариант.
источник
Compile
использовать интеграл (в C-код) перед его передачейNIntegrate
, т. Е.NIntegrate
Это медленно или вычисляет функцию? Использование C-скомпилированных функций может потребовать дополнительной работы в кластере.Ответы:
Учитывая очевидную нехватку квазиинтеграторов Монте-Карло для C ++ (или C), я написал свою собственную реализацию для использования с GSL. Он не особенно хорошо протестирован и не реализует алгоритм Mathematica, но он должен быть лучше, чем ничего.
источник