Penyelesaian Integral Menggunakan Metode Romberg

Metode Romberg

Metode integrasi Romberg didasarkan pada perlusaan ekstrapolasi Richardson untuk memperoleh nilai integrasi yang semakin baik. Sebagai catatan, setiap penerapan ekstrapolasi Richardson akan menaikkan order galat pada hasil solusinya sebesar dua. $$ O(h^{2N}) \rightarrow O(h^{2N+2}) $$ Misalnya,bila $ I(h) $ dan $ I(2h) $ dihitung dengan kaidah trapesium yang berorde galat $ O(h 2) $, maka ekstrapolasi Richardson menghaslkan kaidah Simpson ⅓ yang berorde $ O(h 4) $. Selanjutnya, bila $ I(h) $ dan $ I(2h) $ dihitung dengan kaidah Simpson ⅓, ekstrapolasi Richardson menghaslkan kaidah Boole yang berorde $ O(h 6) $

Dalam hal ini $$ h = {b -a \over n} $$ Dan

$ A_k $ = Perkiraan nilai integrasi dengan kaidah trapesium dan jumlah pias $ n= 2^k $ Orde galat A_k adalah $ O(h^2) $

Sebagai contoh, interval [a,b] dibagi menjadi 64 buah pias/upselang. $$ n=64= 2^6 \rightarrow k = (0,1,2,3,4,5,6) $$ k = 0 adalah $ n =2^0 =1$ pias, $h_0 = {b-a \over 1} \rightarrow A_0 = h_0/2 [f_0 + f_64] $

k = 1 adalah $ n =2^1 =2$ pias, $h_1 = {b-a \over 2} \rightarrow A_0 = h_½ [f_0 + f_32 + f_64] $

dan seterusnya...

Arti dari setiap $ A_k $ adalah

A_0 adalah taksiran nilai integrasi $ I = \int_a^b f(x)dx $ dengan menggunakan kaidah trapesium dengan pembagian daerah integrasi n=2^0=1 buah pias.

A_1 adalah taksiran nilai integrasi $ I = \int_a^b f(x)dx $ dengan menggunakan kaidah trapesium dengan pembagian daerah integrasi n=2^1=2 buah pias.

A_2 adalah taksiran nilai integrasi $ I = \int_a^b f(x)dx $ dengan menggunakan kaidah trapesium dengan pembagian daerah integrasi n=2^2=4 buah pias. dan begitu seterusnya.

Untuk mendapatkan nilai B_k kita dapat menggunakan persamaan ekstrapolasi Richardson dengan memanfaatkan $ A_0, A_1, ... A_k$ yang didapatkan. $$ B_k = A_k + {A_k-A_{k-1} \over 2^2 - 1} $$ Dan begitu seterusnya untuk mendapatkan nilai $ C_k, D_k, E_k ... $. Sehingga kita dapat menghasilkan nilai yang dapat ditransformasikan pada bentuk tabel yang dinamakan Tabel Romberg.

$ O(h^2) $ $ O(h^4) $ $ O(h^6) $ $ O(h^8) $ $ O(h^10) $
A_0
A_1 B_1
A_2 B_2 C_2
A_3 B_3 C_3 D_3
A_4 B_4 C_4 D_4 E_4

Dan E_4 merupakan nilai integrasi yang terbaik.

Menghitung Integral dengan Metode Romberg

Misalkan terdapat integral $$ \int_0^1 {1 \over 1+ x} dx $$ $ n =8, \ a=0, b=1 $

$ x_r = {b - a \over n} $

$ f_r $ = fungsi integral tersebut.

Tabel titik-titik dalam selang interval [a,b]

