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)


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.


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.


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.


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.