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+2HASIL 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
Posting Komentar