C ++에서 Mathematica의 QuasiMonteCarlo 통합 대체


12

QuasiMonteCarlo방법을 사용하여 3 또는 4 차원으로 일부 적분을 수행하는 Mathematica 프로그램이 있습니다. 문제는 HPC 클러스터에서 사용할 수있는 최대 작업 시간으로 이러한 계산 중 일부를 완료 할 수없는 시점까지 실행하는 데 시간이 오래 걸린다는 것입니다. 그래서 C ++로 프로그램을 다시 작성하는 것을 고려하고 있습니다.

나는 GSL 문서를 보았고 유사 시퀀스규칙적인 MC 통합 에 대한 섹션이 있지만 그것들을 하나로 묶는 것은 보이지 않습니다. 또한 Google 검색 중 하나 또는 두 개는 널리 신뢰할 수있는 구현처럼 보이지 않습니다. C ++에서 잘 테스트 된 QMC 통합 구현을위한 옵션은 무엇입니까?

일관성을 위해 Mathematica가 구현 하는 Halton-Hammersley-Wozniakowski 방법에 가까운 것을 사용 하는 것이 좋습니다.


2
Stackoverflow에 적분을 게시하고 무슨 일이 일어나는지 살펴볼 수 있습니다. Mathematica는 기계 정밀도를 위해 MKL을 기반으로하므로 매우 효율적입니다.

2
귀하의 질문에 대한 답변은 아니지만, Compile전달하기 전에 (C 코드에) 적분 을 시도했는지 궁금합니다 NIntegrate. 즉 NIntegrate속도가 느리거나 함수를 계산합니까? C 컴파일 된 함수를 사용하려면 클러스터에서 약간의 추가 작업이 필요할 수 있습니다.
Szabolcs

1
컴파일하는 것은 좋은 생각처럼 들리지 않습니다. 시도해 볼게요. 이러한 각 계산은 내 추정에 따라 약 5 백만 번 함수를 평가하며 전체 계산에 약 3 시간이 걸리기 때문에 함수 평가 당 2ms이므로 순수한 수치 계산에서는 다소 느립니다.
David Z

@ruebenko : 나는 그것을 명심할 것입니다.
David Z

2
CUBA 라이브러리에는 저 차원 문제에 대한 많은 알고리즘이 있습니다. Mathematica 인터페이스도 있습니다. feynarts.de/cuba
dls

답변:


1

C ++ (또는 C) 용의 몬테카를로 (Quality Monte Carlo) 통합 자들의 명백한 부족을 감안할 때, 나는 GSL과 함께 사용 하기 위한 자체 구현 을 작성 했다 . 특히 잘 테스트되지 않았으며 Mathematica의 알고리즘을 구현하지는 않지만 아무것도 아닌 것보다 낫습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.