Saya mencoba menerapkan metode Runge-Kutta urutan keempat untuk menyelesaikan urutan pertama ODE di Python yaitu . Saya mengerti bagaimana metode ini bekerja, tetapi saya mencoba untuk menulis algoritma yang efisien yang meminimalkan jumlah kali dihitung karena ini cukup mahal. Saya telah diberitahu bahwa adalah mungkin untuk menggunakan kembali poin data yang sebelumnya dihitung saat Anda menambah langkah-langkah tetapi tidak bisa melihat caranya. Adakah yang tahu bagaimana melakukan ini atau tidak mungkin?
ode
python
explicit-methods
Astaga
sumber
sumber
f(x,y)
sehingga hasilnya dapat dihafal.Jawaban:
Jika Anda pergi dari
yp_1 = f(x_1, y_1)
keyp_2 = f(x_1+h, y_2)
Anda akan membutuhkan poin perantara:Secara umum tidak ada poin perantara yang berguna pada langkah selanjutnya. Karena
K1
<>K2
danK3
<>yp_2
.sumber
Secara umum metode Runge-Kutta eksplisit dari urutan memerlukan setidaknya evaluasi fungsi , dan sama sekali tidak ada cara untuk menghindari ini. Melewati mereka membutuhkan lebih dari evaluasi fungsiN N = 4 NN N N=4 N
Jika Anda ingin menggunakan kembali evaluasi fungsi sebelumnya, Anda perlu menggunakan metode multistep seperti Adams-Bashforth.
Bagaimanapun Anda membayar untuk setiap strategi. Metode langkah tunggal membutuhkan evaluasi fungsi dalam jumlah terbesar, tetapi metode multistep memiliki kebutuhan memori terbesar.
Edit: Koreksi. Pernyataan saya hanya berlaku untuk metode eksplisit. Situasi ini kurang jelas untuk metode implisit karena jumlah tahapan tidak diterjemahkan langsung ke sejumlah evaluasi fungsi.
sumber
Saya tahu bahwa Anda menggunakan Metode Runge-Kutta untuk menyelesaikan ODE Anda, tetapi jika Anda ingin menggunakan kembali nilai-nilai lama yang dihitung untuk f (x, y), Anda mungkin ingin mempertimbangkan metode multistep, seperti Adams-Bashforth atau Adams-Moulton metode. Tentu saja, kerugian dari metode ini adalah Anda tidak dapat menggunakan adaptive time-stepping dengan mudah.
sumber
Silakan periksa metode "tertanam": tujuan dalam metode RK jenis ini adalah memiliki dua metode dengan pesanan berbeda, di mana metode pesanan tinggi menggunakan evaluasi fungsi yang sama dengan metode pesanan rendah. Ini memungkinkan untuk estimasi kesalahan yang sangat efisien. Lihat hal.165 dan selanjutnya dari "Memecahkan Persamaan Diferensial Biasa I: Masalah bukan kaku" oleh Hairer, Norsett dan Wanner. Contoh umum adalah metode Fehlberg pesanan 7 (8).
Juga, jika Anda mencari pemecahan ODE di PYTHON, periksa assimulo . Saya sudah bermain dengan paket ini selama beberapa minggu dan saya cukup senang.
sumber