Sabtu, 17 Maret 2012

Metode Bisection

Ketika ingin membuat posting baru, saya jadi teringat akan 1 mata kuliah yang cukup menarik bagi saya sehingga berniat untuk dibagikan pada postingan ini.
Nah metode numerik dengan sub method nya yang dikenal dengan Metode Bisection atau kata lainnya metode bagi dua.

Metode ini digunakan untuk mencari solusi dari suatu permasalahan yang ada dengan nilai signifikan dan ketentuan error yang telah ditetapkan.

Algoritmanya sendiri tidak begitu rumit dan cukup mudah untuk dipahami,
contoh kasus katakanlah kita mempunyai sebuah data berupa sebuah grafik X2 – 6X + 8 = 0.
dimana solusi sederhana pemecahan masalah tersebut adalah merupakan akar kuadrat dari persamaan tersebut yaitu X1 = 2 dan X2 = 4.

Kemudian bagaimana jika untuk kasus  X1 = 3 dan X2 = 6.
Nahh,, untuk mencari pemecahan masalah dari kasus diatas menggunakan metode bisection, maka perlu melalui suatu ketentuan bahwa masing-masing koordinat fungsi dari perhubungan 2 titik yang ditemukan harus berbeda tanda (+/-), sehingga metode bagi dua dapat dilakukan. dan jika kondisi seperti itu tidak memenuhi, maka metode bagi dua tidak bisa dilakukan.

kita misalkan XL = 3 dan XR = 6 ,,
XL adalah X Left --> terletak diantara titik 2 dan 4.
XL adalah X Right --> terletak setelah titik X=4.

Nah,,jika ditarik koordinat maka (XL,f(XL)) = (3, +),,dan (XR,f(XR)) = (4, -)
Kondisi yang memenuhi untuk perhitungan bisection.

Sehingga dapat dibuatkan suatu aturan Logika Algoritmanya seperti berikut :
1.  Tentukan nilai XL, XR
      Syarat : f(XR) != F(XR) --> beda tanda
2.  Tentukan Errornya berapa,,contoh E = 0.01
3.  Dapatkan nilai XT (X tengah ) = (XL + XR)/2
4.  Hitung F(XT) dengan memasukan Nilai XT pada persamaan X2 – 6X + 8 = 0
5.  Cek kondisi apakah nilai Mutlak hasil fungsi F(XT) kurang dari atau sama dengan Error 
     Jika Ya , maka Solusi adalah XT
     Jika Tidak, maka lakukan pengecekan ulang apakah tanda dari fungsi F(XL) sudah sama dengan 
     fungsi F(XT).
                       Jika Ya , maka tukar nilai XL = XR dan XR = XR
                       Jika Tidak, Tukar nilai XR = XT dan XL = XL
            Setelah itu lanjutkan loop ke langkah nomor 3, hingga Solusi ditemukan dengan semua kondisi terpenuhi maka pencarian selesai.

 Berikut adalah contoh Output Program dengan XL = 3, XR = 6 dan E = 0.01 dengan float 4 desimal.










Source Code :
XP-Emergency
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<math.h>

void main()
{
    float XL,XR,E,FXL,FXR,XT,FXT;
    XL=3; XR=6;  E=0.01;
   int n=1;
   FXT=fabs(FXT);
   printf("\nE = %1.4f\n\n",E);
   printf("No. |  XL   |    XR  |  F(XL)  |  F(XR) |   XT   |   F(XT) |  |F(XT)|<= E\n\n");
   why:
    FXL=pow(XL,2)-6*(XL)+8;
    FXR=pow(XR,2)-6*(XR)+8;

    XT=(XL+XR)/2;
    FXT=pow(XT,2)-6*(XT)+8;

 printf("%d.   %1.4f,  %1.4f,  %1.4f,  %1.4f,  %1.4f,  %1.4f\n" n,XL,XR,FXL,FXR,XT,FXT);


 if (    (FXL*FXR) < 0 ) //agar 1 positif dan 1 negatif
 {
   if ( fabs(FXT) <= E )
     {
         printf("\nSolusi (XT)= %1.4f",XT)
     }

   else
     {
       if ( (FXL*FXT) > 0 )
          {
              XL = XT; XR = XR;
              n=n+1;
              goto why;
          }
       else
          {
             XR = XT; XL = XL;
             n=n+1;
             goto why;
          }
     }
 }

 else
 {
     cout<<"\nTidak Memenuhi Persyaratan";.
 }
    getch();
}

4 komentar: