METODE BAGI DUA (Bisection Method)
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.
Langkah – langkah dalam menyelesaikan Metode Bagi Dua :
Langkah 1 :
Pilih a sebagai batas bawah dan b sebagai batas atas untuk taksiran akar sehingga terjadi perubahan tanda fungsi dalam selang interval. Atau periksa apakah benar bahwa f(a) . f(b) < 0
Taksiran nilai akar baru, c diperoleh dari :
Langkah 2 :
Menentukan daerah yang berisi akar fungsi:
Langkah 3 :
- Jika z merupakan akar fungsi, maka f(x < z) dan f(x > z) saling berbeda tanda.
- f(a)*f(c) negatif, berarti di antara a & c ada akar fungsi.
- f(b)*f(c) positif, berarti di antara b & c tidak ada akar fungsi
Menentukan kapan proses pencarian akar fungsi berhenti:
Langkah 4 :
Proses pencarian akar fungsi dihentikan setelah keakuratan yang diinginkan dicapai, yang dapat diketahui dari kesalahan relatif semu.
Contoh implementasi dalam bahasa pemrograman delphi :
Listng source code program sebagai berikut :
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Grids;
type
TForm3 = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label5: TLabel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
StringGrid1: TStringGrid;
GroupBox2: TGroupBox;
Label3: TLabel;
Edit4: TEdit;
Label7: TLabel;
Edit5: TEdit;
GroupBox3: TGroupBox;
Label4: TLabel;
Label6: TLabel;
procedure BitBtn1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
procedure TForm3.BitBtn1Click(Sender: TObject);
const g=9.8;v=40;t=10;
var m,a,b,c,fa,fb,fc,fca,err:Real;
iterasi:byte;
begin
Stringgrid1.RowCount:=1;
Stringgrid1.Cols[0].Add('ITERASI');
Stringgrid1.Cols[1].Add('A');
Stringgrid1.Cols[2].Add('B');
Stringgrid1.Cols[3].Add('C');
Stringgrid1.Cols[4].Add('F(c)');
Stringgrid1.Cols[5].Add('Error');
m:=strtofloat(edit3.Text);
a:=strtofloat(edit1.Text);
b:=strtofloat(edit2.Text);
iterasi:=1;
fa:=0;
fb:=0;
err:=0;
fca:=0;
fc:=0;
repeat
c:=(a+b)/2;
fc:=((g*m)/c)*(1-exp(-((c/m)*t)))-v;
edit4.Text:=floattostr(c);
edit5.Text:=floattostr(fc);
err:=((fc-fca)/fc)*100;
Stringgrid1.RowCount:=Stringgrid1.RowCount+1;
Stringgrid1.Cols[0].Add(floattostr(iterasi));
Stringgrid1.Cols[1].Add(floattostr(a));
Stringgrid1.Cols[2].Add(formatfloat('#0.00',b));
Stringgrid1.Cols[3].Add(formatfloat('#0.00',c));
Stringgrid1.Cols[4].Add(formatfloat('#0.00',fc));
Stringgrid1.Cols[5].Add(formatfloat('#0.00',abs(err))+'%');
if fc>0 then
b:=c
else
a:=c;
iterasi:=iterasi+1;
fca:=fc;
until (abs(err)<=0.5) or (abs(err)<=0.1);
end;
procedure TForm3.FormShow(Sender: TObject);
begin
edit1.Text:='';
edit2.Text:='';
edit3.Text:='';
edit4.Text:='';
edit5.Text:='';
edit3.SetFocus;
Stringgrid1.RowCount:=1;
Stringgrid1.Cols[0].Add('ITERASI');
Stringgrid1.Cols[1].Add('A');
Stringgrid1.Cols[2].Add('B');
Stringgrid1.Cols[3].Add('C');
Stringgrid1.Cols[4].Add('F(c)');
Stringgrid1.Cols[5].Add('Error');
edit3.SetFocus;
end;
procedure TForm3.BitBtn2Click(Sender: TObject);
begin
edit1.Text:='';
edit2.Text:='';
edit3.Text:='';
edit4.Text:='';
edit5.Text:='';
Stringgrid1.RowCount:=1;
Stringgrid1.Cols[0].Add('ITERASI');
Stringgrid1.Cols[1].Add('A');
Stringgrid1.Cols[2].Add('B');
Stringgrid1.Cols[3].Add('C');
Stringgrid1.Cols[4].Add('F(c)');
Stringgrid1.Cols[5].Add('Error');
edit3.SetFocus;
end;
procedure TForm3.BitBtn3Click(Sender: TObject);
begin
form3.Close;
end;
end.
Sekian dulu dari saya...semoga bermanfaat !
No comments:
Post a Comment