Mengganti integrasi QuasiMonteCarlo Mathematica di C ++

12

Saya memiliki program Mathematica yang melakukan beberapa integral dalam 3 atau 4 dimensi menggunakan QuasiMonteCarlometode ini. Masalahnya adalah, butuh waktu lama yang mengganggu untuk dijalankan, ke titik di mana beberapa perhitungan ini tidak dapat diselesaikan dalam waktu kerja maksimum yang tersedia di kluster HPC kami. Jadi saya sedang mempertimbangkan untuk menulis ulang program dalam C ++, yang saya duga akan mempercepatnya dengan faktor besar.

Saya melihat dokumen GSL dan sementara ada bagian tentang urutan quasirandom dan integrasi MC biasa , saya tidak melihat apa pun yang menyatukan mereka. Juga satu atau dua pencarian Google tidak menemukan apa pun yang tampak seperti implementasi yang dipercaya luas. Apa opsi saya untuk implementasi integrasi QMC yang teruji dengan baik di C ++?

Demi kepentingan konsistensi, saya lebih suka menggunakan sesuatu yang dekat dengan metode Halton-Hammersley-Wozniakowski yang diterapkan Mathematica , jika itu merupakan pilihan.

David Z
sumber
2
Anda dapat memposting integral pada Stackoverflow dan kami dapat melihat apa yang sedang terjadi. Catatan, Mathematica didasarkan pada MKL untuk presisi mesin, yang cukup efisien.
2
Bukan jawaban untuk pertanyaan Anda, tetapi saya bertanya-tanya apakah Anda mencoba Compilememasukkan integral (ke kode C) sebelum meneruskannya NIntegrate, yaitu apakah itu NIntegrateyang lambat atau menghitung fungsi? Menggunakan fungsi-fungsi yang dikompilasi C mungkin membutuhkan sedikit kerja ekstra pada sebuah cluster.
Szabolcs
1
Mengkompilasi terdengar seperti ide yang sangat bagus, saya tidak memikirkan itu. Saya akan mencobanya. Masing-masing perhitungan mengevaluasi fungsi sekitar 5 juta kali, menurut perkiraan saya, dan karena seluruh perhitungan memakan waktu sekitar 3 jam, itu 2ms per evaluasi fungsi, yang tampaknya agak lambat untuk beberapa perhitungan numerik murni.
David Z
@ruebenko: Saya akan mengingatnya.
David Z
2
Perpustakaan CUBA memiliki sejumlah algoritma untuk masalah dimensi rendah. Bahkan memiliki antarmuka Mathematica. feynarts.de/cuba
dls

Jawaban:

1

Mengingat kelangkaan kuasi integrator Monte Carlo untuk C ++ (atau C), saya menulis implementasi saya sendiri untuk digunakan dengan GSL. Ini tidak teruji dengan baik, juga tidak mengimplementasikan algoritma Mathematica, tetapi seharusnya lebih baik daripada tidak sama sekali.

David Z
sumber