Sabtu, 24 Maret 2012

Persamaan Aljabar Simultan pada VBA

Kali ini penulis akan mencoba membuat model persamaan aljabar simultan pada VBA.

Berikut adalah contoh soal dari Buku kuliah Versteeg - tentang CFD

---------------------------------------------------------------------------------------------






















---------------------------------------------------------------------------------------------  

Dari soal tersebut, perlu di cari nilai T1, T2, T3, T4 dan T5 jika diketahui nilai Ta dan Tb nya.
Lalu bagaimana membuat VBA-nya??

Berikut adalah langkah-langkahnya :



























Hasilnya :



Penjelasan Algoritmanya :

Pertama-tama buat userform seperti pada gambar hasil.

------------------------------------------------------------------------------------------------------------

Dim a, u As Variant
Dim x1, x2, x3, x4, x5 As Integer
Dim b, c, d, e, f As Double


Dim i As Long
Dim j As Long
ReDim a(1 To 5, 1 To 6)
------------------------------------------------------------------------------------------------------------



Pada fungsi ini mendimensikan variabel a dan u sebagai tipe data varian, variabel x1-x5 sebagai integer, dan b,c,d,e,f sebagai double.

variable i dan j sebagai long
dan mengulangi dimensi a menjadi array (1-5 , 1-6)

Karena untuk membantu memudahkan dalam pemrograman VBA pada aljabar simultan menggunakan array type.


------------------------------------------------------------------------------------------------------------

'step 1


For i = 2 To 5
    If a(1, 1) = 0 Then
    a(i, j) = a(i, j)
    Else
    u = a(i, 1) / a(1, 1)
    For j = 1 To 6
    a(i, j) = a(i, j) - u * a(1, j)
    Next
    End If
Next

------------------------------------------------------------------------------------------------------------

Pada fungsi ini akan maksudnya adalah mengurangi baris 2 sampai 5 dengan baris ke 1 kolom 1dan nilai a(2,2-5) menjadi nol.
1 1 1 1 1 = 1
0 1 1 1 1 = 1
0 1 1 1 1 = 1
0 1 1 1 1 = 1
0 1 1 1 1 = 1


------------------------------------------------------------------------------------------------------------



'step 2
For i = 3 To 5
    If a(2, 2) = 0 Then
    a(i, j) = a(i, j)
    Else
    u = a(i, 2) / a(2, 2)
    For j = 2 To 6
    a(i, j) = a(i, j) - u * a(2, j)
    Next
    End If
Next
------------------------------------------------------------------------------------------------------------

Sama seperti fungsi sebelumnya, hanya pada bagian ini yang menjadi nol adalah baris ke 3 - 5 kolom 2 menjadi nol
1 1 1 1 1 = 1
0 1 1 1 1 = 1
0 0 1 1 1 = 1
0 0 1 1 1 = 1
0 0 1 1 1 = 1


Prinsip ini dipakai terus hingga step 4 menjadi

1 1 1 1 1 = 1
0 1 1 1 1 = 1
0 0 1 1 1 = 1
0 0 0 1 1 = 1
0 0 0 0 1 = 1


Noted:


Setelah ini sebenarnya ada cara yang cukup mudah, yaitu dengan membuat nol lagi seperti ini (yang Insya Allah akan penulis buat lanjutannya) :


1 0 0 0 0 = 1
0 1 0 0 0 = 1
0 0 1 0 0 = 1
0 0 0 1 0 = 1
0 0 0 0 1 = 1



Namun penulis mencoba mencari nilai x1 - x5 dengan cara yang biasa yaitu mengurangi nilai-nilainya yang sudah ada pada matriks :

1 1 1 1 1 = 1
0 1 1 1 1 = 1
0 0 1 1 1 = 1
0 0 0 1 1 = 1
0 0 0 0 1 = 1


dengan rumus :


x5 = a(5, 6) / a(5, 5)
b = a(4, 6) - x5 * a(4, 5)
x4 = b / a(4, 4)
c = a(3, 6) - x5 * a(3, 5) - x4 * a(3, 4)
x3 = c / a(3, 3)
d = a(2, 6) - x5 * a(2, 5) - x4 * a(2, 4) - x3 * a(2, 3)
x2 = d / a(2, 2)
e = x5 * a(1, 5) + x4 * a(1, 4) + x3 * a(1, 3) + x2 * a(1, 2)
f = a(1, 6) - e
x1 = f / a(1, 1)

------------------------------------------------------------------------------------------------------------
TextBox35.Text = x5
TextBox34.Text = x4
TextBox33.Text = x3
TextBox32.Text = x2
TextBox31.Text = x1
------------------------------------------------------------------------------------------------------------

Memunculkan nilai x1 - x5 pada Program/

Selesai, Semoga Bermanfaat.


9 komentar:

  1. wah bagus nih, cuma saya masih bingung kapa kita pakai double dan kapan pakai integer ya??

    salam,

    arandityonarutomo.blogspot.com

    BalasHapus
  2. terima kasih buat komentarnya. sebenernya lebih bagus pakai double untuk mendapatkan hasil yang lebih akurat.
    Karena pada soal diketahui jawabannya tidak ada desimalnya, fungsi integer dipakai agar nilai yang di dapat menjadi bulat.

    BalasHapus
  3. wah ci, terimakasih untuk penjelasanya. Saya jadi lebih mengerti.

    BalasHapus
  4. Semangat terus berkarya Ci, postingannya bagus-bagus.

    BalasHapus
  5. mantab ci,tapi font nya jadi gak kelihatan ci

    BalasHapus
  6. algoritmanya kok belum ad ya ci, ditunggu ya!1

    BalasHapus
  7. bung machi, gambarnya bisa dikecilkan gak? ada bagian yg gak keliatan

    BalasHapus