$ r $ x_r f_r
0 0 1,00000
1 0,125 0,88889
2 0,250 0,80000
3 0,375 0,72727
4 0,500 0,66667
5 0,625 0,61538
6 0,750 0,57143
7 0,875 0,53333
8 1,000 0,50000
Selanjutnya dilanjutkan untuk menghitung $ O(h^q) $
A_0 = h_0/2[f_0+f_8] = 1/2 [1 + 0.50000] = 0.75000 \\ A_1 = h_1/2[f_0 + 2f_4+f_8] = 0.5 [1 + 2(0.66667) 0.50000] = 0.70833 \\ A_3 = h_2/2[f_0 + 2f_2 + 2f_4 + 2f_6 + f_8] = 0.250/2[1 + 2(0.80000) + 2(0.66667) + 2(0.57143) +0.50000] = 0.69702 \\ A_4 = h_3/2[f_1 + f_2 + f_3+f_4+f_5+f_6+f_7+f_8] = 0.125/2[1+2.088889 + ... +2(0.53333)+0.50000] = 0.69421
B_1 = A_1 + {A_1 - A_0 \over 2^2 -1} = 0.69445 \\ B_2 = A_2 + {A_2 - A_1 \over 2^2 -1} = 0.69325 \\ B_3 = A_3 + {A_2 - A_1 \over 2^2 - 1} = 0.69315 \\ C_2 = B_2 + {B_2 - B_1 \over 2_4 - 1} = 0.69317 \\ C_3 = B_3 + {B_3 - B_2 \over 2_4 - 1} = 0.69314 \\ D_3 C_3 + {C_3 - C_3 \over 2_6 - 1} = 0.69314

Setelah menyelesaikan proses perhitungan kemudian didapatkan nilai yang ditampung pada tabel Romberg berikut.

k O(h^2) O(h^2) O(h^4) O(h^6)
0 0.75000
1 0.70833 0.69445
2 0.69702 0.69325 0.69317
3 0.69412 0.69315 0.69314 0.69314

Jadi hasil dari $ \int_0^1 {1 \over 1+ x} dx \approx 0.69314 $

Implementasi Metode Romberg dengan Python

from numpy import zeros

def trapezoid_recursive(f, a, b, n):
    h = (b - a) / n
    x = a
    In = f(a)
    for k in range(1, n):
        x = x + h
        In += 2*f(x)
    return (In + f(b))*h*0.5

def romberg(f, a, b, n):
    R = zeros((n, n))
    print('Tabel Romberg')
    for k in range(0, n):
        R[k, 0] = trapezoid_recursive(f, a, b, 2**k)
        for j in range(0, k):
            R[k, j+1] = (4**(j+1) * R[k, j] - R[k-1, j]) / (4**(j+1) - 1)

        print(R[k, 0:k+1])

    return R


print(' 1/')
print(' / 1/(1+x)')
print('/0\n')

a = 0
b = 1
n = 4

def f(x):
    return 1/(1+x)

hasil = romberg(f, a, b, n)[n-1, n-1]
print('hasil penyelesaian :', round(hasil,5))
Pada program diatas terdapat fungsi trapezoid_recursive(f, a, b, n), yang merupakan implementasi dari rumus berikut. $ h = {b-a \over 2^n} \\ R(n,0) = {1 \over 2}R(n-1,0) + h \left [ \sum _{k=1}^{2(n-1)}f(a+(2k-1)h) \right] $
def trapezoid_recursive(f, a, b, n):
    h = (b - a) / n
    x = a
    In = f(a)
    for k in range(1, n):
        x = x + h
        In += 2*f(x)
    return (In + f(b))*h*0.5
Kemudian terdapat fungsi romberg(f, a, b, n), yang merupakan implementasi dari rumus
R(n,m) = {1 \over 4^m - 1} \left[ 4^m \times R(n,m-1)-R(n-,m-1) \right], n \le 1, m \leq 1
def romberg(f, a, b, n):
    R = zeros((n, n))
    print('Tabel Romberg')
    for k in range(0, n):
        R[k, 0] = trapezoid_recursive(f, a, b, 2**k)
        for j in range(0, k):
            R[k, j+1] = (4**(j+1) * R[k, j] - R[k-1, j]) / (4**(j+1) - 1)

        print(R[k, 0:k+1])

    return R

Semua nilai dari proses perhitugan program diatas kemudia dimassukan ke dalam larik yang merupakan bantuan dari libarary numpy. Program tersebut di jalankan dengan melakukan proses penyelesaian integrasi pada integral $ \int_0^1 {1 \over 1+ x} dx $. Saat program tersebut dijalankan maka menghasilkan output seperti berikut.

 1/
 / 1/(1+x)
/0

Tabel Romberg
[0.75]
[0.70833333 0.69444444]
[0.69702381 0.69325397 0.6931746 ]
[0.69412185 0.69315453 0.6931479  0.69314748]
hasil penyelesaian : 0.69315

Sekian terimakasih :)