Yerel C99 karmaşık türünü kullanan C için açık kaynaklı bir ODE çözücü seti var mı?


12

GSL'yi simülasyonlarımın çoğunun temeli olarak kullanıyorum , ancak benim amacım için biraz abartılı ve eski nedenlerden dolayı kendi karmaşık türünü tanımlıyor. Muhtemelen çok verimli olmayacak olan kendi Runge-Kutta ODE çözücümü kodlamak yerine, yerel C99 karmaşık tipini kullanan herhangi bir açık kaynak ODE çözücüsü var mı?


Nerede kullanmak istediğinizi bilmiyorum, ancak genel olarak RK'nın verimli olmayan bir şekilde uygulanması oldukça zordur ... Bu sorunun olduğunu gösteren herhangi bir kıyaslama yaptınız mı?
mbq

2
Yok. Kendi yazmadım çünkü tekerleği yeniden icat etmek istemiyorum. Eğer yapmam gerekiyorsa, ama kırılmamış bir şeye harcamak için zaman bulmak şu anda benim için kartlarda değil. Bir cevap gelirse aradığım şey, eğer birkaç aydır kullanamam. Buna ek olarak, RK her zaman ihtiyacım olan şey değil, sadece algoritmayı bildiğim şey.
qubyte

Bu arada, çoğu zaman küçük kuantum sistemlerin simülasyonlarını yapıyorum. Sadece değil.
qubyte

Değişken adım büyüklüğündeki RK'yi kendiniz uygulamaya karşı tavsiye ederim (eğitim amaçlı hariç). En uygun adım büyüklüğünü bulmak için birçok buluşsal yöntem vardır.
Jitse Niesen

Dediğim gibi, hızlı yazacağım herhangi bir yanlış ya da yavaş olurdu. RK'yi karmaşık girdi / çıktı ile uygulamak özellikle zor mu? Sadece iki gerçek parçaya ayırabileceğini biliyorum, ama bu biraz sinir bozucu!
qubyte

Yanıtlar:


10

Bunu "aşırı doldurma " olarak düşünebilirsiniz, ancak PETSc'nin zaman entegrasyon paketi C99 kompleksi ile birlikte kullanılabilir (configure --with-scalar-type=complex). Desteklenen yöntemler şunları içerir:

Bu uygulamalar, yarı ayrıklaştırılmış kısmi diferansiyel denklemler (çizgi yöntemi) gibi yüksek boyutlu problemler için en uygun olanlardır.


Biraz büyük, ama bunu bilmiyordum +1. İdeal olarak, kullandığım her şey GSL'den daha büyük olmayacaktır. El kitabına bir göz atacağım ve ne düşündüğümü göreceğim.
qubyte

Açık olmak gerekirse, derleme zamanında bu kütüphanelere bağlanırsınız. Bu doğru mu?
qubyte

Derleme zamanında hiçbir şey bağlantılı değildir. Hiç. Bağlama derlendikten sonra yapılır (derleyici bağlayıcıyı çağırsa bile). Kütüphaneyi dinamik olarak yükleyebilirsiniz, ancak kodunuzu kütüphaneye çağırmak için derlemek için başlıklara ihtiyacınız olacaktır. Bu, sorunuza cevap vermiyorsa, lütfen ne yapmak istediğinizi açıklayın.
Jed Brown

Tabii ki haklısın. Aptalca bir hata, ama ne demek istediğimi biliyordun. Sorum daha iyi "Bu kütüphanelere bağlanabilir miyim?" Boost'da olduğu gibi kendi kodumla aynı zamanda ihtiyacım olan bitleri derlemenin aksine. Kütüphaneden fonksiyon çağırmanın başlık gerektireceğini biliyorum, bunu bir süredir yapıyorum.
qubyte

Evet, PETSc'yi uygulamanızdan bağımsız olarak derlersiniz. Yalnızca Boost gibi başlık değildir.
Jed Brown

1

Sistem oldukça karmaşık olmadıkça, sahip olduğunuz diğer bir seçenek, karmaşık gösterimi, gerçek ve hayali kısmı temsil eden iki bilinmeyenli bir soruna dönüştürmektir. Daha sonra standart bir gerçek değerli ODE çözücü kullanabilirsiniz.


Bu tam olarak kaçınmaya çalıştığım şey. Aslında GSL entegratörleri sadece bellek hizmet veriyorsa gerçektir, o yüzden şu anda bunu yapıyorum.
qubyte
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.