Pengaturan Benchmark
Dalam perangkat lunak Julia, DifferentialEquations.jl, kami menerapkan banyak metode tingkat tinggi, termasuk metode Feagin. Anda dapat melihatnya di daftar metode kami , dan kemudian ada banyak metode lain yang dapat Anda gunakan sebagai tableaus yang disediakan . Karena semua metode ini disatukan, Anda dapat dengan mudah membandingkannya. Anda dapat melihat tolok ukur yang saya miliki online di sini , dan melihat bahwa sangat mudah untuk membandingkan berbagai algoritma. Jadi, jika Anda ingin mengambil beberapa menit untuk menjalankan benchmark, lakukan. Berikut ringkasan dari apa yang keluar.
Pertama, penting untuk dicatat bahwa, jika Anda melihat masing-masing tolok ukur, Anda akan melihat bahwa kami DP5
(Dormand-Prince Order 5) dan DP8
metode kami lebih cepat daripada kode Hairer Fortran ( dopri5
dan dop853
), dan implementasi ini dioptimalkan dengan sangat baik . Ini menunjukkan bahwa sebagaimana dicatat di utas lain , penggunaan metode Dormand-Prince yang berlebihan adalah karena metode tersebut sudah ditulis, bukan karena mereka masih yang terbaik. Jadi perbandingan nyata antara implementasi yang paling optimal adalah antara metode Tsitorous, metode Verner, dan metode Feagin dari DifferentialEquations.jl.
Hasil
Secara umum, metode pesanan yang lebih tinggi dari 7 memiliki biaya komputasi tambahan yang biasanya tidak melebihi pesanan, mengingat toleransi yang dipilih. Salah satu alasannya adalah bahwa pilihan koefisien untuk metode pesanan lebih rendah lebih dioptimalkan (mereka memiliki "koefisien kesalahan pemangkasan prinsip" kecil, yang lebih penting ketika Anda tidak kecil secara asimptopik). Anda dapat melihat bahwa dalam banyak masalah seperti di sini metode Verner Efficient 6 dan 7 bekerja sangat baik, tetapi metode seperti Verner Efficient 8 dapat memiliki kemiringan yang lebih rendah. Ini karena "keuntungan" dari tatanan yang lebih tinggi bertambah dengan toleransi yang lebih rendah, sehingga selalu ada toleransi di mana metode tatanan yang lebih tinggi akan lebih efisien.
Namun, pertanyaannya kemudian, seberapa rendah? Dalam implementasi yang dioptimalkan dengan baik, itu menjadi sangat rendah karena dua alasan. Alasan pertama adalah karena metode urutan rendah menerapkan sesuatu yang disebut FSAL (pertama sama dengan yang terakhir). Properti ini berarti bahwa metode urutan rendah menggunakan kembali evaluasi fungsi dari langkah sebelumnya di langkah berikutnya, dan dengan demikian secara efektif memiliki satu evaluasi fungsi yang kurang. Jika ini digunakan dengan benar, maka sesuatu seperti metode urutan ke-5 (Tsitorous atau Dormand-Prince) sebenarnya mengambil 5 evaluasi fungsi daripada 6 yang disarankan oleh tablo. Ini juga berlaku untuk metode Verner 6.
Alasan lainnya adalah karena interpolasi. Salah satu alasan untuk menggunakan metode pesanan sangat tinggi adalah untuk mengambil langkah lebih sedikit dan hanya menginterpolasi nilai perantara. Namun, untuk mendapatkan nilai perantara, fungsi interpolasi mungkin memerlukan lebih banyak evaluasi fungsi daripada yang digunakan untuk mengambil langkah. Jika Anda melihat metode Verner, diperlukan 8 evaluasi fungsi tambahan untuk metode Order 8 untuk mendapatkan interpolant Order 8. Banyak kali metode pesanan rendah memberikan interpolasi "gratis", misalnya, sebagian besar metode pesanan 5 memiliki interpolasi pesanan keempat gratis (tanpa evaluasi fungsi tambahan). Jadi ini berarti bahwa jika Anda memerlukan nilai perantara (yang Anda perlukan untuk plot yang bagus jika Anda menggunakan metode pesanan tinggi), ada beberapa biaya tambahan tersembunyi. Faktor dalam fakta bahwa nilai-nilai yang diinterpolasi ini sangat penting untuk penanganan kejadian dan penyelesaian persamaan diferensial keterlambatan dan Anda melihat mengapa faktor biaya interpolasi tambahan masuk.
Jadi Bagaimana Dengan Metode Feagin?
Jadi, Anda akan melihat bahwa metode Feagin secara mencurigakan hilang dari tolok ukur. Mereka baik-baik saja, tes konvergensi bekerja pada angka presisi yang berubah-ubah, dll., Tetapi untuk benar-benar membuatnya bekerja dengan baik, Anda perlu meminta toleransi yang sangat rendah. Sebagai contoh, saya menemukan dalam tolok ukur yang tidak dipublikasikan bahwa Feagin14
kinerjanya lebih baik Vern9
(urutan ke-9 Verner Efficient Method) pada toleransi seperti 1e-30
. Untuk aplikasi dengan dinamika kacau (seperti pada Pleides atau masalah astrofisika 3-tubuh), Anda mungkin menginginkan jumlah akurasi ini karena ketergantungan yang sensitif (kesalahan dalam sistem kacau bertambah cepat). Namun, kebanyakan orang mungkin menghitung dengan angka floating point presisi ganda, dan saya belum menemukan patokan di mana mereka mengungguli dalam domain toleransi ini.
Selain itu, tidak ada interpolant untuk mengikuti metode Feagin. Jadi apa yang saya lakukan adalah hanya menempatkan interpolasi Hermite urutan ketiga pada mereka sehingga ada satu (dan itu bekerja dengan sangat baik). Namun, jika tidak ada fungsi interpolasi standar, Anda dapat melakukan metode Hermite rekursif (gunakan interpolasi ini untuk mendapatkan titik tengah, kemudian lakukan interpolasi urutan ke-5, dll.) Untuk mendapatkan interpolasi urutan tinggi, tetapi ini sangat mahal dan hasilnya interpolasi tidak harus memiliki istilah kesalahan pemangkasan prinsip yang rendah (jadi bagus jika dt
benar-benar kecil, yang merupakan kebalikan dari kasus yang kita inginkan!). Jadi jika Anda membutuhkan interpolasi yang benar-benar bagus untuk mencocokkan keakuratan Anda, Anda harus setidaknya kembali ke sesuatu seperti Vern9
.
Catatan Tentang Ekstrapolasi
Perhatikan bahwa metode ekstrapolasi hanyalah algoritma untuk menghasilkan metode Runge-Kutta pesanan acak. Namun, untuk pesanan mereka, mereka mengambil lebih banyak langkah daripada yang diperlukan dan memiliki koefisien kesalahan pemangkasan prinsip tinggi, sehingga mereka tidak seefisien metode RK yang dioptimalkan dengan baik pada pesanan tertentu. Tetapi mengingat analisis sebelumnya, ini berarti bahwa ada domain dengan toleransi sangat rendah di mana metode ini akan melakukan lebih baik daripada metode RK "dikenal". Tapi di setiap benchmark yang saya jalankan, sepertinya saya belum mendapatkan yang terendah.
Catatan Tentang Stabilitas
Pilihannya benar-benar tidak ada hubungannya dengan masalah stabilitas. Bahkan, jika Anda pergi melalui tableaus DifferentialEquations.jl (Anda bisa hanya plot(tab)
untuk daerah stabilitas) Anda akan melihat bahwa sebagian besar metode memiliki daerah stabilitas yang mencurigakan serupa. Ini sebenarnya pilihan. Biasanya ketika mendapatkan metode, penulis biasanya melakukan hal berikut:
- Temukan koefisien kesalahan pemotongan prinsip terendah (yaitu, koefisien untuk istilah pesanan berikutnya)
- Tunduk pada batasan pesanan
- Dan membuat wilayah stabilitas dekat dengan metode Dormand-Prince Order 5.
Kenapa kondisi terakhir? Yah, karena metode itu cenderung selalu stabil dengan cara pilihan langkah-langkah adaptif yang dikontrol PI dilakukan, jadi itu bar yang bagus untuk wilayah stabilitas "cukup baik". Jadi bukan kebetulan kalau daerah stabilitas cenderung sama.
Kesimpulan
Ada pengorbanan dalam setiap pilihan metode. Metode RK urutan tertinggi tidak seefisien pada toleransi yang lebih rendah baik karena lebih sulit untuk mengoptimalkan pilihan koefisien, dan karena jumlah fungsi mengevaluasi senyawa (dan tumbuh lebih cepat ketika interpolasi terlibat). Namun, jika toleransi menjadi cukup rendah mereka menang, tetapi toleransi yang diperlukan bisa jauh di bawah aplikasi "standar" (yaitu benar-benar hanya berlaku untuk sistem yang kacau).