Замена интеграции Mathematica QuasiMonteCarlo в C ++

12

У меня есть программа Mathematica, которая выполняет некоторые интегралы в 3 или 4 измерениях, используя QuasiMonteCarloметод. Проблема в том, что запуск занимает очень много времени, и некоторые из этих вычислений не могут быть завершены в течение максимального рабочего времени, доступного в нашем кластере HPC. Поэтому я рассматриваю возможность переписать программу на C ++, что, я подозреваю, значительно ускорит ее.

Я посмотрел документы GSL, и хотя есть разделы о квазислучайных последовательностях и регулярной интеграции MC , я не вижу ничего, что могло бы их объединить. Кроме того, поиск в Google или два не обнаружили ничего похожего на широко доверенную реализацию. Какие у меня варианты для хорошо протестированной реализации интеграции QMC в C ++?

В интересах последовательности, я бы предпочел использовать метод , близкий к методу Халтона-Хаммерсли-Возняковского, который реализует Mathematica , если это вариант.

Дэвид З
источник
2
Вы можете опубликовать интеграл на Stackoverflow, и мы могли бы посмотреть, что происходит. Обратите внимание, что Mathematica основана на MKL для точности станка, что довольно эффективно.
2
Не ответ на ваш вопрос, но мне было интересно, пытались ли вы Compileиспользовать интеграл (в C-код) перед его передачей NIntegrate, т. Е. NIntegrateЭто медленно или вычисляет функцию? Использование C-скомпилированных функций может потребовать дополнительной работы в кластере.
Сабольч
1
Сборка звучит как очень хорошая идея, я не думал об этом. Я попробую. По моим оценкам, каждое из этих вычислений оценивает функцию примерно в 5 миллионов раз, и, поскольку на все вычисления уходит около 3 часов, это оценка составляет 2 мс на функцию, что кажется довольно медленным для некоторых чисто числовых вычислений.
Дэвид З
@ruebenko: Я буду иметь это в виду.
Дэвид З
2
Библиотека CUBA имеет ряд алгоритмов для задач низкой размерности. Он даже имеет интерфейс Mathematica. feynarts.de/cuba
dls

Ответы:

1

Учитывая очевидную нехватку квазиинтеграторов Монте-Карло для C ++ (или C), я написал свою собственную реализацию для использования с GSL. Он не особенно хорошо протестирован и не реализует алгоритм Mathematica, но он должен быть лучше, чем ничего.

Дэвид З
источник