C / C ++ 'da Runge-Kutta 8'inci sıra aranıyor


10

Runge-Kutta 8. dereceden yöntemini (89) C ++ ile yazılmış bir gök mekaniği / astrodinamik uygulamasında bir Windows makinesi kullanarak kullanmak istiyorum. Bu yüzden herkes belgelenmiş ve kullanımı ücretsiz iyi bir kütüphane / uygulama biliyor mu merak ediyorum? Beklenilen herhangi bir derleme problemi olmadığı sürece C ile yazılmışsa sorun yoktur.

Şimdiye kadar bu kütüphaneyi buldum (mymathlib) . Kod iyi görünüyor, ancak lisanslama hakkında herhangi bir bilgi bulamadım.

Bildiğim ve sorunuma uyabileceği bazı alternatifleri ortaya çıkararak bana yardımcı olabilir misiniz?

EDIT:
Gerçekten beklediğim gibi pek çok C / C ++ kaynak kodları olmadığını görüyorum. Bu nedenle bir Matlab / Octave sürümü de iyi olurdu (hala ücretsiz olmalıdır).

Yanıtlar:


8

Hem GNU Scientific Library (GSL) (C) hem de Boost Odeint (C ++), 8. derece Runge-Kutta yöntemlerine sahiptir.

Her ikisi de açık kaynak kodludur ve linux ve mac altında doğrudan paket yöneticisinden erişilebilir olmalıdır. Pencereler altında, GSL yerine Boost'u kullanmanız daha kolay olacaktır.

GSL GPL lisansı altında, Boost Odeint ise Boost lisansı altında yayınlanır.

Düzenleme: Tamam, Boost Odeint Runge-Kutta 89 yöntemi, sadece 78 değil, ancak keyfi Runge-Kutta step yapmak için bir reçete sağlar.

Bununla birlikte, 8. sipariş yöntemleri oldukça yüksektir ve büyük olasılıkla sorununuz için aşırıya kaçmaktadır.

Prince-Dormand , belirli bir Runge-Kutta türünü ifade eder ve doğrudan siparişle ilgili değildir, ancak en yaygın olanı 45'tir. Önerilen ODE algoritması olan Matlabs ode45, bir Prince-Dormand 45 uygulamasıdır. Bu, Boost Odeint Runge_Kutta_Dopri5'te uygulanan algoritmanın aynısıdır .


1
Cevabın için teşekkür ederim. Tamam şimdi utanç verici, ben burada sormadan önce Boost Odeint bir göz attım ve sadece "runge_kutta_fehlberg78" bulundu. Bu doğru şey mi? Aslında pratikte kullanıldığında metondlar arasındaki farkları bilmiyorum, ama bir RK89 arıyordum (internette arama yaparken Dormand-Prince olarak da adlandırılır). Bu konudaki cevabınızı yorumlayabilir veya genişletebilir misiniz? Teşekkür ederim.
James C

Sorularınızı cevaplamak için yayın güncellendi. Prince-Dormand 45 muhtemelen problemlerinizi güzelce çözecektir.
LKlevin

15

Uzun zaman ölçeklerinde gök mekaniği yapıyorsanız, klasik bir Runge-Kutta entegratörü kullanmak enerjiyi korumaz. Bu durumda, sezgisel bir entegratör kullanmak muhtemelen daha iyi olurdu. Boost.odeint ayrıca uzun zaman aralıkları için daha iyi çalışacak olan 4. dereceden bir sezgisel Runge-Kutta şemasını uygular. GSL, anlayabildiğim kadarıyla herhangi bir sezgisel yöntem uygulamıyor.


Cevabın için teşekkür ederim. Dördüncü dereceden bir sezgisel Runge-Kutta, Dünya uydularında (düşük yörünge ve daha derin uzay yörüngesi), belki de 1-3 yörünge boyunca kullanıldığında RKF78'den daha iyi sonuçlar verir mi?
James C

@JamesC Evet. Uzun bir sürede, sezgisel yöntem çok daha iyidir.
eccstartup

