Metode Romberg¶
Metode Romberg didasarkan pada perluasan ekstrapolasi Richardson untuk memperoleh nilai integrasi yang semakin baik. Pada setiap penerapan ekstrapolasi Richardson akan menaikkan orde galat pada hasil solusinya sebesar dua, misalkan O(h^{2N}) --> O(h^{2N+2})
Contohnya, bila I(h) dan I(2h) dihitung dengan metode Trapesium yang berorde galat O(h^{2}), maka ekstrapolasi Richardson menghasilkan metode Simpson ⅓ yang berorde galat O(h^{4}). Selanjutnya, bila I(h) dan I(2h) dihitung dengan metode Simpson ⅓, ekstrapolasi Richardson akan menghasilkan kaidah Boole yang berorde galat O(h^{6}). Persamaan ekstrapolasi Richardson :
J = I(h) + \frac{I(h) - I(2h)}{2^{q} - 1}
Misalkan I adalah nilai integrasi sejati yang dinyatakan sebagai I= A_k+ Ch^{2} + Dh^{4}+ Eh^{6}+ ... yang dalam hal ini h= \frac{(b-a)}{n} dan A_k merupakan nilai integrasi dengan metode Trapesium dengan jumlah pias n= 2^{k} dan Orde galatnya adalah O(h^{2}). A_0, A_1,...A_k digunakan dalam persamaan ekstrapolasi Richardson untuk mendapatkan B_1, B_2, ...,B_k, yaitu
B_k= A_k + \frac{A_k - A_k-1}{2^{2} - 1}
Jadi, nilai I (yang lebih baik) sekarang adalah I = B_k + D'h^{4} + E'h^{6} +… dengan orde galat B_k adalah O(h^{4}).
Selanjutnya, gunakan B_1, B_2 ,.., B_k pada persamaan ekstrapolasi Richardson untuk mendapatkan runtunan C_2, C_3,..., C_k, yaitu
C_k= B_k + \frac{B_k - B_k-1}{2^{4} - 1}
Jadi, nilai I (yang lebih baik) sekarang adalah I = C_k + E " h^{6} + ... dengan orde galat C_k adalah O(h^{6}). Demikian seterusnya.
Dari runtunan tersebut, diperoleh tabel yang dinamakan tabel Romberg seperti berikut ini :
O(h2) Metode Trapesium | O(h4) Metode Simpson | O(h6) Metode Boole | O(h8) Perbaikan ketiga | O(h10) dst |
---|---|---|---|---|
A0 | ||||
A1 | B1 | |||
A2 | B2 | C2 | ||
A3 | B3 | C3 | D3 | |
A4 | B4 | C4 | D4 | E4 |
E4 adalah nilai integrasi yang lebih baik.
Implementasi Pemrograman¶
Contoh 1 :
Dalam contoh ini kita dapat melihat bahwa dengan menggunakan metode scipy.integrate.romberg()
, kita bisa mendapatkan integrasi romberg dari fungsi yang dapat dipanggil dari batas a ke b dengan menggunakan metode scipy.integrate.romberg()
.
# import numpy and scipy.integrate
import numpy as np
from integrate import scipy
gfg = lambda x: np.exp( - x * * 2 )
# using scipy.integrate.romberg()
geek = integrate.romberg(gfg, 0 , 3 , show = True )
print (geek)
Output
Romberg integrasi <function vectorize1..vfunc di 0x00000209C3641EA0> dari [0, 3]
Langkah StepSize Hasil
1 3.000000 1.500185
2 1.500000 0,908191 0,710860
4 0.750000 0.886180 0.878843 0.890042
8 0.375000 0.886199 0.886206 0.886696 0.886643
16 0.187500 0.886205 0.886207 0.886207 0.886200 0.886198
32 0,093750 0.886207 0.886207 0.886207 0.886207 0.886207 0.886207
64 0.046875 0.886207 0.886207 0.886207 0.886207 0.886207 0.886207 0.886207
128 0.023438 0.886207 0.886207 0.886207 0.886207 0.886207 0.886207 0.886207 0.886207
Hasil akhir adalah 0,8862073482595311 setelah 129 evaluasi fungsi.
Contoh 2
# import numpy and scipy.integrate
import numpy as np
from integrate import scipy
gfg = lambda x: np.exp( - x * * 2 ) + 1 / np.sqrt(np.pi)
# using scipy.integrate.romberg()
geek = integrate.romberg(gfg, 1 , 2 , show = True )
print (geek)
Ooutput
Integrasi Romberg dari <function vectorize1..vfunc at 0x00000209E1605400> dari [1, 2]
Langkah StepSize Hasil
1 1,000000 0,757287
2 0,500000 0,713438 0,698822
4 0.250000 0.702909 0.699400 0.699438
8 0.125000 0.700310 0.699444 0.699447 0.699447
16 0,062500 0,699663 0,699447 0,699447 0,699447 0,699447
32 0.031250 0.699501 0.699447 0.699447 0.699447 0.699447 0.699447
Hasil akhir adalah 0,6994468414978009 setelah 33 evaluasi fungsi.