Metode Numerik dalam C++: Metode Bagi Dua

Gambar Grafik Metode bagi dua


Metode Bagi Dua

Metode ini termasuk metode pengurung. Misalkan f(x) merupakan fungsi yang kontinu dengan akar r yang belum diketahui. Maka kita akan melakukan nilai tebakan awal a dan b dengan nilai fungsi f(a) dan f(b) sehingga f(a).f(b)<0. Dan kemudian dicari nilai c = (a+b)/2.
1. Jika f(c) = 0, maka akarnya adalah c.
2. Jika f(a)*f(c)<0, maka b diganti c akarnya terdapat pada interval [a,c]
3. Jika f(c)*f(b)<0, maka a diganti c akarnya terdapat pada interval [b,c]
            Pada gambar paling kiri nilai c merupakan akar dari persamaan. Lalu pada gambar yang tengah, nilai akar dari persamaan berada di interval antara a dan c dan gambar paling kanan nilai akar berada di antara nilai b dan c.
Iterasi ini dilakukan terus menerus sehingga didapatkan nilai (b-a)<epsilon. Dengan nilai epsilon yang bervariasi tergantung tingkat keakuratan yang dinginkan.

 Berikut ini saya akan memberikan contoh program di C++ untuk fungsi f(x) = 2^x -5x+2

HASIL KELUARAN PROGRAM:

Output Program


SOURCE CODE C++ :
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <cmath>
#include <iomanip>

using namespace std;

float f(float x);

int main()
{
float x1,x2,xr,error,tol;
int i=1;
cout<<"========METODE BAGI DUA======="<<endl<<endl;;
cout<<"f(x) =2^x-5x+2"<<endl;
//User menginput nilai x1 dan x2
cout<<"Masukkan batas bawah persamaan(x1): "; cin>>x1;
cout<<"Masukkan batas atas persamaan (x2): ";cin>>x2;
if (f(x1)*f(x2)>0){
do{
    cout<<"Masukkan lagi x1 dan x2 sehingga f(x1)*f(x2)<0"<<endl;
    cout<<"Masukkan batas bawah persamaan(x1): "; cin>>x1;
    cout<<"Masukkan batas atas persamaan (x2): ";cin>>x2;
    }
while (f(x1)*f(x2)>0);
}

cout<<"Masukkan nilai batas error: ";cin>>tol;

{
cout<<setw(5)<<"i"<<setw(15)<<"x1"<<setw(20)<<"x2"<<setw(20)<<"xr"<<setw(20)<<"f(x1)";
cout<<setw(20)<<"f(x2)"<<setw(20)<<"f(xr)"<<setw(20)<<"error"<<endl;
do
{
xr=(x1+x2)/2;
error= abs(x2-x1);
cout<<setw(5)<<i<<setw(15)<<x1<<setw(20)<<x2<<setw(20)<<xr<<setw(20)<<f(x1)<<setw(20);
cout<<f(x2)<<setw(20)<<f(xr)<<setw(20)<<error<<endl;
if(f(x1)*f(xr)<0)
{x2=xr;}
else
{x1=xr;
}
i++;
}
while( (error > tol) && (i < 40));
cout<<"Approx. root = "<<xr<<endl;
cout<<"Banyaknya iterasi : "<<i-1;

}
getch();
return 0;
}
float f(float x)
{
return (pow(2,x)-(5*x)+2);
}

Komentar

Postingan populer dari blog ini

Pelajaran Penting dari Pasar Saham yang Crash di Tahun 2020

Pengalaman Menabung Emas di Indogold (Cara Daftar, Beli, Jual, Cetak Emas)

Analisis Fundamental Saham dan Laporan Keuangan