Anda di halaman 1dari 9

RUNGE-KUTTA ORDE EMPAT

Dr. Eng. Supriyanto, M.Sc


Lab. Komputer, Departemen Fisika, Universitas Indonesia
email: supri@sika.ui.ac.id atau supri92@gmail.com
December 30, 2006
Pada saat membahas metode Euler untuk penyelesaian persamaan diferensial, kita telah sampai
pada kesimpulan bahwa truncation error metode Euler terus membesar seiring dengan bertam-
bahnya 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
2
= hf(t
i
+
h
2
, w
i
+
1
2
k
1
) (2)
k
3
= hf(t
i
+
h
2
, w
i
+
1
2
k
2
) (3)
k
4
= hf(t
i+1
, w
i
+ k
3
) (4)
w
i+1
= w
i
+
1
6
(k
1
+ 2k
2
+ 2k
3
+ k
4
) (5)
Contoh
Diketahui persamaan diferensial
y

= y t
2
+ 1, 0 t 2, 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
2
i
+ 1
1
Jika N = 10, maka
h =
b a
N
=
2 0
10
= 0, 2
dan
t
i
= a + ih = 0 + i(0, 2) t
i
= 0, 2i
serta
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
2
0
+ 1)
= 0, 2((0, 5) (0, 0)
2
+ 1)
= 0, 3
lalu menghitung k
2
k
2
= hf(t
0
+
h
2
, w
0
+
k
1
2
)
= h[(w
0
+
k
1
2
) (t
0
+
h
2
)
2
+ 1)]
= 0, 2[(0, 5 +
0, 3
2
) (0, 0 +
0, 2
2
)
2
+ 1)]
= 0, 328
dilanjutkan dengan k
3
k
3
= hf(t
0
+
h
2
, w
0
+
k
2
2
)
= h[(w
0
+
k
2
2
) (t
0
+
h
2
)
2
+ 1)]
= 0, 2[(0, 5 +
0, 328
2
) (0, 0 +
0, 2
2
)
2
+ 1)]
= 0, 3308
kemudian k
4
k
4
= hf(t
1
, w
0
+ k
3
)
= h[(w
0
+ k
3
) t
2
1
+ 1]
= 0, 2[(0, 5 + 0, 3308) (0, 2)
2
+ 1]
= 0, 35816
2
akhirnya diperoleh w
1
w
1
= w
0
+
1
6
(k
1
+ 2k
2
+ 2k
3
+ k
4
)
= 0, 5 +
1
6
(0, 3 + 2(0, 328) + 2(0, 3308) + 0, 35816)
= 0, 5 +
1
6
(0, 3 + 0, 656 + 0, 6616 + 0, 35816)
= 0, 8292933
Dengan cara yang sama, w
2
, 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,2 0,8292933 0,8292986 0,0000053
2 0,4 1,2140762 1,2140877 0,0000114
3 0,6 1,6489220 1,6489406 0,0000186
4 0,8 2,1272027 2,1272295 0,0000269
5 1,0 2,6408227 2,6408591 0,0000364
6 1,2 3,1799942 3,1799415 0,0000474
7 1,4 3,7323401 3,7324000 0,0000599
8 1,6 4,2834095 4,2834838 0,0000743
9 1,8 4,8150857 4,8151763 0,0000906
10 2,0 5,3054720 5,3053630 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 = 12 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).
dq
dt
=

R

q
RC
(6)
Solusi exact persamaan (6) adalah
q
exact
= q(t) = C

1 e
t/RC

(7)
Anda bisa lihat semua suku di ruas kanan persamaan (6) tidak mengandung variabel t. Padahal
persamaan-persamaan penyusun metode Runge-Kutta selalu mencantumkan variabel t. Apakah
persamaan (6) tidak bisa diselesaikan dengan metode Runge-Kutta? Belum tentu.
Sekarang, kita coba selesaikan, pertama kita nyatakan
m
1
=

