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);
}

3 comments:

Powered by Blogger.