Ide awal metode ini adalah metode table, dimana area dibagi menjadi N bagian. Hanya saja metode biseksi ini membagi range menjadi 2 bagian, dari dua bagian ini dipilih bagian mana yang mengandung dan bagian yang tidak mengandung akar dibuang.Hal ini dilakukan berulang-ulang hingga diperoleh akar persamaan.
Untuk menggunakan metode biseksi, terlebih dahulu ditentukan batas bawah (a) dan batas atas (b).Kemudian dihitung nilai tengah :
Dari nilai x ini perlu dilakukan pengecekan keberadaan akar. Secara matematik, suatu range terdapat akar persamaan bila f(a) dan f(b) berlawanan tanda atau dituliskan :
f(a) . f(b) < 0
Setelah diketahui dibagian mana terdapat akar, maka batas bawah dan batas atas di perbaharui sesuai dengan range dari bagian yang mempunyai akar.
Berikut adalah sintax program untuk algoritma biseksi :
// Biseksi.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#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("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();
}
Tidak ada komentar:
Posting Komentar