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(){
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
mas bisa minta programnya gag?
ReplyDeletenih dicoba tp gagal mlulu
aduh kok dipanggil mas?
Deletebisa-bisa, emailnya apa? pantangan kalo error tapi tetep di share ^^
kak mauu juga dong kak buat nyoba nyoba kok error terus yah di conio nya:(
Deletekak,,kalo program dalam pascal ada ngga??
ReplyDeleteprogram pascalnya ada tapi saya belum pernah buat untuk masalah Bisection ini
Deletekak, kalau untuk bahasa java da gk untuk kasus bisectionya ^_^
ReplyDeletewah saya udah ga main codingan lagi mas. Coba pahamin konsep program ini, terus kembangin deh, konsep dari C ke java ga jauh beda kok.
DeleteBang boleh minta programnya nggak?
ReplyDeleteKalau boleh ini email saya nurulakhzanmahmud@gmail.com
Bang boleh minta programnya nggak?
ReplyDeleteKalau boleh ini email saya nurulakhzanmahmud@gmail.com