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.