Metode bisection atau metode bagidua merupakan salah satu jenis metode pencarian akar secara incremental yang mana setiap selang dibagi dua. Jika suatu fungsi berubah tanda pada suatu selang, maka nilai fungsi dihitung pada titik tengah. Kemudian lokasi akar ditentukan sebagai terletak pada titik tengah selang bagian tempat terjadinya perubahan tanda. Prosesnya diulang untuk memperoleh taksiran yang diperhalus.
Rumus cek cakupan interval :
F(XL)*F(XU) < 0
Rumus taksiran akar :
XR = (XL+XU)/2
Rumus persamaan akar polinom :
f(x) = a0x0^0 + a1x1^1 + a2x2^2 + … + anxn^n
Rumus cek interval akar :
- Bila akar berada pada interval bawah : F(XL)*F(XR) < 0
- Bila akar berada pada interval atas : F(XL)*F(XR) > 0
- Bila akar setara taksiran (XR) : F(XL)*F(XR) = 0
Kita dapat menuangkan semua rumus-rumus di atas ke dalam sebuah program untuk mempermudah perhitungan akar-akar dari polinom. Berikut ini merupakan langkah algoritma program dalam pembentukkan polinom dan algoritma ketika program mendapat input dari user.
- Masukkan nilai derajat tertinggi ke dalam variable N
- Masukkan nilai pengali (a) ke dalam variable array NilaiA
- Ulangi langkah 2 sebanyak N+1 kali atau dari N sampai 0 (nilai a dari pangkat tertinggi ke terendah)
- Masukkan nilai X taksiran bawah (Lower) -> XL
- Masukkan nilai X taksiran atas (Upper) -> XU
- Masukkan nilai Error maksimum yang akan dicari -> ES
- Masukkan nilai Batas iterasi -> MAXIT
- Periksa interval dari perubahan fungsi F(X) dengan rumus F(XL)*F(XU). Jika didapat hasil kurang dari 0 maka perubahan fungsi mencakup seluruh interval.
- Jika F(XL) * F(XU) > 0, maka program akan keluar
- Jika F(XL) * F(XU) < 0, maka program melanjutkan dengan menghitung nilai XR (taksiran akar) dengan rumus XR = (XL+XU)/2.
- Jika XL+XU tidak sama dengan 0 program menghitung EA (galat)-> Abs((XU - XL) / (XL + XU)) * 100 atau (XRbaru – XRlama) / XRbaru * 100 (hasil sama).
- Evaluasi pada variabel XL dan XR untuk menentukan bagian interval. Hasil evaluasi dimasukkan ke variable TEST, dengan rumus F(XL)*F(XR).
- Jika TEST = 0 maka EA = 0, berarti akar setara XR (hentikan komputasi).
- Jika TEST < 0 maka XU = XR, berarti akar berada pada interval bawah. Tampilkan nilai Iterasi, XL, XU, XR, EA, ES pada listview. Ulangi perhitungan sampai batas iterasi atau batas galat tercapai.
- Jika TEST > 0 maka XL = XR, berarti akar berada pada interval atas. Tampilkan nilai Iterasi, XL, XU, XR, EA, ES pada listview. Ulangi perhitungan sampai batas iterasi atau batas galat tercapai.
- Selesai dan selamat berhitung.
Private Sub Hitung_Click()
'Definisi Variabel
Dim XL, XU, XR, ES, EA, MAXIT, ITER, TEST As Double
XL = Val(txt_XL.Text)
XU = Val(txt_XU.Text)
ES = Val(txt_ES.Text)
MAXIT = txt_MAXIT.Text
ListView1.ListItems.Clear
'Cek Apakah Input Merupakan Numerik
If IsNumeric(XL) = True And IsNumeric(XU) = True And IsNumeric(ES) = True And IsNumeric(MAXIT) = True Then
' MsgBox Pers(XL) * Pers(XU)
If Pers(XL) * Pers(XU) < 0 Then
ITER = 0
EA = 1.1 * ES
While EA > ES And ITER < MAXIT
XR = (XL + XU) / 2
ITER = ITER + 1
If XL + XU <> 0 Then
EA = Abs((XU - XL) / (XL + XU)) * 100
Else
End If
TEST = Pers(XL) * Pers(XR)
If TEST = 0 Then
EA = 0
ElseIf TEST < 0 Then
XU = XR
Else
XL = XR
End If
'If EA < ES Then MsgBox "XR = " & XR & ", EA = " & EA & "ITER = " & ITER
XL = FormatNumber(XL, 8, vbTrue, vbTrue, vbTrue)
XU = FormatNumber(XU, 8, vbTrue, vbTrue, vbTrue)
XR = FormatNumber(XR, 8, vbTrue, vbTrue, vbTrue)
EA = FormatNumber(EA, 8, vbTrue, vbTrue, vbTrue)
XL = Val(XL)
XU = Val(XU)
XR = Val(XR)
EA = Val(EA)
With ListView1
.ListItems.Add , Key:="", Text:=ITER
.ListItems(ITER).ListSubItems.Add , Key:="", Text:=XL
.ListItems(ITER).ListSubItems.Add , Key:="", Text:=XU
.ListItems(ITER).ListSubItems.Add , Key:="", Text:=XR
.ListItems(ITER).ListSubItems.Add , Key:="", Text:=EA
.ListItems(ITER).ListSubItems.Add , Key:="", Text:=ES
End With
Wend
End If
Else
MsgBox "Tentukan Batas Bawah Dan Batas Atas. Ex: XL=-1, XU=2"
End If
End Sub