Monday, November 5, 2018

Metode Biseksi (Bagi Dua) dan Contoh Program C++

Artikel Anakit kali ini membahas mengenai Metode Biseksi atau biasa Disebut Metode Bagi Dua, kemudian Program C++ Metode Biseksi sebagai program implementasi dari metode tersebut. Metode ini biasanya dijumpai dalam pembelajaran Metode Numerik dalam ruang lingkup Persamaan Non Linier. Dan sebenarnya terdapat 6 Metode. Salah satunya Biseksi. 

 

Dalam Anakit.id juga sudah dipost Metode lainnya seperti Metode Regula Falsi dan Contoh Program C++.

Metode Biseksi / Bagi Dua;
Untuk proses metode ini, pertama tentukan batas bawah (a) dan batas atas (b). Tentukan f(a) dan f(b), dengan cara  a dan b masing-masing dimasukkan ke persamaan.

Contoh persamaan x^3+4* x^2-10, a = 1 dan b = 2
Jadi f(a) = a^3+4* a^2-10 = .....( cari sendiri)
 Dan f(b) = b^3+4* b^2-10 = .... (cari sendiri)

Kemudian hitung nilai tengah dengan rumus.
x= a + b / 2 (rumus biseksi mencari x)

kemudian, nilai x tersebut dilakukan pengecekan keberadaan akar secara matematis. Karena suatu range terdapat akar persamaan apabila f(a).f(b) < 0. Bagaimana jika lebih dari nol? Yang langkah selanjutnya tidak bisa dilakukan karena sama sekali tidak memiliki akar persamaan.

Berikut dibawah ini adalah Algoritma secara rincih Metode Biseksi

  1. Definisikan fungsi f(x) yang akan dicari akarnya.
  2. Tentukan nilai a dan b
  3. Tentukan toleransi error (e) dan batas iterasi maximum (n)
  4. Hitung f(a) dan  f(b)
  5. Jika f(a).f(b) > 0, maka proses dihentikan karena tidak memiliki akar, jika tidak lanjut ke langkah selanjutnya.
  6. Hitung x = a + b / 2
  7. Hitung f(x)
  8. Bila f(a).f(x)<0, maka b=x dan f(b)=f(x), bila tidak a=x dan f(a)=f(x).
  9. Jika |b-a|< e atau iterasi > n, maka proses dihentikan 

Dari kesembilan langkah diatas dapat diimplementasikan dalam program c++, berikut Script Program Metode Biseksi/Bagi Dua dalam C++.


#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <windows.h>
using namespace std;
void gotoxy(int x, int y){
 COORD coord;
 coord.X = x;
 coord.Y = y;
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}
double f(double z)
{
 double panggil=(pow(z,3.0))+(4*pow(z,2.0))-(10);
 return panggil;
}
int main () {
menu: 
double a,b,e,x,error=1;
int n;
cout<<"------------------------------------------------------------------------------------------------------------------------------ \n";
cout<<"|                                                     Metode Biseksi / Bagi Dua                                              | \n";
cout<<"------------------------------------------------------------------------------------------------------------------------------ \n";
cout<<" Masukkan Batas Atas       : ";cin>>a;
cout<<" Masukkan Batas Bawah      : ";cin>>b;
cout<<" Masukkan Toleransi Error  : ";cin>>e;
cout<<" Masukkan Iterasi Maximum  : ";cin>>n;
double Fa=f(a);
double  Fb=f(b);
if (Fa*Fb>0)
{
 gotoxy(2,9);cout<<"F(a)*F(b) :"<<f(a)*f(b);
 gotoxy(2,10);cout<<f(a);
  gotoxy(2,11);cout<<f(b); 
 gotoxy(2,12);cout<<"Tidak ada akar di antara kedua batas persamaan \n";
 system("pause");
 system("cls");
 goto menu;
 
} else {
gotoxy(2,10);cout<<"----------------------------------------------------------------------------------------------------------------------------- \n";
gotoxy(2,11);cout<<"|Literasi|       a       |      b      |      x      |       f(x)      |      f(a)      |        f(b)      |      Error     | \n";
gotoxy(2,12);cout<<"------------------------------------------------------------------------------------------------------------------------------ \n";
for(int iterasi=1;iterasi<=n;iterasi++){ 
x=(a+b)/(2);
gotoxy(2,12+iterasi);cout<<"|";
gotoxy(6,12+iterasi);cout<<iterasi;
gotoxy(11,12+iterasi);cout<<"|";
gotoxy(13,12+iterasi);printf("%1.10f",a);
gotoxy(27,12+iterasi);cout<<"|";
gotoxy(29,12+iterasi);printf("%1.10f",b);
gotoxy(41,12+iterasi);cout<<"|";
gotoxy(43,12+iterasi);printf("%1.10f",x);
gotoxy(55,12+iterasi);cout<<"|";
gotoxy(57,12+iterasi);printf("%1.10f",f(x));
gotoxy(73,12+iterasi);cout<<"|";
gotoxy(75,12+iterasi);printf("%1.10f",Fa);
gotoxy(90,12+iterasi);cout<<"|";
gotoxy(92,12+iterasi);printf("%1.10f",Fb);
gotoxy(109,12+iterasi);cout<<"|";

if(f(a)*f(x)<0){
 b=x;
 Fb=f(x);
}else{
 a=x;
 Fa=f(x);
}
error=fabs(b-a);
gotoxy(111,12+iterasi);printf("%1.10f",error);
gotoxy(126,12+iterasi);cout<<"|";
if (error < e){
gotoxy(1,13+iterasi);cout<<"------------------------------------------------------------------------------------------------------------------------------ \n";
iterasi=n+1;
}}}}
Didalam program tersebut sudah lengkap dari kesembilan algoritma biseksi yang sudah dituliskan diatas. Program ini menggunakan Dev-C++ dan kebetulan anakit menggunakan perulangan For saja. Mungkin lain waktu akan dishare dengan perulangan do While atau While.

Sebenarnya jika anda sudah melihat Metode Regula Falsi dan Contoh Program C++ yang sudah terlebih dahulu dipostingkan. Program keduanya tidaklah jauh beda,  karena perbedaannya hanya pada rumus pencarian nilai x dan pengambilan nilai error. Selainnya sama saja. Jika ada yang bingung dalam program diatas. Di artikel Metode Regula Falsi dan Contoh Program C++ sudah anakit jelaskan secara rincih. 

Dari program tersebut, maka berikut tampilan dan hasil Program C++ Metode Biseksi

Gambar hasil Program c++ Metode Biseksi

Hanya sekian yang bisa disampaikan, semoga artikel tentang Metode Regula Falsi dan Contoh Program C++ ini bermanfaat. Jika ada yang ingin ditanyakan silahkan sampaikan melalui kolom komentar yang sudah tersedia.


EmoticonEmoticon