@eccstartup - Burada uzun süre ne düşünürdünüz? Çünkü Güneş'in etrafında bir gezegenin bir yörüngesi ya da Dünya vb. Etrafında bir hava uydusunun birkaç yörüngesi olabilir.
James C

@JamesC Bu büyük problemi gözlemlemedim. Fakat model problemlerim için, birçok yörünge hesaplandığında, sezgisel yöntemler çok mükemmel yörüngeler verir.
eccstartup

Yani, örtük Runge-Kutta yönteminin, istediğiniz kadar daha yüksek sıraya sahip birçok sezgisel yöntem içeren bir sürümüne sahip olmanız önerilir.
eccstartup

4

bazı noktaları özetlemek gerekirse:

  1. Eğer dissapatif olmayan bir modelin uzun vadeli bir entegrasyonu ise, aradığınız şey sezgisel bir entegratördür.
  2. Aksi takdirde, bir hareket denklemi olduğu için, Runge-Kutta Nystrom yöntemleri birinci dereceden bir sisteme dönüşümden daha verimli olacaktır. DP nedeniyle yüksek dereceli RKN yöntemleri vardır. Bazı uygulamalar var, Julia'da olduğu gibi burada belgeleniyorlar ve işte MATLAB .
  3. Üst düzey Runge-Kutta yöntemlerine yalnızca yüksek hassasiyetli bir çözüm istiyorsanız ihtiyaç duyulur. Daha düşük toleranslar varsa, 5. dereceden bir RK muhtemelen daha hızlı olacaktır (aynı hata için). Bunu sık sık çözmeniz gerekiyorsa yapılacak en iyi şey, bir dizi farklı yöntemi test etmektir. 3-beden problemleri üzerindeki bu ölçütler kümesinde ( aynı hata için) yüksek dereceli RK yöntemlerinin hızda sadece marjinal bir iyileşme olduğunu görüyoruz, ancak hata -> 0 olarak iyileştirmenin Dormand'a karşı zaten> 5x'e gittiğini görebilirsiniz. -Prince 45 ( DP5) 4 basamak doğruluk değerine baktığınızda (toleranslar bunun için çok daha düşüktür. Toleranslar herhangi bir problemde sadece bir ballparktır). Toleransları çekerken, yüksek dereceli bir RK yönteminden gelen iyileştirmeyi daha da düşürdükçe, daha yüksek hassasiyetli sayılar kullanmaya başlamanız gerekebilir.
  4. Dormand-Prince sipariş 7/8 algoritması, Hairer's dop853ve DifferentialEquations.jl DP8(aynı olan) DP853 yönteminden farklı bir 8. sıra tablosuna sahiptir . Sonuncu 853 yöntemi, bir Runge-Kutta yönteminin standart tablo sürümünde uygulanamaz çünkü hata tahmincisi standart değildir. Ancak bu yöntem çok daha verimli ve eski Fehlberg 7/8 veya DP 7/8 yöntemlerini bile tavsiye etmem.
  5. Yüksek dereceli RK yöntemleri için Verner "Verimli" yöntemler altın standarttır. Bu, bağlandığım kriterlerde ortaya çıkıyor. Bunları Kendinizi Güçlendirin olarak kodlayabilir veya daha kolay istiyorsanız bunları uygulayan 2 paketten birini kullanabilirsiniz (Mathematica veya DifferentialEquations.jl).

2

Geoff Oxberry'nin uzun vadeli entegrasyon için önerdiği şeyin (sezgisel entegratörleri kullanarak) doğru olmasına rağmen, bazı durumlarda işe yaramayacağını eklemek isterim. Daha spesifik olarak, enerji tüketen güçleriniz varsa, sisteminiz artık enerjiyi korumaz ve bu nedenle bu durumda sezgisel entegratörlere başvuramazsınız. Soruyu soran kişi, düşük Dünya yörüngeleri hakkında konuşuyordu ve bu yörüngeler büyük miktarda atmosferik sürükleme sergiliyor, bu da bu tür sezgisel entegratörlerin kullanılmasını engelleyen bir yayıcı kuvvet.

