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
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)
Memunculkan nilai x1 - x5 pada Program/
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:
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.
wah bagus nih, cuma saya masih bingung kapa kita pakai double dan kapan pakai integer ya??
BalasHapussalam,
arandityonarutomo.blogspot.com
terima kasih buat komentarnya. sebenernya lebih bagus pakai double untuk mendapatkan hasil yang lebih akurat.
BalasHapusKarena pada soal diketahui jawabannya tidak ada desimalnya, fungsi integer dipakai agar nilai yang di dapat menjadi bulat.
wah ci, terimakasih untuk penjelasanya. Saya jadi lebih mengerti.
BalasHapusmana algoritmanaya bang?
BalasHapusSemangat terus berkarya Ci, postingannya bagus-bagus.
BalasHapusPosting yang bagus, Ci. Lanjutkan.
BalasHapusmantab ci,tapi font nya jadi gak kelihatan ci
BalasHapusalgoritmanya kok belum ad ya ci, ditunggu ya!1
BalasHapusbung machi, gambarnya bisa dikecilkan gak? ada bagian yg gak keliatan
BalasHapus