Anda di halaman 1dari 9

RUNGE-KUTTA ORDE EMPAT

Dr. Eng. Supriyanto, M.Sc


Lab. Komputer, Departemen Fisika, Universitas Indonesia
email: supri@fisika.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

w0 = α
k1 = hf (ti , wi ) (1)
h 1
k2 = hf (ti + , wi + k1 ) (2)
2 2
h 1
k3 = hf (ti + , wi + k2 ) (3)
2 2
k4 = hf (ti+1 , wi + k3 ) (4)
1
wi+1 = wi + (k1 + 2k2 + 2k3 + k4 ) (5)
6
Contoh
Diketahui persamaan diferensial

y ′ = y − t2 + 1, 0 ≤ t ≤ 2, y(0) = 0, 5

dengan mengganti y menjadi w, kita bisa nyatakan f (ti , wi ) sebagai

f (ti , wi ) = wi − t2i + 1

1
Jika N = 10, maka
b−a 2−0
h= = = 0, 2
N 10
dan
ti = a + ih = 0 + i(0, 2) → ti = 0, 2i
serta
w0 = 0, 5
Sekarang mari kita demonstrasikan metode Runge-Kutta Orde Empat ini. Untuk menghitung
w1 , tahap-tahap perhitungannya dimulai dari menghitung k1

k1 = hf (t0 , w0 )
= h(w0 − t20 + 1)
= 0, 2((0, 5) − (0, 0)2 + 1)
= 0, 3

lalu menghitung k2
h k1
k2 = hf (t0 + , w0 + )
2 2
k1 h
= h[(w0 + ) − (t0 + )2 + 1)]
2 2
0, 3 0, 2 2
= 0, 2[(0, 5 + ) − (0, 0 + ) + 1)]
2 2
= 0, 328

dilanjutkan dengan k3
h k2
k3 = hf (t0 + , w0 + )
2 2
k2 h
= h[(w0 + ) − (t0 + )2 + 1)]
2 2
0, 328 0, 2 2
= 0, 2[(0, 5 + ) − (0, 0 + ) + 1)]
2 2
= 0, 3308

kemudian k4

k4 = hf (t1 , w0 + k3 )
= h[(w0 + k3 ) − t21 + 1]
= 0, 2[(0, 5 + 0, 3308) − (0, 2)2 + 1]
= 0, 35816

2
akhirnya diperoleh w1
1
w1 = w0 + (k1 + 2k2 + 2k3 + k4 )
6
1
= 0, 5 + (0, 3 + 2(0, 328) + 2(0, 3308) + 0, 35816)
6
1
= 0, 5 + (0, 3 + 0, 656 + 0, 6616 + 0, 35816)
6
= 0, 8292933

Dengan cara yang sama, w2 , w3 , w4 dan seterusnya dapat dihitung. Tabel berikut menunjukkan
hasil perhitungannya.

i ti wi yi = y(ti ) |wi − yi |
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 |wi −yi |,
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 ×105 Ω. Saat saklar

3
Figure 1: Rangkaian RC

dihubungkan (t=0), muatan belum ada (q=0).


dq ǫ q
= − (6)
dt R RC
Solusi exact persamaan (6) adalah
¡ ¢
qexact = 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
ǫ
m1 = = 1, 5 × 10−5
R
1
m2 = = 0, 25
RC
sehingga persamaan (6) dimodifikasi menjadi
dq
= f (qi ) = m1 − qi m2
dt
ti = a + ih

Jika t0 = 0, maka a = 0, dan pada saat itu (secara fisis) diketahui q0 = 0, 0. Lalu jika ditetapkan
h = 0, 1 maka t1 = 0, 1 dan kita bisa mulai menghitung k1 dengan menggunakan q0 = 0, 0,

4
walaupun t1 tidak dilibatkan dalam perhitungan ini

k1 = hf (q0 )
= h(m1 − q0 m2 )
= 0, 1((1, 5 × 10−5 ) − (0, 0)(0, 25))
= 0, 150 × 10−5