Bu özel durumda (ve sezgisel entegratörleri kullanamayacağınız / erişemediğiniz / kullanmak istemediğiniz durumlarda), uzun zaman dilimleri boyunca hassasiyet ve verimliliğe ihtiyacınız varsa Bulirsch-Stoer entegratörünün kullanılmasını tavsiye ederim. Deneyime göre iyi çalışır ve Sayısal Tarifler tarafından da önerilmektedir (Press vd., 2007).


Hayır, Sayısal Tarifler önermeyin. Özellikle, çoğu durumda Burlirsch-Stoer önerilmemelidir. Bu kitapta bilinen bir sorundur. Alanındaki en iyi araştırmacılardan birtakım çürütmelere bakın: uwyo.edu/buerkle/misc/wnotnr.html . Bu konuda kıstaslar istiyorsanız, BS'in neredeyse hiç iyi olmadığını göreceğiniz Hairer'in ilk kitabına bakın. Yüksek düzen yalnızca hatalar yeterince düşük olduğunda daha etkilidir ve biz (ve diğerleri), yalnızca alt kayan nokta hassasiyeti için verimli olduğunu göstermek için oldukça tutarlı bir şekilde kıyaslama yaptık.
Chris Rackauckas

Çoğunlukla ODE'ler için kullandığımdan dolayı NR için çok fazla konuşamam, ancak bana bağlandığınız sayfadaki şikayetlerin eski olduğu ve NR'nin yazarları tarafından yanıtlarında (sayfanın sonu) etkilendiği anlaşılıyor, ama bu konu dışı. Cevabımda bahsettiğim yörüngelerin yüksek hassasiyetle (örneğin 13-14 basamaklı) uzun vadeli entegrasyonu ile ilgili olarak, uzun zamandan beri ekstrapolasyon yöntemlerinin iyi çalıştığı kanıtlanmıştır (Montenbruck & Gill'in Sayısal Entegrasyon bölümüne bakınız). Daha yeni makaleler de kullanıyor ve bana ve diğerlerine güvenilir ve verimli bir yöntem olduğunu kanıtladı.
viiv

M&G sadece dop853'e karşı test ediyor ve Verner nedeniyle olduğu gibi daha modern yüksek dereceli RK yöntemleri çok daha verimli. M&G ayrıca, zamanlamanın zayıf bir göstergesi olan fonksiyon değerlendirmelerini kullanarak ölçüm yapıyor gibi görünmektedir. Ayrıca, özellikle 2. dereceden ODE'ler için olan ve ikinci dereceye biraz uygulanan ikinci dereceden RK yöntemlerinden daha verimli olan Runge-Kutta Nystrom yöntemlerine karşı zaman vermez. 13-14 basamaklı BS muhtemelen birçok sorun için rekabet edebilir, ancak bariz bir seçim olmaktan uzaktır ve son yöntemlerle aynı fikirde olmayan bir iş hassasiyeti diyagramı görmedim.
Chris Rackauckas

M&G, RKN'yi RK ve BS ve diğerlerini RKN'ye karşı test eder (sayfa 123-132 ve 151-154) ve RK yöntemlerinden en verimli olduklarını söyler (onu alıntılarına rağmen Verner dahil değildir). BS'nin 13-14 basamakta etkili olduğu gösterildi, bu benim iddiamdı, dop853, ABM (12), Taylor ve standart RK8'e karşı test edildiğini gördüm ve iyi performans gösterdi. İtiraf etmeliyim ki RKN ile test edildiğini görmedim ama M&G'den görebildiğim kadarıyla FILG11'den uzak değil. Verner'ın RK'sıyla gerçekten ilgileniyorum ve yukarıdaki bağlantılarınıza bakacağım. Hepsini görmek için test eden bir makaleniz var mı?
viiv

Geri döndüm ve DiffEqBenchmarks.jl bir sürü kriter yeniden koştu ve odexadil değil eğilimindedir. Bu yüzden en azından 1. dereceden ODE'ler ve toleranslar için >=1e-13, ekstrapolasyon iyi görünmüyor ve genellikle yakın bile değil. Bu, yukarıdaki isteme uygundur.
Chris Rackauckas
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.