Senin, 26 Maret 2012

Latihan Metode Bisection pada VB


Pada kesempatan kali ini saya akan mencoba Metode Iterative : Bisection.





Masukkan perintah berikut :













Ubah intervalnya :











Penjelasan Algoritma :

Diketahui sebuah persamaan f(x)  = x^2-5x+6
Secara matematis biasa di dapat nilai akar persamaan x = 3 dan x = 2

Karena metode bisection adalah metode iterasi terbuka, maka jika ingin konvergen, batas intervalnya memang sering perlu kita ubah.


z1 = 0.001
z2 = -0.001

nilai z ini adalah batas toleransi, dimana jika nilai f(x) diantara kedua z maka metode bisection sudah konvergen.

bisection adalah metode bagi 2, di mana batas interval akan dibagi terus menjadi 2 hingga menemukan nilai yang konvergen.

---------------------------------------------------------

a = TextBox2.Text
b = TextBox3.Text
n = 1000
z1 = 0.001
z2 = -0.001
x = a / 2 + b / 2
fx = x ^ 2 - 5 * x + 6
fa = a ^ 2 - 5 * a + 6
fb = b ^ 2 - 5 * b + 6
fcek = fa * fb
fcek1 = fa * fx
---------------------------------------------------------

a dan b adalah batas interval yang kita inginkan.
n adalah jumlah iterasi.
x adalah nilai di tengah-tengah antara a dan b = (a+b)/2
pertama2, cari nilai f(x), f(a), dan f(b)
kemudian fcek = f(a) x f(b) dan fcek1= f(a) x f(x)

kemudian pada fungsi if :

--------------------------------------------------------

If fx = 0 Then
    TextBox1.Text = x

--------------------------------------------------------

jika nilai f(x) sudah 0, maka diketahui salah satu akar persamaannya adalah x, dan sudah konvergen.

jika tidak,


--------------------------------------------------------


Else
    If fcek > 0 Then
    MsgBox "batas interval ubah"
    ElseIf fcek = 0 Then
        If fa = 0 Then
        TextBox1.Text = a
        ElseIf fb = 0 Then
        TextBox1.Text = b
        End If

--------------------------------------------------------
Jika tidak, maka lihat fcek, di mana nilainya adalah f(a) x f(b).
jika f(a) x f(b) lebih besar dari 0, maka di antara interval a dan b tidak ada akar persamaan. Sehingga muncul MsgBox : batas interval harus di ubah.
jika fcek = 0, maka salah satu antara nilai a dan b adalah akar persamaan. kemudian dengan fungsi if, jika f(a) = 0, maka nilai a adalah akar persamaan, jika f(b) = 0 maka nilai b adalah akar persamaan.

Algoritma di bawah ini jika nilai fcek < 0.
-------------------------------------------------------------
    Else
        For i = 1 To n
        z1 = 0.001
        z2 = -0.001
            If fcek1 < 0 Then
------------------------------------------------------------
jika nilai fcek1 < 0, maka akar persamaannya ada di antara nilai a dan x, sehingga nilai b diubah ke nilai x. Dan nilai x yang baru adalah nilai a dan b(yang baru) dibagi 2.

-------------------------------------------------------------
                If (fx < z1 And fx > z2) Then
                TextBox1.Text = x
                Else
                a = a
                b = x
                x = a / 2 + b / 2
                fx = x ^ 2 - 5 * x + 6
                fa = a ^ 2 - 5 * a + 6
     
                ListBox1.AddItem a
                ListBox2.AddItem b
                ListBox3.AddItem x
                ListBox4.AddItem fx
                ListBox5.AddItem fa
                ListBox6.AddItem i + 1
                ListBox7.AddItem fcek
                End If
                If (fx < z1 And fx > z2) Then
                TextBox1.Text = x
                Else
                a = x
                b = b
                x = a / 2 + b / 2
                fx = x ^ 2 - 5 * x + 6
                fa = a ^ 2 - 5 * a + 6
     
                ListBox1.AddItem a
                ListBox2.AddItem b
                ListBox3.AddItem x
                ListBox4.AddItem fx
                ListBox5.AddItem fa
                ListBox7.AddItem fcek
                End If
