Mengenal "Bisection Method" dan Implementasinya dalam Python3
Bagaimana
sebuah komputer dapat menghitung akar dari suatu persamaan
polinomial? Komputer ‘tidak secerdas manusia’, tetapi
perhitungannya cepat. Oleh karena itu, metode numerik lumrah dipakai
dalam metode komputasi dibanding metode analitik. Metode numerik
salah satunya berpusat pada perhitungan secara berulang sehingga
hasil akhirnya semakin mendekati nilai sebenarnya atau nilai
analitik. Salah satu metode numerik yang paling mudah untuk
menyelesaikan suatu persamaan adalah metode biseksi (“bisection
method”).
Anggap
kita mempunyai sebuah fungsi f(x) dimana r merupakan
salah satu akar dari f(x) sehingga f(r) = 0. Pertama-tama,
kita akan mempunyai seri x1, x2,
…, xn dengan xn
paling mendekati nilai r. x1 dan
x2 harus dipilih sehingga r
berada di antara keduanya atau x1 < r
< x2. Karena f(r) = 0, maka f(x1)
dan f(x2) harus memiliki tanda yang berbeda
sehingga f(x0)*f(x1) < 0. Sementara itu, x3
adalah nilai tengah dari x1 dan
x2 yang diharapkan lebih mendekati nilai r
dibandingkan pendahulunya, maka:
x3
= 0.5 * (x1
+ x2).
Kemudian, kita hitung lagi f(x3):
Apakah bernilai positif atau negatif? Jika bernilai positif, maka x3
harus dipasangkan dengan yang nilainya negatif dan sebaliknya. Nilai
r harus tetap “dikurung” oleh sepasang xi
yang baru, sehingga x4 akan dipilih menjadi
nilai tengah dari x1 dan x3
ataukah nilai tengah dari x3 dan x2.
Seterusnya, hingga mencapai nilai presisi yang diinginkan.
(Diterjemahkan dengan penyuntingan dari “Numerical Methods” oleh
Chasnov, 2012)
Metode
biseksi merupakan metode numerik yang masih terbilang sederhana.
Untuk memahaminya, menghitung secara manual menggunakan tabel layak
untuk di coba. Berikut adalah contoh menyelesaikan akar dari fungsi
kuadrat sederhana f(x) = x2 – 25.
Akar pertama, tebakan awal x1 = -6 dan x2 = -1.
Akar kedua, tebakan awal x1 = 0 dan x2 = 7.
Pengulangan/iteration dapat terus dilanjutkan sampai selisih x1 dan x2 kurang dari nilai presisi tertentu.
Jika
kita plot x1, x2, dan x_mid pada sebuah grafik, x1 dan x2 terus
mengerucut ke arah nilai akar r (garis putus-putus) sejalan dengan
nilai tengahnya x_mid. (Sehingga metode ini dinamai metode biseksi)
Algoritma yang kita lakukan pada penghitungan tabel dapat kita tuliskan kembali ke dalam bahasa pemrograman. Berikut adalah contoh implementasi algoritma metode biseksi dalam naskah kode Python.
Fungsi sda. tetapi x1 = 0 dan x2 = 30. |
Algoritma yang kita lakukan pada penghitungan tabel dapat kita tuliskan kembali ke dalam bahasa pemrograman. Berikut adalah contoh implementasi algoritma metode biseksi dalam naskah kode Python.
""" contoh metode numerik biseksi Alwan Darussalam (28/03/2020) """ # fungsi tes f(x) = x^2 - 25 fun = lambda x: x**2 - 25 x0 = 0.0 x1 = 30.0 conv = 1e-5 max_iter = 100 f0 = fun(x0) f1 = fun(x1) #collect_x0 = [x0] #collect_x1 = [x1] # syarat metode bisection berlaku hanya jika f0*f1 < 0 if f0 * f1 < 0: for i in range(max_iter): x2 = x0 + 0.5 * (x1 - x0) f2 = fun(x2) if f0 * f2 < 0: x1 = x2 # geser x1 ke kiri else: x0 = x2 # geser x0 ke kanan # collect_x0.append(x0) # collect_x1.append(x1) if abs(f2) <= conv: print("Perhitungan konvergen di x =", x2) break # menghentikan loop r = x2 print('Sehingga, r=', r, 'f(r)=', f2) else: print("r tidak terkurung, ubah nilai x0 atau x1")
Metode
biseksi sudah terimplementasi secara praktis dalam SciPy. (scipy.optimize.bisect) Masukan
yang diperlukan cukup fungsi yang akan diselesaikan serta tebakan
pertama untuk
x1
dan x2
. Walaupun begitu, menulis naskah metode
biseksi dari awal sangat bagus untuk latihan memahami algoritma
pemrograman.
Post a Comment: