Thursday, October 27, 2011

Perhitungan akar persamaan dengan metode bisection atau metode bagidua

Metode bisection atau metode bagidua merupakan salah satu jenis metode pencarian akar secara incremental yang mana setiap selang dibagi dua. Jika suatu fungsi berubah tanda pada suatu selang, maka nilai fungsi dihitung pada titik tengah. Kemudian lokasi akar ditentukan sebagai terletak pada titik tengah selang bagian tempat terjadinya perubahan tanda. Prosesnya diulang untuk memperoleh taksiran yang diperhalus.

Rumus cek cakupan interval : 

F(XL)*F(XU) < 0

Rumus taksiran akar : 

XR = (XL+XU)/2

Rumus persamaan akar polinom : 

f(x) = a0x0^0 + a1x1^1 + a2x2^2 + … + anxn^n

Rumus cek interval akar :

- Bila akar berada pada interval bawah : F(XL)*F(XR) < 0

- Bila akar berada pada interval atas : F(XL)*F(XR) > 0

- Bila akar setara taksiran (XR) : F(XL)*F(XR) = 0


Kita dapat menuangkan semua rumus-rumus di atas ke dalam sebuah program untuk mempermudah perhitungan akar-akar dari polinom. Berikut ini merupakan langkah algoritma program dalam pembentukkan polinom dan algoritma ketika program mendapat input dari user.

  1. Masukkan nilai derajat tertinggi ke dalam variable N
  2. Masukkan nilai pengali (a) ke dalam variable array NilaiA 
  3. Ulangi langkah 2 sebanyak N+1 kali atau dari N sampai 0 (nilai a dari pangkat tertinggi ke terendah)
  4. Masukkan nilai X taksiran bawah (Lower) -> XL
  5. Masukkan nilai X taksiran atas (Upper) -> XU
  6. Masukkan nilai Error maksimum yang akan dicari -> ES
  7. Masukkan nilai Batas iterasi -> MAXIT
  8. Periksa interval dari perubahan fungsi F(X) dengan rumus F(XL)*F(XU). Jika didapat hasil kurang dari 0 maka perubahan fungsi mencakup seluruh interval.
  9. Jika F(XL) * F(XU) > 0, maka program akan keluar
  10.  Jika F(XL) * F(XU) < 0, maka program melanjutkan dengan menghitung nilai XR (taksiran akar) dengan rumus XR = (XL+XU)/2.
  11. Jika XL+XU tidak sama dengan 0 program menghitung EA (galat)-> Abs((XU - XL) / (XL + XU)) * 100 atau (XRbaru – XRlama) / XRbaru * 100 (hasil sama).
  12. Evaluasi pada variabel XL dan XR untuk menentukan bagian interval. Hasil evaluasi dimasukkan ke variable TEST, dengan rumus F(XL)*F(XR).
  13. Jika TEST = 0 maka EA = 0, berarti akar setara XR (hentikan komputasi).
  14. Jika TEST < 0 maka XU = XR, berarti akar berada pada interval bawah. Tampilkan nilai Iterasi, XL, XU, XR, EA, ES pada listview. Ulangi perhitungan sampai batas iterasi atau batas galat tercapai. 
  15. Jika TEST > 0 maka XL = XR, berarti akar berada pada interval atas. Tampilkan nilai Iterasi, XL, XU, XR, EA, ES pada listview. Ulangi perhitungan sampai batas iterasi atau batas galat tercapai. 
  16. Selesai dan selamat berhitung.

Perwujudan dari algoritma di atas dalam bahasa Visual Basic :

Private Sub Hitung_Click()
 'Definisi Variabel
 Dim XL, XU, XR, ES, EA, MAXIT, ITER, TEST As Double
 XL = Val(txt_XL.Text)
 XU = Val(txt_XU.Text)
 ES = Val(txt_ES.Text)
 MAXIT = txt_MAXIT.Text