------------------------------------------------------
fungsi begitu seterusnya, hingga pada iterasi ke - n nilai a dan b sudah tidak bisa dibagi lagi mendekati nilai batas toleransi.

------------------------------------------------------


Pada algoritma di bawah ini adalah ketika fcek1 > 0 sehingga nilai akar persamaannya ada di antara nilai x dan b.


------------------------------------------------------


            ElseIf fcek1 > 0 Then
                If (fx < z1 And fx > z2) Then
                TextBox1.Text = x
                Else
                a = x
                b = b
                x = a / 2 + b / 2
                fx = x ^ 2 - 5 * x + 6
                fa = a ^ 2 - 5 * a + 6
     
                ListBox1.AddItem a
                ListBox2.AddItem b
                ListBox3.AddItem x
                ListBox4.AddItem fx
                ListBox5.AddItem fa
                ListBox6.AddItem i + 1
                ListBox7.AddItem fcek
                End If
                If (fx < z1 And fx > x2) Then
                TextBox1.Text = x
                Else
                a = a
                b = x
                x = a / 2 + b / 2
                fx = x ^ 2 - 5 * x + 6
                fa = a ^ 2 - 5 * a + 6
     
                ListBox1.AddItem a
                ListBox2.AddItem b
                ListBox3.AddItem x
                ListBox4.AddItem fx
                ListBox5.AddItem fa
                ListBox7.AddItem fcek
                End If
         
            End If
        Next i
    End If
 
End If
------------------------------------------------------------------


Algoritma berikut adalah untuk jika pada iterasi terakhir, nilai f(x) masih lebih besar dari nilai toleransi error, maka batas interval harus diubah karena belum konvergen. Namun jika sudah akan muncul MsgBox bahwa interval sudah benar dan nilai x yang konvergen akan keluar.

If fx > z1 Then
    MsgBox "interval harus diubah pula"
ElseIf (fx <= z1 And fx >= z2) Then
    MsgBox "perhitungan anda benar"
End If

------------------------------------------------------


Sekian. Mohon komentarnya ya


13 komentar:

  1. wah, postingan yang menarik..
    tapi menurut saya alangkah baiknya jika ditambahkan algoritmanya sehingga yang membaca juga lebih memahami..

    Terima Kasih..

    BalasHapus
  2. Iya benar nih..Coba bung machi dijelaskan algoritmanya supaya pembaca lebih jelas bung dalam memahami isi programnya..terima kasih

    salam,

    arandityonarutomo.blogspot.com

    BalasHapus
  3. Sudah kok penjelsan algoritma, makasih ya sudah mengingatkan :D

    BalasHapus
  4. wah, sampai dengan 1000 iterasi. Super sekali beda daripada yang lain..

    Nice Posting

    BalasHapus
  5. wah, ci, panjang bgt penjabarannya. Tapi saya jadi ngerti, ditambah lagi ada penjelasan di awal koding. Nice sob.

    BalasHapus
  6. Balasan
    1. hasilnya memang tidak muncul, program saya ditujukan untuk hasil yang benar2 tepat. jadi kalo tidak keluar, maka intervalnya perlu diubah. terima kasih

      Hapus
  7. bisa lebih disederhanain gak bung machi.. o ya gambarnya disesuaikan dengan ukuran posting biar lebih rapi..
    makasih

    BalasHapus
  8. punten, mau bertanya. variabel fcek dan fcek 1 kapan terisi ya ? program diatas saya jalankan gagal. sama komentar diatas yang mengtakan fcek = fa*b dan fcek1 = fa*fx dimana di taruhnya dalam list prohram. terimakasih

    BalasHapus
  9. Untuk Listbox 7 itu yang mana ya ?
    sedangkan di form hanya sampai listbox 6

    BalasHapus
  10. Jammy Tango Habanero Salsa Picante de Chile - JTM Hub
    Jommy Tango Habanero Salsa Picante de Chile Habanero 군포 출장마사지 Salsa Picante de Chile Habanero Salsa Picante 대전광역 출장샵 de 과천 출장안마 Chile 양산 출장안마 Habanero Hot Sauce - 120ml (120ml) is 안성 출장안마 $7.95

    BalasHapus