R
= 1, 5 10
5
m
2
=
1
RC
= 0, 25
sehingga persamaan (6) dimodikasi menjadi
dq
dt
= f(q
i
) = m
1
q
i
m
2
t
i
= a + ih
Jika t
0
= 0, maka a = 0, dan pada saat itu (secara sis) 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
2
)
= 0, 1((1, 5 10
5
) (0, 0)(0, 25))
= 0, 150 10
5
lalu menghitung k
2
k
2
= hf(q
0
+
k
1
2
)
= h[(m
1
(q
0
+
k
1
2
)m
2
)]
= 0, 1[(1, 5 10
5
((0, 0) +
0, 15 10
5
2
)(0, 25)]
= 0, 14813 10
5
dilanjutkan dengan k
3
k
3
= hf(q
0
+
k
2
2
)
= h[(m
1
(q
0
+
k
2
2
)m
2
)]
= 0, 1[(1, 5 10
5
((0, 0) +
0, 14813 10
5
2
)(0, 25)]
= 0, 14815 10
5
kemudian k
4
k
4
= hf(q
0
+ k
3
)
= h[(m
1
(q
0
+ k
3
)m
2
)]
= 0, 1[(1, 5 10
5
((0, 0) + 0, 14815 10
5
)(0, 25)]
= 0, 14630 10
5
akhirnya diperoleh q
1
q
1
= q
0
+
1
6
(k
1
+ 2k
2
+ 2k
3
+ k
4
)
= 0, 0 +
1
6
(0, 150 + 2(0, 14813) + 2(0, 14815) + 0, 14630) 10
5
= 0, 14814 10
5
5
Selanjutnya q
2
dihitung. Tentu saja pada saat t
2
, dimana t
2
= 0, 2, namun sekali lagi, t
2
tidak
terlibat dalam perhitungan ini. Dimulai menghitung k
1
kembali
k
1
= hf(q
1
)
= h(m
1
q
1
m
2
)
= 0, 1((1, 5 10
5
) (0, 14814 10
5
)(0, 25))
= 0, 14630 10
5
lalu menghitung k
2
k
2
= hf(q
1
+
k
1
2
)
= h[(m
1
(q
1
+
k
1
2
)m
2
)]
= 0, 1[(1, 5 10
5
((0, 14814 10
5
) +
0, 14630 10
5
2
)(0, 25)]
= 0, 14447 10
5
dilanjutkan dengan k
3
k
3
= hf(q
1
+
k
2
2
)
= h[(m
1
(q
1
+
k
2
2
)m
2
)]
= 0, 1[(1, 5 10
5
((0, 14814 10
5
) +
0, 14447 10
5
2
)(0, 25)]
= 0, 14449 10
5
kemudian k
4
k
4
= hf(q
1
+ k
3
)
= h[(m
1
(q
1
+ k
3
)m
2
)]
= 0, 1[(1, 5 10
5
((0, 14814 10
5
) + 0, 14449 10
5
)(0, 25)]
= 0, 14268 10
5
akhirnya diperoleh q
2
q
2
= q
1
+
1
6
(k
1
+ 2k
2
+ 2k
3
+ k
4
)
= 0, 14814 10
5
+
1
6
(0, 14630 + 2(0, 14447) + 2(0, 14449) + 0, 14268) 10
5
= 0, 29262 10
5
6
i t
i
q
i
q
exact
= q(t
i
) |q
i
q
exact
|
0 0,0 0,0000010
5
0,0000010
5
0,00000
1 0,1 0,1481410
5
0,1481410
5
0,00000
2 0,2 0,2926210
5
0,2926210
5
0,00000
3 0,3 0,4335410
5
0,4335410
5
0,00000
4 0,4 0,5709810
5
0,5709810
5
0,00000
5 0,5 0,7050210
5
0,7050210
5
0,00000
6 0,6 0,8357510
5
0,8357510
5
0,00000
7 0,7 0,9632610
5
0,9632610
5
0,00000
8 0,8 1,087610
5
1,087610
5
0,00000
9 0,9 1,208910
5
1,208910
5
0,00000
10 1,0 1,327210
5
1,327210
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 2 memperlihatkan kurva penumpukan muatan q terhadap waktu t.
Berikut ini adalah script dalam matlab yang dipakai untuk menghitung q
clear all
clc
E=12;
R=800000;
C=5e-6;
m1=E/R;
m2=1/(R
*
C);
b=20.0;
a=0.0;
h=0.1;
n=(b-a)/h;
q0=0.0;
t0=0.0;
for i=1:n
7
0 2 4 6 8 10 12 14 16 18 20
0
2
4
6
x 10
5
Figure 2: Kurva muatan q terhadap waktu t
t(i)=a+i
*
h;
end
for i=1:n
if i==1
k1=h
*
(m1-(m2
*
q0));
k2=h
*
(m1-(m2
*
(q0+(k1/2))));
k3=h
*
(m1-(m2
*
(q0+(k2/2))));
k4=h
*
(m1-(m2
*
(q0+k3)));
q(i)=q0+(k1+(2
*
k2)+(2
*
k3)+k4)/6;
else
k1=h
*
(m1-(m2
*
q(i-1)));
k2=h
*
(m1-(m2
*
(q(i-1)+(k1/2))));
k3=h
*
(m1-(m2
*
(q(i-1)+(k2/2))));
k4=h
*
(m1-(m2
*
(q(i-1)+k3)));
q(i)=q(i-1)+(k1+(2
*
k2)+(2
*
k3)+k4)/6;
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