lalu menghitung k2
k1
k2 = hf (q0 + )
2
k1
= h[(m1 − (q0 + )m2 )]
2
0, 15 × 10−5
= 0, 1[(1, 5 × 10−5 − ((0, 0) + )(0, 25)]
2
= 0, 14813 × 10−5

dilanjutkan dengan k3
k2
k3 = hf (q0 + )
2
k2
= h[(m1 − (q0 + )m2 )]
2
0, 14813 × 10−5
= 0, 1[(1, 5 × 10−5 − ((0, 0) + )(0, 25)]
2
= 0, 14815 × 10−5

kemudian k4

k4 = hf (q0 + k3 )
= h[(m1 − (q0 + k3 )m2 )]
= 0, 1[(1, 5 × 10−5 − ((0, 0) + 0, 14815 × 10−5 )(0, 25)]
= 0, 14630 × 10−5

akhirnya diperoleh q1
1
q1 = q0 + (k1 + 2k2 + 2k3 + k4 )
6
1
= 0, 0 + (0, 150 + 2(0, 14813) + 2(0, 14815) + 0, 14630) × 10−5
6
= 0, 14814 × 10−5

5
Selanjutnya q2 dihitung. Tentu saja pada saat t2 , dimana t2 = 0, 2, namun sekali lagi, t2 tidak
terlibat dalam perhitungan ini. Dimulai menghitung k1 kembali

k1 = hf (q1 )
= h(m1 − q1 m2 )
= 0, 1((1, 5 × 10−5 ) − (0, 14814 × 10−5 )(0, 25))
= 0, 14630 × 10−5

lalu menghitung k2
k1
k2 = hf (q1 + )
2
k1
= h[(m1 − (q1 + )m2 )]
2
0, 14630 × 10−5
= 0, 1[(1, 5 × 10−5 − ((0, 14814 × 10−5 ) + )(0, 25)]
2
= 0, 14447 × 10−5

dilanjutkan dengan k3
k2
k3 = hf (q1 + )
2
k2
= h[(m1 − (q1 + )m2 )]
2
0, 14447 × 10−5
= 0, 1[(1, 5 × 10−5 − ((0, 14814 × 10−5 ) + )(0, 25)]
2
= 0, 14449 × 10−5

kemudian k4

k4 = hf (q1 + k3 )
= h[(m1 − (q1 + k3 )m2 )]
= 0, 1[(1, 5 × 10−5 − ((0, 14814 × 10−5 ) + 0, 14449 × 10−5 )(0, 25)]
= 0, 14268 × 10−5

akhirnya diperoleh q2
1
q2 = q1 + (k1 + 2k2 + 2k3 + k4 )
6
1
= 0, 14814 × 10−5 + (0, 14630 + 2(0, 14447) + 2(0, 14449) + 0, 14268) × 10−5
6
= 0, 29262 × 10−5

6
i ti qi qexact = q(ti ) |qi − qexact |
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
−5 −5
2 0,2 0,29262×10 0,29262×10 0,00000
−5 −5
3 0,3 0,43354×10 0,43354×10 0,00000
4 0,4 0,57098×10−5 0,57098×10−5 0,00000
5 0,5 0,70502×10−5 0,70502×10−5 0,00000
−5 −5
6 0,6 0,83575×10 0,83575×10 0,00000
7 0,7 0,96326×10−5 0,96326×10−5 0,00000
8 0,8 1,0876×10−5 1,0876×10−5 0,00000
−5 −5
9 0,9 1,2089×10 1,2089×10 0,00000
10 1,0 1,3272×10−5 1,3272×10−5 0,00000

Dengan cara yang sama, q3 , q4 , q5 dan seterusnya dapat dihitung. Tabel di atas menunjukkan
hasil perhitungannya. Kolom qexact diperoleh dari persamaan (7).
Luar biasa!! Tak ada error sama sekali. Mungkin, kalau kita buat 7 angka dibelakang koma,
error nya 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
−5
x 10
6

0
0 2 4 6 8 10 12 14 16 18 20

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.

Anda mungkin juga menyukai