Runge-Kutta dan Reusing Datapoints

11

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?dydx=f(x,y)f(x,y)

Astaga
sumber
Penelitian "menghafal". Anda dapat dengan mudah "membungkus" Anda f(x,y)sehingga hasilnya dapat dihafal.
2
@ S.Lott: Istilahnya adalah "memoisasi", tanpa "r".
1
@DietrichEpp: Benar-Benar Benar. Mac OS X memiliki pemeriksa ejaan baru yang agresif tanpa pengetahuan teknis sama sekali.
Apakah ini sistem urutan kedua yang disimulasikan dengan metode urutan keempat?
Berikut adalah daftar besar solusi alternatif: google.com/... Salah satu dari mereka mungkin akan membantu.

Jawaban:

8

Jika Anda pergi dari yp_1 = f(x_1, y_1)ke yp_2 = f(x_1+h, y_2)Anda akan membutuhkan poin perantara:

K1 = f(x_1+h/2, y_1+h/2*yp_1)
K2 = f(x_1+h/2, y_1+h/2*K1)
K3 = f(x_1+h, y_1+h*K2)

x_2 = x_1 + h
y_2 = y_1 + h/6*(yp_1+2*K1+2*K2+K3)
yp_2 = f(x_2, y_2)

Secara umum tidak ada poin perantara yang berguna pada langkah selanjutnya. Karena K1<> K2dan K3<> yp_2.

Ja72
sumber
4

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 NN=4N

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.

Reid.Atcheson
sumber
Saya mungkin harus sedikit lebih spesifik. Lihat Butcher untuk lebih jelasnya: Butcher, JC, dan J. Wiley. Metode Numerik untuk Persamaan Diferensial Biasa. Wiley Online Library, 2008. Referensi yang sangat baik untuk solusi ODE, dan juga menyediakan banyak bukti tidak ada untuk metode RK (misalnya tidak ada metode urutan 5 Runge-Kutta yang hanya menggunakan 4 evaluasi fungsi.)
Reid.Atcheson
1
Untuk kelengkapan: klaim Anda tidak benar untuk "metode Runge-Kutta umum" tetapi hanya untuk metode Runge-Kutta eksplisit .
David Ketcheson
Aduh! Anda benar, maaf soal itu.
Reid.Atcheson
1

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.

Paul
sumber
0

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.

GertVdE
sumber