ListView1.ListItems.Clear
'Cek Apakah Input Merupakan Numerik
If IsNumeric(XL) = True And IsNumeric(XU) = True And IsNumeric(ES) = True And IsNumeric(MAXIT) = True Then
'    MsgBox Pers(XL) * Pers(XU)
    If Pers(XL) * Pers(XU) < 0 Then
        ITER = 0
        EA = 1.1 * ES
        While EA > ES And ITER < MAXIT
            XR = (XL + XU) / 2
            ITER = ITER + 1
            If XL + XU <> 0 Then
                EA = Abs((XU - XL) / (XL + XU)) * 100
            Else
            End If
            TEST = Pers(XL) * Pers(XR)
            If TEST = 0 Then
                EA = 0
            ElseIf TEST < 0 Then
                XU = XR
            Else
                XL = XR
            End If
            'If EA < ES Then MsgBox "XR = " & XR & ", EA = " & EA & "ITER = " & ITER
            XL = FormatNumber(XL, 8, vbTrue, vbTrue, vbTrue)
            XU = FormatNumber(XU, 8, vbTrue, vbTrue, vbTrue)
            XR = FormatNumber(XR, 8, vbTrue, vbTrue, vbTrue)
            EA = FormatNumber(EA, 8, vbTrue, vbTrue, vbTrue)
            XL = Val(XL)
            XU = Val(XU)
            XR = Val(XR)
            EA = Val(EA)
            With ListView1
                .ListItems.Add , Key:="", Text:=ITER
                .ListItems(ITER).ListSubItems.Add , Key:="", Text:=XL
                .ListItems(ITER).ListSubItems.Add , Key:="", Text:=XU
                .ListItems(ITER).ListSubItems.Add , Key:="", Text:=XR
                .ListItems(ITER).ListSubItems.Add , Key:="", Text:=EA
                .ListItems(ITER).ListSubItems.Add , Key:="", Text:=ES
            End With
        Wend
    End If
Else
    MsgBox "Tentukan Batas Bawah Dan Batas Atas. Ex: XL=-1, XU=2"
End If
End Sub


Monday, October 24, 2011

Polymorphisme dalam pemrograman java

Hari ini tanggal 24 Oktober 2011 terasa sangat panas, sedikit lebih panas dari hari-hari sebelumnya (menurut saya). Pada hari yang panas ini saya mempelajari sebuah sifat dalam pemrograman java yaitu polymorphisme. Apa itu polymorphisme? Polymorphisme dapat digambarkan dengan sebuah objek yang dapat memiliki bermacam-macam sifat. Misal pada variabel yang direferensikan oleh objek dapat melakukan aksi yang berbeda bila tipe objeknya berubah atau diganti.

Ada dua jenis polymorphisme yaitu Override dan Overload. Di dalam java dikatakan bersifat override ketika terdapat method dengan nama, parameter dan tipe data yang sama persis di dalam kelas induk maupun kelas turunannya.


Contoh :
// kelas a sebagai superclass
class a
{
 public void a()
 {
  System.out.println("A");
 }
}

// kelas b sebagai subclass
class b extends a
{
 public void a()
 {
  System.out.println("B");
 }
}

// class utama untuk eksekutor kelas
// dilengkapi dengan method main
public class utama
{
 public  static void main(String[] args)
 {
  a a=new a();
  b b=new b();
  a.a();
  a=b;
  a.a();
 }
}


Overload Polymophisme memiliki perbedaan pada method yang ada. Pada overload polymorphisme terdapat lebih dari satu method dengan nama yang sama tetapi memiliki jumlah parameter maupun tipe data yang berbeda.

Contoh :
// kelas a sebagai superclass
class a
{
 public int ab;
 public void a()
 {
  ab=0;
  System.out.println("A");
 }
 public void a(int ax)
 {
  ab=ax;
  System.out.println("A");
 }
}

// kelas b sebagai subclass
class b extends a
{
 public void a()
 {
  ab=0;
  System.out.println("B");
 }
 public void a(int ax)
 {
  ab=ax;
  System.out.println("B");
 }
}

// class utama untuk eksekutor kelas
// dilengkapi dengan method main
public class utama
{
 public  static void main(String[] args)
 {
  a a=new a();
  b b=new b();
  a.a();
  a.a(10);
  a=b;
  a.a();
  a.a(20);
 }
}
Seperti itulah bentuk polymorphisme dalam java menurut pemahaman yang saya dapatkan. Dan dalam benak saya masih bertanya "seperti apa implementasi sesungguhnya dari polymorphisme ini? dan kenapa harus polymorphisme?" apa karena kehabisan kata-kata untuk membuat nama method? hehe.. entahlah... untuk sementara masih terus belajar. Semoga ada yang terbantu.