Metode Bisection untuk solusi persamaan taklinier

Diberikan fungsi \(f(x)\) yang terdefinisi pada \(I=[a,b]\). Pada interval ini terdapat \(\alpha\in I\) yang memenuhi $$f(\alpha)=0.$$

Tanpa mengurangi keumuman, dimisalkan bahwa \(f(x)<0\) yang berlaku untuk \(x\in[a,\alpha]\) dan \(f(x)>0\) yang berlaku untuk \(x\in[\alpha,b]\).

Nilai \(\alpha\) dapat ditentukan dengan mengambil titik tengah dari interval dan sub-interval \([a,b]\) yang dilakukan secara iteratif. Untuk langkah pertama, titik tengah interval \([a_1,b_1]\) adalah $$c_1=\dfrac{a_1+b_1}{2}.$$

Perlu ditentukan subinterval baru, apakah \([a_1,c_1]\) atau \([c_1,b_1]\). Jika nilai \(c_1\) mengakibatkan \(f(c_1)<0\) maka nilai \(c_1\) lebih mendekati \(\alpha\) dibandingkan \(a_1\). Sebaliknya, jika nilai \(c_1\) mengakibatkan \(f(c_1)>0\) maka nilai \(c_1\) lebih mendekati \(\alpha\) dibandingkan \(b_1\). Tanpa mengurangi keumuman, misalkan nilai \(c_1\) mengakibatkan \(f(c_1)<0\). Maka, subinterval yang digunakan adalah \([c_1,b_1]\). Atau, dapat dituliskan dengan \([a_2,b_2]\) dengan \(a_2=c_1\) dan \(b_2=b_1\).

Iterasi kedua menggunakan interval \([a_2,b_2]\). Titik tengah interval ini adalah $$c_2=\dfrac{a_2+b_2}{2}.$$

Misalkan nilai \(c_2\) mengakibatkan \(f(c_2)<0\), sama seperti analogi iterasi pertama, \(c_2\) lebih mendekati \(\alpha\) dibandingkan \(a_2\). Lalu, subinterval yang dihasilkan pada iterasi kedua adalah \([c_2,b_2]\). Atau, dapat dituliskan dengan \([a_3,b_3]\) dengan \(a_3=c_2\) dan \(b_3=b_2\).

Iterasi ketiga menggunakan interval \([a_3,b_3]\). Titik tengah interval ini adalah $$c_3=\dfrac{a_3+b_3}{2}.$$

Misalkan nilai \(c_3\) mengakibatkan \(f(c_3)<0\), sama seperti analogi iterasi pertama dan kedua, \(c_3\) lebih mendekati \(\alpha\) dibandingkan \(a_3\). Lalu, subinterval yang dihasilkan pada iterasi ketiga adalah \([c_4,b_4]\). Atau, dapat dituliskan dengan \([a_4,b_4]\) dengan \(a_4=c_3\) dan \(b_4=b_3=b_2\).

Secara umum, untuk \(i=1,2,3,\ldots,n\), digunakan interval \([a_i,b_i]\). Titik tengah interval \([a_i,b_i]\) adalah $$c_i=\dfrac{a_i+b_i}{i}.$$.

  • Jika nilai \(c_i\) mengakibatkan \(f(c_i)<0\), maka \(c_i\) lebih mendekati \(\alpha\) dibandingkan \(a_i\). Interval yang digunakan selanjutnya adalah \([c_i,b_i]\)
  • Jika nilai \(c_i\) mengakibatkan \(f(c_i)>0\), maka \(c_i\) lebih mendekati \(\alpha\) dibandingkan \(b_i\). Interval yang digunakan selanjutnya adalah \([a_i,c_i]\)

Perhitungan dengan python

Pertama, load modul yang digunakan, pengaturan eror dan toleransi maksimum dalam iterasi.

import numpy as np
from matplotlib import pyplot as plt
tolmax = 1e-20;
itmax=100;

Kedua, buat procedure untuk fungsi yang akan ditentukan solusinya. Misalkan \(y(x)=x^2-5x+6\) yang solusi analitiknya adalah \(x=\{2,3\}\)

def fx(x): return x**2-5*x+6

Terakhir, procedure untuk metode Bisection

def bisection(a,b,f):
  if f(a)*f(b)>0:
    exit()
  else:
    for i in range(0,itmax):
    c=0.5*(a+b)
    if (f(b)*f(c))<0:
      a=c
      b=b
    else:
      a=a
      b=c
  if (abs(f(c))<tolmax):
    break
return i,c

Jika dipilih tebakan awal \(a=2.5,b=8\), dinamika nilai \(c_i\) ditunjukkan pada Gambar 1. Perbandingan antara dinamika \(c_i\) dengan fungsi \(f(x)\) ditunjukkan pada Gambar 2.

Gambar 1. Dinamika \(c_i\) per iterasi
Gambar 2. Perbandingan \(c_i\) dengan \(f(x)\)