Thursday, October 27, 2011

Perhitungan akar persamaan dengan metode bisection atau metode bagidua

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.

  1. Masukkan nilai derajat tertinggi ke dalam variable N
  2. Masukkan nilai pengali (a) ke dalam variable array NilaiA 
  3. Ulangi langkah 2 sebanyak N+1 kali atau dari N sampai 0 (nilai a dari pangkat tertinggi ke terendah)
  4. Masukkan nilai X taksiran bawah (Lower) -> XL
  5. Masukkan nilai X taksiran atas (Upper) -> XU
  6. Masukkan nilai Error maksimum yang akan dicari -> ES
  7. Masukkan nilai Batas iterasi -> MAXIT
  8. 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.
  9. Jika F(XL) * F(XU) > 0, maka program akan keluar
  10.  Jika F(XL) * F(XU) < 0, maka program melanjutkan dengan menghitung nilai XR (taksiran akar) dengan rumus XR = (XL+XU)/2.
  11. Jika XL+XU tidak sama dengan 0 program menghitung EA (galat)-> Abs((XU - XL) / (XL + XU)) * 100 atau (XRbaru – XRlama) / XRbaru * 100 (hasil sama).
  12. Evaluasi pada variabel XL dan XR untuk menentukan bagian interval. Hasil evaluasi dimasukkan ke variable TEST, dengan rumus F(XL)*F(XR).
  13. Jika TEST = 0 maka EA = 0, berarti akar setara XR (hentikan komputasi).
  14. 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. 
  15. 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. 
  16. Selesai dan selamat berhitung.

Perwujudan dari algoritma di atas dalam bahasa Visual Basic :

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


No comments:

Post a Comment