Anda di halaman 1dari 2

Bahasa Program: R+

Deskripsi Program: Membuat sebuah program untuk menghitung nilai inverse dari
matriks [A] yang merupakan hasil perkalian [A]^-1 * [A] = [I]

# Mendefinisikan Variabel Global

'Mengingat dimensi matriks adalah 10*10


Global const Orde = 10 'MAX_DIM / orde matriks

Global System_DIM As Integer


Global Matriks_A(1 to Orde, 1 to Orde) 'Mendefinisikan matriks [A] sebagai matriks
input (dengan batasan dari 1 hingga Orde)
Global Matriks_Proses_Kalkulasi(1 to Orde, 1 to 2*Orde) 'Mendefinisikan sebuah
matriks untuk dikalkulasikan pada program (dengan batasan dari 1 hingga Orde dan 1
hingga 2*Orde)
Global Matriks_Invers(1 to Orde, 1 to Orde) 'Mendefinisikan matriks invers [A]
(dengan batasan dari 1 hingga Orde)
Global Matriks_Transpos(1 to Orde, 1 to Orde) 'Mendefinisikan matriks transpos [A]
(dengan batasan dari 1 hingga Orde)
Global Matriks_Perkalian(1 to Orde, 1 to Orde)
'Hasil kali matriks [A] * [A]^-1 = [I], harus selalu berupa matriks identitas

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

# Mendefinisikan Perintah 'hitung_invers'

Sub hitung_matriks_invers()

On Error GoTo errhandler 'Untuk kasus saat matriks inversnya tidak ada (determinan
= 0)

Solution_Problem = False

# Memindahkan nilai dari matriks [A] yang ada di ruas kiri (nilai sudah diinput
user)
For q = 1 To System_DM
For p = 1 To System_DIM
Matriks_Proses_Kalkulasi(p,q) = Matriks_A(p,q)
Next
Next

# Memasukkan nilai dari matriks identitas [I] yang ada di ruas kanan
For q = 1 To System_DM
For p = 1 To System_DIM
If q = p Then 'maksudnya itu diagonal matriks
Matriks_Proses_Kalkulasi(p,q) = 1 'diagonal matriks identitas itu
nilainya 1
Else
Matriks_Proses_Kalkulasi(p,q) = 0 'sisanya 0
End If
Next
Next

# Membuat matriks [A] di ruas kiri menjadi matriks singular (dengan cara membagi
For k = 1 to System_DIM
'
If Matriks_Proses_Kalkulasi(k,k) = 0 Then 'kalau diagonal matriksnya ada yang 0
For q = k To System_DIM
If Matriks_Proses_Kalkulasi(q,k) <> 0 Then Baris_Matriks = q: Exit For
Next q
'Kemudian nilai elemen matriks pada baris ke-q, yakni a_(k,q) ditukar
dengan a_(q,k)
For p = k To 2*System_DIM
Nilai_Tukar_1 = Matriks_Proses_Kalkulasi(k,p) 'menyimpan nilai elemen
matriks a_(k,p) pada Matriks_Proses_Kalkulasi
Matriks_Proses_Kalkulasi(k,p) =
Matriks_Proses_Kalkulasi(Baris_Matriks,p)
Matriks_Proses_Kalkulasi(Baris_Matriks,p) = Nilai_Tukar_1
Next p
End If

elemen_diagonal_1 = Matriks_Proses_Kalkulasi(k,k) 'Menyimpan elemen matriks


a_(k,k) yang terletak di diagonal matriks
For q = k To 2*System_DIM
Matriks_Proses_Kalkulasi(k,q) = Matriks_Proses_Kalkulasi(k,q) /
elemen_diagonal_1 'Membagi elemen matriks yang berada pada satu baris dengan elemen
diagonal pada baris tersebut
Next q

For q = 1 To System_DIM
If q = k And q = Orde Then Exit For 'Selesai menghitung hingga indeks =
Orde
If q = k And q < Orde Then q = q+1 'Nilai N naik hingga q = Orde lalu
program keluar dari If
If Matriks_Proses_Kalkulasi(q,k) <> 0 Then 'Kalau nilai 0, hasil baginya
tetap 0
Koefisien_Pembanding_1 = Matriks_Proses_Kalkulasi(q,k) /
Matriks_Proses_Kalkulasi(k,k)
For p = k To 2*Orde
Matriks_Proses_Kalkulasi(q,p) = Matriks_Proses_Kalkulasi(q,p) -
Matriks_Proses_Kalkulasi(k,p) * Koefisien_Pembanding_1
Next p
End If
Next q
Next k

# Memasukkan nilai pada Matriks Proses Perkalian ke Matriks Invers


For q = 1 To System_DIM
For k = 1 To System_DIM
Matriks_Invers(q,k) = Matriks_Proses_Kalkulasi(q,Orde+k)
Next k
Next q

Exit Sub

errhandler:
message$ = "Sebuah kesalahan terjadi pada proses kalkulasi. Kemungkinan determinan
matriks [A] = 0."
response = MsgBox(message$,vbCritical)
Solution_Problem = True

End Sub

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Anda mungkin juga menyukai