Metode Simpson untuk integral tentu secara numerik

Integral \(f(x)\) dengan batas \([a,b]\) menggunakan metode simpson adalah melakukan integral dengan interpolasi kuadrat terhadap \(f(x)\). Oleh karena interpolasi orde dua membutuhkan tiga titik maka banyak partisi metode simpson harus genap. Interval \([a,b]\) yang dipartisi dua bagian menjadi tiga titik, yaitu

$$x_0=a,\quad x_1=a+h,\quad x_2=b$$

Gambar 1. Perbandingan f(x) dan interpolasi kuadrat dengan tiga titik

Interpolasi orde dua terhadap fungsi \(f(x)\) pada titik-titik \(\{x_0,x_1,x_2\}\) adalah

$$ P_2(x)=L_0y_0+L_1y_1+L_2y_2 $$

dengan \(L_0=\dfrac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)}\), \(L_1=\dfrac{(x-x_0)(x-x_2)}{(x_1-x_0)(x_1-x_2)}\), dan \(L_2=\dfrac{(x-x_0)(x-x_1)}{(x_2-x_0)(x_2-x_1)}\).

Integral \(P_2(x)\) dengan batas \([a,b]\) menghasilkan

$$S_2=\dfrac{b-a}{3}\left(f_0+4f_1+f_2\right)$$

Jika interval \([x_0,x_1]\) dan \([x_1,x_2]\) masing-masing di partisi dua agar dapat diinterpolasi lagi dengan orde dua, maka terdapat empat interval, yaitu

$$[a,b]=[x_0,x_1] \cup [x_1,x_2] \cup [x_2,x_3] \cup [x_3,x_4]$$

Gambar 2. Tambahan partisi di antara partisi awal

Integral dilakukan di partisi \(\{x_0,x_1,x_2\}\) dan \(\{x_2,x_3,x_4\}\) dengan integral per partisinya adalah

$$S_2^i=\dfrac{h}{3}\left(f_{i}+4f_{i+1}+f_{i+2}\right)$$

untuk i=0,2, atau

$$S_4=\dfrac{h}{3}\left(f_{0}+4f_{1}+2f_{2}+4f_{3}+f_{4}\right)$$

Secara umum, integral numerik fungsi \(f(x)\) menggunakan metode Simpson adalah

$$S_n=f(x_0)+f(x_n)+4\sum_{i=0}^{n/2}{f(x_{2i+1})}+2\sum_{i=1}^{n/2-1}{f(x_{2i})}$$

dengan \(n\) adalah banyak partisi genap pada interval \([a,b]\).

Komputasi dengan python

Import modul numpy untuk keperluan array

import numpy as np

Buatlah procedure untuk menghitung fungsi

f=lambda x:np.sin(x)+np.cos(x)

Buatlah procedure simpson dengan input fungsi, batas bawah a, batas atas b dan banyak partisi, n.

def simpson(f,a,b,n):
  h=(b-a)/n
  x=np.linspace(a,b,n+1)  
  fx=f(x) 
  fgan=fx[1:n:2]  
  fgen=fx[2:n:2]  
  hasil=fx[0]+fx[n]+4*np.sum(fgan)+2*np.sum(fgen)
  hasil=hasil*h/3
return hasil

Hasil simulasi ditunjukkan pada Tabel

\(n\) \(S_n\)
10 2.325465
100 2.325444
1000 2.325444
10000 2.325444