RUNGE-KUTTA ORDE EMPAT Dr. Eng. Supriyanto, M.Sc Lab. Komputer, Departemen Fisika, Universitas Indonesia email: supri@fisika.ui.ac.id atau supri9@gmail.com December 30, 00 Pada saat membahas metode Euler untuk penyelesaian persamaan diferensial, kita telah sampai pada kesimpulan bahwa truncation error metode Euler terus membesar seiring dengan bertambahnya iterasi. Dikaitkan dengan hal tersebut, metode Runge-Kutta Orde Empat menawarkan penyelesaian persamaan diferensial dengan pertumbuhan truncation error yang jauh lebih kecil. Persamaan-persamaan yang menyusun metode Runge-Kutta Orde Empat adalah w 0 = α k 1 = hf(t i,w i ) (1) k = hf(t i + h,w i + 1 k 1) () k 3 = hf(t i + h,w i + 1 k ) (3) k 4 = hf(t i+1,w i + k 3 ) (4) w i+1 = w i + 1 (k 1 + k + k 3 + k 4 ) (5) Contoh Diketahui persamaan diferensial y = y t + 1, 0 t, y(0) = 0, 5 dengan mengganti y menjadi w, kita bisa nyatakan f(t i,w i ) sebagai f(t i,w i ) = w i t i + 1 1
Jika N = 10, maka dan serta h = b a N = 0 10 = 0, t i = a + ih = 0 + i(0, ) t i = 0, i w 0 = 0, 5 Sekarang mari kita demonstrasikan metode Runge-Kutta Orde Empat ini. Untuk menghitung w 1, tahap-tahap perhitungannya dimulai dari menghitung k 1 k 1 = hf(t 0,w 0 ) = h(w 0 t 0 + 1) = 0, ((0, 5) (0, 0) + 1) = 0, 3 lalu menghitung k k = hf(t 0 + h,w 0 + k 1 = h[(w 0 + k 1 (t 0 + h + 1)] = 0, [(0, 5 + 0, 3 0, ) (0, 0 + + 1)] = 0, 38 dilanjutkan dengan k 3 k 3 = hf(t 0 + h,w 0 + k = h[(w 0 + k (t 0 + h + 1)] 0, 38 = 0, [(0, 5 + ) (0, 0 + 0, + 1)] = 0, 3308 kemudian k 4 k 4 = hf(t 1,w 0 + k 3 ) = h[(w 0 + k 3 ) t 1 + 1] = 0, [(0, 5 + 0, 3308) (0, ) + 1] = 0, 3581
akhirnya diperoleh w 1 w 1 = w 0 + 1 (k 1 + k + k 3 + k 4 ) = 0, 5 + 1 (0, 3 + (0, 38) + (0, 3308) + 0, 3581) = 0, 5 + 1 (0, 3 + 0, 5 + 0, 1 + 0, 3581) = 0, 89933 Dengan cara yang sama, w,w 3,w 4 dan seterusnya dapat dihitung. Tabel berikut menunjukkan hasil perhitungannya. i t i w i y i = y(t i ) w i y i 0 0,0 0,5000000 0,5000000 0,0000000 1 0, 0,89933 0,8998 0,0000053 0,4 1,1407 1,140877 0,0000114 3 0, 1,4890 1,48940 0,000018 4 0,8,1707,1795 0,00009 5 1,0,4087,408591 0,000034 1, 3,179994 3,1799415 0,0000474 7 1,4 3,733401 3,734000 0,0000599 8 1, 4,834095 4,834838 0,0000743 9 1,8 4,8150857 4,815173 0,000090 10,0 5,305470 5,305330 0,0001089 Dibandingkan dengan metode Euler, tingkat pertumbuhan truncation error, pada kolom w i y i, jauh lebih rendah sehingga metode Runge-Kutta Orde Empat lebih disukai untuk membantu menyelesaikan persamaan-diferensial-biasa. Contoh tadi tampaknya dapat memberikan gambaran yang jelas bahwa metode Runge-Kutta Orde Empat dapat menyelesaikan persamaan diferensial biasa dengan tingkat akurasi yang lebih tinggi. Namun, kalau anda jeli, ada suatu pertanyaan cukup serius yaitu apakah metode ini dapat digunakan bila pada persamaan diferensialnya tidak ada variabel t? Misalnya pada kasus berikut ini Sebuah kapasitor yang tidak bermuatan dihubungkan secara seri dengan sebuah resistor dan baterry (Figure 1). Diketahui ǫ = 1 volt, C = 5,00 µf dan R = 8,00 10 5 Ω. Saat saklar 3
Figure 1: Rangkaian RC dihubungkan (t=0), muatan belum ada (q=0). Solusi exact persamaan () adalah dq dt = ǫ R q RC () q exact = q(t) = Cǫ ( 1 e t/rc) (7) Anda bisa lihat semua suku di ruas kanan persamaan () tidak mengandung variabel t. Padahal persamaan-persamaan penyusun metode Runge-Kutta selalu mencantumkan variabel t. Apakah persamaan () tidak bisa diselesaikan dengan metode Runge-Kutta? Belum tentu. Sekarang, kita coba selesaikan, pertama kita nyatakan sehingga persamaan () dimodifikasi menjadi m 1 = ǫ = 1, 5 10 5 R m = 1 = 0, 5 RC dq dt = f(q i) = m 1 q i m t i = a + ih Jika t 0 = 0, maka a = 0, dan pada saat itu (secara fisis) diketahui q 0 = 0, 0. Lalu jika ditetapkan h = 0, 1 maka t 1 = 0, 1 dan kita bisa mulai menghitung k 1 dengan menggunakan q 0 = 0, 0, 4
walaupun t 1 tidak dilibatkan dalam perhitungan ini k 1 = hf(q 0 ) = h(m 1 q 0 m = 0, 1((1, 5 10 5 ) (0, 0)(0, 5)) = 0, 150 10 5 lalu menghitung k k = hf(q 0 + k 1 = h[(m 1 (q 0 + k 1 m )] = 0, 1[(1, 5 10 5 ((0, 0) + = 0, 14813 10 5 0, 15 10 5 )(0, 5)] dilanjutkan dengan k 3 k 3 = hf(q 0 + k = h[(m 1 (q 0 + k m )] = 0, 1[(1, 5 10 5 ((0, 0) + = 0, 14815 10 5 0, 14813 10 5 )(0, 5)] kemudian k 4 k 4 = hf(q 0 + k 3 ) = h[(m 1 (q 0 + k 3 )m ] = 0, 1[(1, 5 10 5 ((0, 0) + 0, 14815 10 5 )(0, 5)] = 0, 1430 10 5 akhirnya diperoleh q 1 q 1 = q 0 + 1 (k 1 + k + k 3 + k 4 ) = 0, 0 + 1 (0, 150 + (0, 14813) + (0, 14815) + 0, 1430) 10 5 = 0, 14814 10 5 5
Selanjutnya q dihitung. Tentu saja pada saat t, dimana t = 0,, namun sekali lagi, t tidak terlibat dalam perhitungan ini. Dimulai menghitung k 1 kembali k 1 = hf(q 1 ) = h(m 1 q 1 m = 0, 1((1, 5 10 5 ) (0, 14814 10 5 )(0, 5)) = 0, 1430 10 5 lalu menghitung k k = hf(q 1 + k 1 = h[(m 1 (q 1 + k 1 m )] = 0, 1[(1, 5 10 5 ((0, 14814 10 5 ) + = 0, 14447 10 5 0, 1430 10 5 )(0, 5)] dilanjutkan dengan k 3 k 3 = hf(q 1 + k = h[(m 1 (q 1 + k m )] = 0, 1[(1, 5 10 5 ((0, 14814 10 5 ) + = 0, 14449 10 5 0, 14447 10 5 )(0, 5)] kemudian k 4 k 4 = hf(q 1 + k 3 ) = h[(m 1 (q 1 + k 3 )m ] = 0, 1[(1, 5 10 5 ((0, 14814 10 5 ) + 0, 14449 10 5 )(0, 5)] = 0, 148 10 5 akhirnya diperoleh q q = q 1 + 1 (k 1 + k + k 3 + k 4 ) = 0, 14814 10 5 + 1 (0, 1430 + (0, 14447) + (0, 14449) + 0, 148) 10 5 = 0, 9 10 5
i t i q i q exact = q(t i ) q i q exact 0 0,0 0,00000 10 5 0,00000 10 5 0,00000 1 0,1 0,14814 10 5 0,14814 10 5 0,00000 0, 0,9 10 5 0,9 10 5 0,00000 3 0,3 0,43354 10 5 0,43354 10 5 0,00000 4 0,4 0,57098 10 5 0,57098 10 5 0,00000 5 0,5 0,7050 10 5 0,7050 10 5 0,00000 0, 0,83575 10 5 0,83575 10 5 0,00000 7 0,7 0,93 10 5 0,93 10 5 0,00000 8 0,8 1,087 10 5 1,087 10 5 0,00000 9 0,9 1,089 10 5 1,089 10 5 0,00000 10 1,0 1,37 10 5 1,37 10 5 0,00000 Dengan cara yang sama, q 3,q 4,q 5 dan seterusnya dapat dihitung. Tabel di atas menunjukkan hasil perhitungannya. Kolom q exact diperoleh dari persamaan (7). Luar biasa!! Tak ada error sama sekali. Mungkin, kalau kita buat 7 angka dibelakang koma, errornya akan terlihat. Tapi kalau anda cukup puas dengan 5 angka dibelakang koma, hasil ini sangat memuaskan. Figure memperlihatkan kurva penumpukan muatan q terhadap waktu t. Berikut ini adalah script dalam matlab yang dipakai untuk menghitung q clear all clc E=1; R=800000; C=5e-; m1=e/r; m=1/(r*c); b=0.0; a=0.0; h=0.1; n=(b-a)/h; q0=0.0; t0=0.0; for i=1:n 7
x 10 5 4 0 0 4 8 10 1 14 1 18 0 Figure : Kurva muatan q terhadap waktu t t(i)=a+i*h; end for i=1:n if i==1 k1=h*(m1-(m*q0)); k=h*(m1-(m*(q0+(k1/)))); k3=h*(m1-(m*(q0+(k/)))); k4=h*(m1-(m*(q0+k3))); q(i)=q0+(k1+(*k)+(*k3)+k4)/; else k1=h*(m1-(m*q(i-1))); k=h*(m1-(m*(q(i-1)+(k1/)))); k3=h*(m1-(m*(q(i-1)+(k/)))); k4=h*(m1-(m*(q(i-1)+k3))); q(i)=q(i-1)+(k1+(*k)+(*k3)+k4)/; end 8
end q Sampai disini mudah-mudahan jelas dan bisa dimengerti. Silakan anda coba untuk kasus yang lain, misalnya proses pembuangan (discharging) q pada rangkaian yang sama, atau bisa juga anda berlatih dengan rangkaian RL dan RLC. Saya akhiri dulu uraian saya sampai disini. 9