Apakah ada sumber terbuka pemecah ODE untuk C yang menggunakan tipe kompleks asli C99?

12

Saya telah menggunakan GSL sebagai dasar dari banyak simulasi saya, tetapi itu sedikit berlebihan untuk tujuan saya dan mendefinisikan tipe kompleksnya sendiri untuk alasan warisan. Daripada mengkode pemecah ODE Runge-Kutta saya sendiri, yang mungkin tidak akan sangat efisien, apakah ada pemecah ODE open source yang menggunakan tipe kompleks C99 asli?

qubyte
sumber
Saya tidak tahu di mana Anda ingin menggunakannya, tetapi secara umum RK cukup sulit untuk diterapkan dengan cara yang tidak efisien ... Apakah Anda membuat tolok ukur yang menunjukkan bahwa Anda memiliki masalah ini?
mbq
2
Tidak ada Saya belum menulis sendiri karena saya tidak ingin menemukan kembali roda. Jika saya harus maka saya akan, tetapi menemukan waktu untuk menghabiskan sesuatu yang tidak rusak tidak ada di kartu untuk saya sekarang. Jika jawaban muncul itu yang saya cari, saya tidak akan dapat benar-benar menggunakannya jika selama beberapa bulan. Selain itu, RK tidak selalu sesuai dengan yang saya butuhkan, hanya untuk apa saya tahu algoritmanya.
qubyte
Kebetulan, saya melakukan simulasi sistem kuantum kecil sebagian besar waktu. Namun tidak secara eksklusif.
qubyte
Saya akan menyarankan agar Anda menerapkan sendiri ukuran langkah RK variabel (kecuali untuk tujuan pendidikan). Ada banyak heuristik yang terlibat dalam menemukan ukuran langkah optimal.
Jitse Niesen
Seperti yang saya katakan, apa pun yang saya tulis dengan cepat akan salah, atau lambat. Apakah sangat sulit untuk mengimplementasikan RK dengan input / output yang kompleks? Saya tahu Anda bisa membaginya menjadi dua bagian nyata, tapi ini agak menjengkelkan!
qubyte

Jawaban:

10

Anda mungkin menganggapnya "berlebihan", tetapi paket integrasi waktu PETSc dapat digunakan dengan C99 complex (configure --with-scalar-type=complex). Metode yang didukung termasuk

Implementasi ini paling tepat untuk masalah dimensi tinggi seperti persamaan diferensial parsial setengah-diskrit (metode garis).

Jed Brown
sumber
Agak besar, tapi saya tidak tahu jadi +1. Idealnya apapun yang saya gunakan tidak akan lebih besar dari GSL. Saya akan melihat manual dan melihat apa yang saya pikirkan.
qubyte
Supaya jelas, Anda menautkan ke perpustakaan ini pada waktu kompilasi. Apakah itu benar?
qubyte
Tidak ada yang terkait pada waktu kompilasi. Pernah. Menautkan dilakukan setelah kompilasi (bahkan jika kompilator memanggil tautan). Anda dapat memuat perpustakaan secara dinamis, tetapi Anda akan membutuhkan header untuk mengkompilasi kode Anda untuk memanggil ke perpustakaan. Jika itu tidak menjawab pertanyaan Anda, tolong jelaskan apa yang ingin Anda lakukan.
Jed Brown
Anda tentu saja benar. Kesalahan konyol, tetapi Anda tahu apa yang saya maksud. Pertanyaan saya akan lebih baik dinyatakan sebagai "Apakah saya menautkan ke perpustakaan ini?" sebagai lawan mengkompilasi bit yang saya butuhkan pada saat yang sama dengan kode saya sendiri seperti halnya dengan Boost. Saya sadar bahwa fungsi panggilan dari perpustakaan akan membutuhkan tajuk, saya telah melakukan ini selama beberapa waktu.
qubyte
Ya, Anda mengkompilasi PETSc secara independen dari aplikasi Anda. Ini bukan header-only seperti Boost.
Jed Brown
1

Opsi lain yang Anda miliki, kecuali sistemnya agak rumit, adalah hanya mengubah dari notasi kompleks menjadi masalah dengan dua yang tidak diketahui yang mewakili bagian nyata dan imajiner. Anda kemudian dapat menggunakan pemecah ODE bernilai nyata standar.

Wolfgang Bangerth
sumber
Inilah tepatnya yang saya coba hindari. Faktanya, integrator GSL hanya nyata jika memori berfungsi, jadi inilah yang saya lakukan saat ini.
qubyte