Eu tenho um programa Mathematica que executa algumas integrais em 3 ou 4 dimensões usando o QuasiMonteCarlo
método O problema é que demora muito tempo para ser executado, a ponto de alguns desses cálculos não serem concluídos no tempo máximo de trabalho disponível em nosso cluster HPC. Então, eu estou pensando em reescrever o programa em C ++, que eu suspeito que irá acelerar por um grande fator.
Examinei os documentos da GSL e, embora existam seções sobre sequências quase aleatórias e integração regular do MC , não vejo nada que as junte. Além disso, uma ou duas pesquisas no Google não revelaram nada que parecesse uma implementação amplamente confiável. Quais são minhas opções para uma implementação bem testada da integração do QMC em C ++?
No interesse da consistência, eu preferiria usar algo próximo ao método Halton-Hammersley-Wozniakowski que o Mathematica implementa , se essa for uma opção.
fonte
Compile
a integral (para o código C) antes de passá-la paraNIntegrate
, ou seja,NIntegrate
é lenta ou calcula a função? O uso de funções compiladas em C pode precisar de um pouco de trabalho extra em um cluster.Respostas:
Dada a aparente escassez de quase integradores de Monte Carlo para C ++ (ou C), escrevi minha própria implementação para ser usada com a GSL. Não é especialmente bem testado, nem implementa o algoritmo do Mathematica, mas deve ser melhor que nada.
fonte