Tuesday 3 April 2012

Penyelesaian Numerik Persamaan Non-Linear (Metode Bisection)

Assalamu'alaikum warahmatullahi wabarakatuh

Sepertinya blog ini sudah mulai dipenuhi sarang laba-labanya, gara-gara tak pernah ditengokin pemiliknya..hehe. Lama tak posting-posting lagi, sebenarnya mau posting sedari kapan tahu, tapi terhambat tugas kuliah terus..hehe *alibi.

Kali ini saya ingin berbagi sedikit bahasan yang saya dapat di kampus, yaitu tentang "Penyelesaian Numerik Persamaan Non-Linear". Di kampus saya mata kuliahnya dinamakan Rekayasa Komputasional. Pada kesempatan ini saya akan berbagi tentang salah satu metode penyelesaiannya, yaitu dengan Metode Bisection. Metode ini merupakan metode yang digunakan untuk mencari solusi akar dari persamaan satu variable = f(x), biasanya digunakan untuk kasus non linear “Sulit”.


Langkah penyelesaian:

a.  Tentukan a, b, toleransi, dan jumlah iterasi maksimum. 
b.  Periksa apakah f(a) x f(b) > 0; jika ya, keluar dari progam karena pada selang yang diberikan tidak terdapat akar persamaan. 
c.  Hitung nilai m = (a + b)/2 
d.  Jika nilai mutlak (b-a) < toleransi, tuliskan m sebagai hasil perhitungan, dan akhiri program; jika tidak, lanjutkan ke langkah berikutnya. 
e.  Jika jumlah iterasi > iterasi maksimum, akhiri program. 
f.  Jika f(a) x f(m) < 0, maka b = m; jika tidak, a = m. 
g.  Kembali ke langkah c.



Disini yang saya akan bahas bukanlah materi tentang apa itu metode bisection, berhubung saya tugasnya membuat program, maka yang saya share disini adalah programnya. Saya menggunakan bahasa pemrograman C untuk menemukan solusi dengan metode bisection ini.


Coding program bisection1.c untuk kasus f(x) = x^2 - 3
#include<stdio.h>
#include<conio.h>
#include<math.h>

float f(float x);
main(){
float a,b,y,r1,r2,r3;
do{
printf("\tMetode Bisection\n");
printf("f(x)=(x*x)-3\n");
printf("masukkan Xl = ");
scanf("%f",&a);
printf("masukkan Xu = ");
scanf("%f",&b);
printf("\n");
r1=f(a);
r2=f(b);
}while(r1*r2>0);
printf("Xl\tXu\tXm\tf(Xm)\n");
printf("_______________________________\n");
do{
r1=f(a);
r2=f(b);
y= (a+b)/2.0;
r3=f(y);
printf( "%.4f\t%.4f\t%.4f\t%.4f",a,b,y,r3);
if(r1*r3<0)
b=y;
else
a=y;
printf("\n");
}while(fabs(r3)>0.0001);
printf("\nApproximate Error = %.4f",y);
printf(" %");
getch();
return 0; }
float f(float x ){
float f1;
f1=(x*x)-3; //fungsi f(x)
return(f1);
}



Coding program bisection2.c untuk kasus f(x) = x^3 + 3*cos(x) - x


// Metode Bisection 
#include <stdio.h> 
#include <conio.h>
#include <math.h> 
#define PHI 3.141592654 
  
float a,m,b,F_a,F_m,F_b,tol; 
int max_iter;
float f(float x) 
  return x*x*x + 3*cos(x*PHI/180) - x; 
int main() 
   int it; 
   float epsilon; 
   printf("Solusi Akar dengan Metode Bisection\n\n"); 
   printf("Batas bawah             = "); scanf("%f",&a); 
   printf("Batas atas              = "); scanf("%f",&b); 
   printf("Toleransi(ex: 0.0001)   = "); scanf("%f",&tol); 
   printf("Jumlah iterasi maksimum = "); scanf("%d",&max_iter); 
   it = 0; 
   F_a = f(a); 
   F_b = f(b); 
   if(F_a * F_b > 0) /*printf("   Nilai F(a) x F(b) > 0\n"); 
   else */
   { 
      printf("It.     a         m         b        f(a)      f(b)"); 
      printf("    abs[f(b)-f(a)]/2\n"); 
      do 
      { 
         it = it + 1; 
         m = (a + b) / 2; 
         F_m = f(b); 
         printf("%3d  %8.5f  %8.5f  %8.5f  %8.5f  %8.5f  %8.2e\n",
                 it,a,m,b,F_a,F_b,fabs(F_b-F_a)/2); 
         epsilon = fabs(m-a); 
         if(F_a * F_m <= 0) { b = m; F_b = F_m; } 
         else { a = m; F_a = F_m; } 
      } while(it <= max_iter && epsilon > tol); 
      if(it<=max_iter) 
      { 
         printf("\nToleransi terpenuhi\n"); 
         printf("Hasil akhir = %g\n",m); 
      } 
      else printf("\nToleransi tidak terpenuhi\n"); 
   } 
   getch();

Disini saya menggunakan software Dev-C++ untuk menjalankannya.
Sekian posting program "Penyelesaian Numerik Persamaan Non-Linear (Metode Bisection)" yang dapat saya bagikan kepada kawan-kawan. Semoga ada manfaatnya! Akhir kata, terima kasih dan ...

Wassalamu'alaikum warahmatullahi wabarakatuh

referensi: http://sutedjo.staff.gunadarma.ac.id/Downloads

9 comments:

  1. mas bisa minta programnya gag?
    nih dicoba tp gagal mlulu

    ReplyDelete
    Replies
    1. aduh kok dipanggil mas?
      bisa-bisa, emailnya apa? pantangan kalo error tapi tetep di share ^^

      Delete
    2. kak mauu juga dong kak buat nyoba nyoba kok error terus yah di conio nya:(

      Delete
  2. kak,,kalo program dalam pascal ada ngga??

    ReplyDelete
    Replies
    1. program pascalnya ada tapi saya belum pernah buat untuk masalah Bisection ini

      Delete
  3. kak, kalau untuk bahasa java da gk untuk kasus bisectionya ^_^

    ReplyDelete
    Replies
    1. wah saya udah ga main codingan lagi mas. Coba pahamin konsep program ini, terus kembangin deh, konsep dari C ke java ga jauh beda kok.

      Delete
  4. Bang boleh minta programnya nggak?
    Kalau boleh ini email saya nurulakhzanmahmud@gmail.com

    ReplyDelete
  5. Bang boleh minta programnya nggak?
    Kalau boleh ini email saya nurulakhzanmahmud@gmail.com

    ReplyDelete

Harry Potter - Golden Snitch Angry Birds -  Red Bird