Karşılaştırma Kurulumu
Julia yazılımı DifferentialEquations.jl'de , Feagin yöntemleri de dahil olmak üzere birçok yüksek dereceli yöntem uyguladık. Bunu yöntemler listemizde görebilirsiniz ve daha sonra sağlanan tablolar olarak kullanabileceğiniz tonlarca başka var . Tüm bu yöntemler bir araya getirildiğinden, aralarında kolayca karşılaştırma yapabilirsiniz. Burada sahip olduğum karşılaştırmaları burada görebilir ve birçok farklı algoritmayı karşılaştırmanın çok basit olduğunu görebilirsiniz. Bu yüzden karşılaştırmaları çalıştırmak için birkaç dakikanızı ayırmak istiyorsanız, bunun için gidin. İşte ortaya çıkanların bir özeti.
Öncelikle, her bir kıyaslamaya bakarsanız, DP5
(Dormand-Prince Order 5) ve DP8
yöntemlerimizin Hairer Fortran kodlarından ( dopri5
ve dop853
) daha hızlı olduğunu göreceksiniz ve bu nedenle bu uygulamaların çok iyi optimize edildiğini göreceksiniz. . Bunlar , başka bir iş parçacığında belirtildiği gibi , Dormand-Prince yöntemlerinin aşırı kullanımının, yöntemlerin hala en iyi oldukları için değil, zaten yazılmış olduğu için olduğunu göstermektedir. Dolayısıyla, en iyileştirilmiş uygulamalar arasındaki gerçek karşılaştırma Tsitorous yöntemleri, Verner yöntemleri ve DifferentialEquations.jl'deki Feagin yöntemleri arasındadır.
Sonuçlar
Genel olarak, 7'den daha yüksek bir siparişin yöntemleri, seçilen toleranslar göz önüne alındığında, genellikle siparişe göre ağır basmayan ilave bir hesaplama maliyetine sahiptir. Bunun bir nedeni, daha düşük dereceli yöntemler için katsayı seçimlerinin daha optimize edilmesidir (asimtopik olarak küçük olmadığınızda daha önemli olan küçük "temel kesme hatası katsayılarına sahiptirler"). Buradaki birçok problemde Verner Efficient 6 ve 7 yöntemlerinin son derece iyi olduğunu görebilirsiniz, ancak Verner Efficient 8 gibi yöntemlerin daha düşük bir eğime sahip olabileceğini görebilirsiniz. Bunun nedeni, yüksek mertebeden "kazançların" düşük toleranslarla birleşmesidir, bu nedenle yüksek mertebeden yöntemlerin daha verimli olacağı her zaman bir tolerans vardır.
Ancak, soru şu, ne kadar düşük? İyi optimize edilmiş bir uygulamada, bu iki nedenden dolayı oldukça azalır. Birinci neden, düşük dereceli yöntemlerin FSAL (ilk önce sonuncusu ile) olarak adlandırılan bir şeyi uygulamasıdır. Bu özellik, düşük dereceli yöntemlerin bir sonraki adımda önceki adımdan itibaren bir fonksiyon değerlendirmesini yeniden kullandığı ve dolayısıyla etkili bir şekilde daha az fonksiyon değerlendirmesine sahip olduğu anlamına gelir. Bu doğru kullanılırsa, 5. dereceden bir yöntem (Tsitorous veya Dormand-Prince) gibi bir şey aslında tableaus'un önereceği 6 yerine 5 işlev değerlendirmesi alıyor. Bu, Verner 6 yöntemi için de geçerlidir.
Diğer sebep enterpolasyonlardan kaynaklanmaktadır. Çok yüksek dereceli bir yöntem kullanmanın bir nedeni, daha az adım atmak ve sadece ara değerleri enterpole etmektir. Bununla birlikte, ara değerleri elde etmek için enterpolasyon fonksiyonunun, adımı atmakta kullanılandan daha fazla fonksiyon değerlendirmesine ihtiyacı olabilir.Verner yöntemlerine bakarsanız, Sipariş 8 interpolantını almak için Sipariş 8 yöntemi için 8 ekstra işlev değerlendirmesi gerekir. Çoğu zaman düşük dereceli yöntemler bir "serbest" interpolant sağlar, örneğin çoğu 5. dereceden yöntem ücretsiz 4. dereceden enterpolasyona sahiptir (ekstra fonksiyon değerlendirmesi yoktur). Bu, ara değerlere ihtiyacınız varsa (yüksek dereceli bir yöntem kullanıyorsanız iyi bir arsa için ihtiyacınız olacak), bazı ekstra gizli maliyetler olduğu anlamına gelir. Bu enterpolasyonlu değerlerin olay işleme ve gecikmeli diferansiyel denklemleri çözme açısından gerçekten önemli olması ve neden ekstra enterpolasyon maliyet faktörlerinin olduğunu görebilirsiniz.
Peki Feagin Yöntemleri Hakkında Ne?
Böylece, Feagin yöntemlerinin karşılaştırmalı olarak şüpheli bir şekilde eksik olduğunu göreceksiniz. İyi, yakınsama testleri keyfi hassas sayılar vb. Üzerinde çalışır, ancak aslında onları iyi yapabilmeleri için oldukça saçma derecede düşük toleranslar istemeniz gerekir. Örneğin, yayınlanmamış ölçütlerde , toleranslarda Feagin14
daha iyi performans gösterdiğini Vern9
(9. sıra Verner Verimli Yöntem) buldum 1e-30
. Kaotik dinamiklere sahip uygulamalar için (Pleides veya 3 vücut astrofizik problemlerinde olduğu gibi), hassas bağımlılık nedeniyle bu miktarda doğruluk isteyebilirsiniz (kaotik sistemlerde hızlı hatalar). Ancak, çoğu insan muhtemelen çift kesinlikli kayar nokta sayılarıyla hesaplıyor ve bu tolerans alanında daha iyi performans gösterdikleri bir ölçüt bulamadım.
Ek olarak, Feagin yöntemleriyle birlikte gidecek interpolant yoktur. Yani yaptığım şey, üçüncü bir Hermite enterpolasyonunu onlara koymaktır, böylece bir kişi var olur (ve şaşırtıcı bir şekilde iyi çalışır). Bununla birlikte, standart enterpolasyon fonksiyonu yoksa, yüksek dereceli enterpolasyon elde etmek için özyinelemeli Hermite yöntemini (orta noktayı elde etmek için bu enterpolasyonu kullanın, ardından 5. dereceden enterpolasyon vb. Yapabilirsiniz) yapabilirsiniz, ancak bu çok maliyetlidir ve sonuç enterpolasyonun mutlaka düşük bir prensip kesme hatası terimi yoktur (bu nedenle dt
, gerçekten küçük olduğunda iyidir , bu da istediğimiz durumun tam tersidir!). Bu nedenle, doğruluğunuzla eşleşmesi için gerçekten iyi bir enterpolasyona ihtiyacınız varsa, en azından benzer bir şeye geri dönmeniz gerekir Vern9
.
Ekstrapolasyon Hakkında Not
Ekstrapolasyon yöntemlerinin basitçe rasgele sıralı Runge-Kutta yöntemleri oluşturmak için algoritmalar olduğunu unutmayın. Bununla birlikte, siparişleri için gerekenden daha fazla adım atıyorlar ve yüksek prensip kesme hatası katsayılarına sahipler ve bu nedenle belirli bir siparişte iyi optimize edilmiş bir RK yöntemi kadar verimli değiller. Ancak, önceki analiz göz önüne alındığında, bu, bu yöntemlerin "bilinen" RK yöntemlerinden daha iyi olacağı son derece düşük toleranslı bir alan olduğu anlamına gelir. Ama koştuğum her kıyaslamada, o kadar düşük olmadım.
Kararlılık Hakkında Not
Seçim gerçekten istikrar sorunları ile ilgisi yoktur. Aslında, DifferentialEquations.jl tableaus üzerinden giderseniz (plot(tab)
kararlılık bölgeleri için ), yöntemlerin çoğunun kuşkuyla benzer kararlılık bölgelerine sahip olduğunu göreceksiniz. Bu aslında bir seçim. Genellikle yöntemleri türetirken, yazar genellikle aşağıdakileri yapar:
- En düşük prensip kesme hatası katsayılarını (bir sonraki sipariş terimleri için katsayıları) bulun
- Sipariş kısıtlamalarına tabi
- Ve stabilite bölgesini Dormand-Prince Order 5 yöntemininkine yakın hale getirin.
Neden son durum? Peki, bu yöntem PI kontrollü adaptif kademeli seçimlerin yapılmasıyla her zaman kararlı olma eğilimindedir, bu nedenle "yeterince iyi" stabilite bölgeleri için iyi bir çubuktur. Dolayısıyla, stabilite bölgelerinin benzer olma eğilimi yoktur.
Sonuç
Her yöntem seçiminde ödünleşmeler vardır. En yüksek dereceli RK yöntemleri, hem katsayıların seçimini optimize etmek daha zor olduğundan hem de işlev değerlendirme bileşiklerinin sayısı (ve enterpolasyonlar söz konusu olduğunda daha da hızlı büyür) nedeniyle daha düşük toleranslarda etkili değildir. Ancak, tolerans yeterince düşük olursa kazanırlar, ancak gerekli toleranslar "standart" uygulamaların çok altında olabilir (yani, gerçekten sadece kaotik sistemler için geçerlidir).