Substituindo a integração QuasiMonteCarlo do Mathematica em C ++

12

Eu tenho um programa Mathematica que executa algumas integrais em 3 ou 4 dimensões usando o QuasiMonteCarlomé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.

David Z
fonte
2
você poderia postar a integral no Stackoverflow e poderíamos dar uma olhada no que está acontecendo. Observe que o Mathematica é baseado no MKL para precisão da máquina, o que é bastante eficiente.
2
Não é uma resposta para sua pergunta, mas eu queria saber se você tentou Compilea integral (para o código C) antes de passá-la para NIntegrate, 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.
Szabolcs
1
Compilar parece uma boa ideia, eu não tinha pensado nisso. Vou dar uma chance. Cada um desses cálculos avalia a função cerca de 5 milhões de vezes, pela minha estimativa, e como todo o cálculo leva cerca de 3 horas, são 2ms por avaliação da função, o que parece bastante lento para alguns cálculos puramente numéricos.
David Z
@ruebenko: Vou manter isso em mente.
David Z
2
A Biblioteca CUBA possui vários algoritmos para problemas de baixa dimensão. Ele ainda tem uma interface Mathematica. feynarts.de/cuba
dls

Respostas:

1

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.

David Z
fonte