Hello
sobat blogger, kali ini saya akan ngepost
mengenai Metode Biseksi. Metode Biseksi adalah metode yang digunakan untuk
menentukan akar persamaan non linier melalui proses iterasi. Awal mula dari metode
ini adalah metode tabel, dimana area dibagi menjadi n bagian. Sedangkan Biseksi
hanya membagi range menjadi dua bagian. Kemudian dari dua bagian dipilih bagian
mana yang mengandung penyelesaian dan bagian yang tidak mengandung penyelesaian
akan dibuang. Hal ini dilakukan secara berulang-ulang sampai nilai eror
mendekati nol. Nilai eror adalah nilai absolut dari y atau f(x). Sebelum
menggunakan Metode Biseksi terlebih dahulu kita tentukan nilai batas bawah (a)
dan batas atas (b). Kemudian cari nilai tengah
(c) dari batas atas dan batas bawah. c = (a+b) / 2. Untuk lebih jelasnya
perhatikan algoritma berikut: (misal f(x)= e–x
– x
- Inisialisasi fungsi f(x) = e^(-x) – x;
- Inisialisasi n = 1;
- Inisialisasi e = 0.00001;
- Tentukan batas atas (xa) dan bats bawah (xb);
- Tentukan banyak iterasi (n);
- Tentukan nilai xc = (xb + xa )2;
- Tentukan fa(xa), f(xb), f(xc);
- Tentukan nilai absolut f(xc);
- Cetak xa, xb, xc, f(xa), f(xb), f(xc);
- Jika f(xa) * (xb) > =0;
- Ya : xa = xc;
- Tidak : xb = xc;
- tambah nilai n dengan 1;
- Jika absolt f(xc)< e atau n >=10;
- Ya : keluar dari perulangan;
- Tidak : kembali ke 5;
- Cetak xa, xb, xc, f(xa), f(xb), f(xc);
Keterangan : n merupakan jumlah seberapa banyak kita
mengulang proses / biseksi.
e merupakan nilai error
Listing :
#include
#include
#include
double fungsi (double);
double biseksi (double, double);
main(){
double x1, x2, fx1, fx2,
indeks, a, temp;
int n, i=1;
puts("\t\t >>>> METODE BISEKSI dan TABEL
<<<<");
puts("\t\t\t\tf(x)=a^2 -
27 ");
printf(" Masukan batas bawah : ");
scanf("%lf",
&x1);
printf(" Masukan batas atas : ");
scanf("%lf",
&x2);
printf(" Masukan banyak iterasi : ");
scanf("%d", &n);
puts("
==========================================================================");
puts("\t\t\t\tMETODE
TABEL");
a = (x2 - x1) / n;
fx1 = fungsi(x1);
fx2 = fungsi(x2);
temp = x1;
puts(" no
x\t fx");
do{
fx1 = fungsi(temp);
fx2 = fungsi(temp+a);
printf(" %3d
%.7lf %.7lf\n",i,temp, fx1);
if (fx1*fx2<=0)
indeks = temp;
fx1 = fx2;
temp = temp + a;
i++;
}while(i<=n);
printf(" Hasil berada diantara %.5lf dan
%.5lf\n\n",indeks, indeks+a );
biseksi(indeks,indeks+a);
}
double fungsi (double a){
double hasil;
hasil =exp(-a)- a;
return hasil;
}
double biseksi (double a, double b){
double c, fd,fb, fc, abs;
int no=1;
puts("\t\t\t\tMETODE
BISEKSI");
puts("
==========================================================================");
printf("\ta\t b\t
c\t\tfa\t fb\t fc\t abs\n");
puts(" ==========================================================================");
for(;;no++){
c = (b +a)/2;
fd = fungsi(a);
fb = fungsi(b);
fc = fungsi(c);
abs= b-a;
printf("%3.d %.7lf
%.7lf %.7lf %.7lf %.7lf %.7lf
%.7lf\n",no, a,b,c,fd,fb,fc, abs);
if (fd*fc>=0)
a = c;
else
b=c;
if (abs<0 .0001="" o:p="">0>
printf("%3.d
%.7lf %.7lf %.7lf %.7lf %.7lf %.7lf
%.7lf\n",no+1, a,b,c,fd,fb,fc, abs);
puts("
==========================================================================");
break;
}
}
printf("\n Nilai x
mendekati : %.9lf\n Nilai fungsi : %.9lf \nNilai absolut %.9lf",c,fc,
abs);
return(0);
}
Output :
Keterangan
: listing program merupakan campuran
metode tabel dan metode biseksi.
Kelemahan
metode Biseksi :
- Proses Iterasi tergolong cukup lambat
- Jika akar persamaan lebih dari satu, makas harus mencari akar satu persatu, tidak bisa sekaligus.\
- Tidak bisa mencari akar bilangan imaginer (kompleks)
Referensi : http://arteraktiv.com/
Sekian untuk post hari ini, semoga bermanfaat sobat. Budayakan untuk berbagi
karena berbagi itu menyenangkan J.
Sekilas motivasi :
Orang-orang
yang melontarkan kritik pada kita hakikatnya adalah pengawal jiwa kita yang
bekerja tanpa bayaran.~Corrie ten Boom.
gan kok gw compile gk bisa . eror pada line 71-79
ReplyDeletebang itu yg line 71 kok eror yg absnya
ReplyDeletebisa,, coba di cek lagi,, ini pake bahasa C
Deletemas minta kodingannya dong, di copas malah error
ReplyDeletekodingnya itu gan,, sama aja,,
Deletepake bahasa C,, coba di cek lagi
mau nanya dong, dibaris 66 o dan p nya kok gak terbaca ya? Thanks
ReplyDelete#include
Delete#include
#include
#include
#define maks 20
main (){
float x[maks][maks], tempx[maks][maks], temp2[maks], temp;
int i,j, f=3, k=0;
char a='`';
cout<<"\n--------------------------------------------------------------------------------\n";
printf("\ Metode Eliminasi Gauss \n");
printf("\ Ax1 + Bx2 + Cx3 + .... =Y \n");
cout<<"\n--------------------------------------------------------------------------------\n";
do{
printf("===> Masukan Jumlah Ordo Matrik : ");
scanf("%d", &f);
}while(f<2);
for(i=0;i Persamaan Ke-%d\n", i+1);
for(j=0;j Nilai %c : ",a+j+1);
scanf("%f", &x[i][j]);
if(j==f-1){
printf("\n---> Nilai y : ");
scanf("%f", &x[i][j+1]);
break;
}
}
}
cout<<"\n--------------------------------------------------------------------------------\n";
printf("\ Hasilnya Adalah Sebagai Berikut \n");
cout<<"\--------------------------------------------------------------------------------\n";
printf("\nDalam Bentuk Augmented Matriks\n");
for(i=0;i<f;i++){
printf("|");
for(j=0;j<f+1;j++){
printf("%5.1f", x[i][j]);
}
printf(" |\n");
}
//tukar
for(i=0;i<3;i++){
if(x[0][0]==0){
for(j=0;j<f+1;j++){
tempx[i][j]=x[0][j];
}
for(j=0;j<f+1;j++){
x[0][j]=x[i+1][j];
}
for(j=0;j<f+1;j++){
x[i+1][j]=tempx[i][j];
}
}
}
//hitung
for(i=0;i<f;i++){
temp=x[i][i];
for(k=i;k<=f;k++){
x[i][k] /= temp;
}
for(j=i+1;j<=f;j++){
temp2[i] = x[j][i];
for(k=i;k<=f;k++){
x[j][k] -= temp2[i] * x[i][k];
}
}
}
puts("");
//cetak
printf("\nSetelah Eliminasi : \n");
for(i=0;i<f;i++){
printf("|");
for(j=0;j<f+1;j++){
printf("%5.1f", x[i][j]);
}
printf(" |\n");
}
puts("");
system("Pause");
}