Sunday, October 23, 2011

Metode Bagi Dua - Metode Numerik

Metode bagi dua merupakan salah satu metode dalam pencarian akar, atau dalam penyelesaian dalam sebuah fungsi.
Algoritma metode bagi dua, adalah :
Yang harus diinput adalah : x0, x1, e(epsilon), f(x)
Output yang akan dicari adalah : x2
Keterangan : x0 adalah tebakan awal pertama. Dan x1 adalah tebakan awal kedua. e(epsilon) adalah galat. Biasanya galat telah diketahui dalam soal. f(x) merupakan fungsi.
Pandangan penulis tentang galat, galat merupakan taksiran terhadap kesalahan yang mungkin dibuat oleh pelaksana. Pernahkah anda mendengar bahwa ‘setiap manusia tidak akan lepas dari kesalahan dan kekhilafan’, sekalipun setiap manusia diciptakan sempuran oleh Allah, maka kesalahan itu mungkin saja dilakukan oleh manusia. Oleh karena itulah, galat dicantumkan dalam metode tersebut.
Langkah yang mesti ditempuh :
1.      Penentuan x2. Dimana x2=(x0+x1)/2.
2.      Jika f(x0).f(x1) > 0  maka ‘proses gagal, tebakan awal tidak cocok’. Selesai. Sedemikian sehingga pilihlah tebakan awal yang memenuhi f(x0).f(x1) < 0. Kondisi (x0).f(x1) > 0menggambarkan bahwa fungsi tersebut berada diatas sumbu-x, apabila berada diatas sumbu-x maka fungsi tersebut tidak memiliki akar.
3.      Jika f(x0).f(x1) < 0 maka x1 ganti x2, jika tidak maka x0 ganti x2.
4.      Jika mutlak dari ((x1-x0)/x1) <= e , maka akar tersebut adalahx2. Selesai.
5.      Jika belum memenuhi maka ulangi kembali pada langkah satu.
Keterangan mutlak dari ((x1-x0)/x1)disebut galat relative. Bisa juga kita gunakan galat mutlak yaitu mutlak dari (x1 – x0),
Algoritma diatas, bias digunakan secara manual, atau kita buat aplikasinya dengan software Delphi atau pascal. Biasanya, penulis menggunakan Delphi. Disini akan dipaparkan, bagaimana tampilan dan algoritmanya dalam Delphi.
Tampilannya :

 Algoritma untuk button proses  adalah:

procedure TForm1.ButtonProsesClick(Sender: TObject);
var
  x0,x1,x2,y0,y1,y2,E,m:Real;
begin
  x0:=strtofloat(edit1.Text);
  x1:=strtofloat(edit2.text);
  E:=0.0001;
repeat
  listbox1.items.add(format('%8.4f',[x0]));
  listbox2.Items.add(format('%8.4f',[x1]));
  y0:=f(x0)+g(x0);
  y1:=f(x1)+g(x1);
  x2:=(x0+x1)/2;
  if y0*y1>0 then showmessage ('proses gagal');
  listbox3.Items.add(format('%8.4f',[x2]));
  listbox4.Items.add(format('%8.4f',[y0]));
  listbox5.Items.add(format('%8.4f',[y1]));
  y2:=f(x2)+g(x2);
  listbox6.Items.add(format('%8.4f',[y2]));
  if y0*y2<0 then x1:=x2 else
    x0:=x2;
  m:=abs((x1-x0)/x1);
  listbox7.Items.add(format('%8.4f',[m]));
until
  m<E;
  edit3.Text:=format('%8.4f',[x0]);
end;
catatan : berkenaan dengan E, E merupakan epsilon. Epsilon merupakan galat, biasanya sudah tertera dalam soal. Bagi anda yang sudah mempelajari dasar-dasar dari Delphi, mungkin tidak akan bertanya-tanya secara mendetail.
Mungkin ada yang sedikit tidak anda mengerti pada bagian (format('%8.4f',[m])), kegunaannya sama dengan (floattostr(m)). Bedanya, ketika kita menggunakan koding (floattostr(m)) yang akan ditampilkan merupakan bilangan real tanpa dibatasi dibelakang koma, namun untuk (format('%8.4f',[m])) ada pembulatan sebanyak 4 angka dibelakang koma. Jadi kegunaan dari (format('%8.nf',[m])) untuk pembulatan sebanyak n dibelakang koma.
Selamat mencoba, dan selamat berlatih. Salam pendidikan dari Hilman ‘Sang Generator’ Nuha.

1 comment: