Dosen Pengampu : Prof. Dr. Suhartono, M.Kom
Lembaga : Universitas Islam Negeri Maulana Malik Ibrahim Malang
Jurusan : Teknik Informatika
Fakultas : Sains dan Teknologi
Disini kita akan membahas tentang bagaimana caranya menyelesaikan persamaan aljabar linier menggunakan R pada RStudio dengan berbaimacam metode penyelesaiana yang ada.
Misalkan saja diberikan vektor u dan v yang ditunjukkan pada Persamaan (6.1).
Untuk lebih memahami operasi tersebut, berikut penulis berikan contoh penerapannya pada R:
u <- seq(1,5)
v <- seq(6,10)
# penjumlahan
u+v
## [1] 7 9 11 13 15
# penguranga
u-v
## [1] -5 -5 -5 -5 -5
Bagaimana jika kita melakukan operasi dua vektor, dimaana salah satu vektor memiliki penjang yang berbeda?. Untuk memnjawab hal tersebut, perhatikan sintaks berikut:
x <- seq(1,2)
u+x
## Warning in u + x: longer object length is not a multiple of shorter object
## length
## [1] 2 4 4 6 6
Berdasarkan contoh tersebut, R akan mengeluarkan peringatan yang menunjukkan operasi dilakukan pada vektor dengan panjang berbeda. R akan tetap melakukan perhitungan dengan menjumlahkan kembali vektornu yang belum dijumlahkan dengan vektor x sampai seluruh elemen vektor u dilakukan operasi penjumlahan.
Operasi lain yang dapat dilakukan pada vektor adalah menghitung inner product dan panjang vektor. Inner product dihitung menggunakan Persamaan (6.4).
Berikut adalah contoh bagaimana cara menghitung inner product dan panjang vektor menggunakan R:
# inner product
u%*%v
## [,1]
## [1,] 130
# panjang vektor u
sqrt(sum(u*u))
## [1] 7.416198
Misalkan kita memiliki 2 buah matriks A dan B.
Untuk lebih memahaminya, berikut disajikan contoh operasi penjumlahan pada matriks:
A <- matrix(1:9,3)
B <- matrix(10:18,3)
C <- matrix(1:6,3)
# penjumlahan dengan skalar
A+1
## [,1] [,2] [,3]
## [1,] 2 5 8
## [2,] 3 6 9
## [3,] 4 7 10
# penjumlahan A+B
A+B
## [,1] [,2] [,3]
## [1,] 11 17 23
## [2,] 13 19 25
## [3,] 15 21 27
Operasi pehitungan lain yang penting pada matriks adalah operasi perkalian matriks. Perlu diperhatikan bahwa untuk perkalian matriks, jumlah kolom matriks sebelah kiri harus sama dengan jumlah baris pada matriks sebelah kanan. Perkalian antara dua matriks disajikan pada Persamaan (6.9).
Am.n×Bn.r=ABm.r (6.9)
Pada R perkalian matriks dilakukan menggunakan operator %*%. Berikut adalah contoh perkalian matriks pada R:
# Perkalian matriks
A%*%B
## [,1] [,2] [,3]
## [1,] 138 174 210
## [2,] 171 216 261
## [3,] 204 258 312
Terdapat tiga buah operasi dasar pada baris matriksoperasi baris elementer. Ketiga operasi ini akan menjadi dasar operasi sub-chapter selanjutnya. Ketiga operasi dasar tersebut antara lain:
Row Scalling. Mengalikan baris matriks dengan konstanta bukan nol.
Row Swaping. Menukar urutan baris pada sebuah matriks (contoh: menukar baris 1 dengan baris 2 dan sebaliknya).
Row Replacement. Baris matriks diganti dengan hasil penjumlahan atau pengurangan baris matriks tersebut dengan baris matriks lainnya, dimana baris matriks lainnya yang akan dijumlahkan/dikurangkan dengan matriks tersebut telah dilakukan proses row scalling. Luaran yang diperoleh pada umumnya adalah nilai nol pada baris matriks awal atau akhir.
Ketiga proses tersebut akan terjadi secara berulang, khusunya jika kita hendak mengerjakan sistem persamaan linier menggunakan algoritma eliminasi Gauss. Untuk mempermudah proses tersebut, kita dapat membuat masing-masing fungsi untuk masing-masing operasi tersebut. Algoritma fungsi-fungsi tersebut selanjutnya menjadi dasar penyusunan algoritma fungsi-fungsi eliminasi Gauss dan dekomposisi matriks yang akan dijelaskan pada chapter selanjutnya.
Fungsi row scalling pada R dapat dituliskan pada sintaks berikut:
scale_row <- function(m, row, k){
m[row, ] <- m[row, ]*k
return(m)
}
Berikut adalah contoh penerapannya:
# membuat matriks A
(A <- matrix(1:15, nrow=5))
## [,1] [,2] [,3]
## [1,] 1 6 11
## [2,] 2 7 12
## [3,] 3 8 13
## [4,] 4 9 14
## [5,] 5 10 15
# lakukan scaling pada row 2 dengan nilai 10
scale_row(m=A, row=2, 10)
## [,1] [,2] [,3]
## [1,] 1 6 11
## [2,] 20 70 120
## [3,] 3 8 13
## [4,] 4 9 14
## [5,] 5 10 15
Row swapping merupakan proses yang berulang, kita perlu menyimpan terlebih dahulu baris matriks pertama kedalam sebuah objek. Baris matriks pertama selanjutnya diganti dengan baris matriks kedua, sedangkan baris matriks kedua selanjutnya akan diganti dengan baris matriks pertama yang telah terlebih dahulu disimpan dalam sebuah objek. Fungsi row swapping pada R dapat dituliskan pada sintaks berikut:
swap_row <- function(m, row1, row2){
row_tmp <- m[row1, ]
m[row1, ] <- m[row2, ]
m[row2, ] <- row_tmp
return(m)
}
Berikut merupakan contoh penerapan fungsi swap_row():
# pertukarkan baris 2 dengan baris 5
swap_row(m=A, row1=2, row2=5)
## [,1] [,2] [,3]
## [1,] 1 6 11
## [2,] 5 10 15
## [3,] 3 8 13
## [4,] 4 9 14
## [5,] 2 7 12
Pada proses row replacement, proses perhitungan dilakukan dengan melakukan penjumlahan suatu baris matriks dengan baris matriks lainnya dengan terlebih dahulu melakukan row scalling terhadap matriks lainnya. Berikut adalah fungsi replace_row() yang ditulis pada R:
replace_row <- function(m, row1, row2, k){
m[row2, ] <- m[row2, ] + m[row1, ]*k
return(m)
}
Berikut adalah contoh penerapan fungsi replace_row():
replace_row(m=A, row1=1, row2=3, k=-3)
## [,1] [,2] [,3]
## [1,] 1 6 11
## [2,] 2 7 12
## [3,] 0 -10 -20
## [4,] 4 9 14
## [5,] 5 10 15
Pada pembahasan metode eliminasi gaus ini saya akan menjelaskan tentang Eliminasi Gauss-Jordan. Metode eliminasi Gauss-Jordan membentuk matriks menjadi bentuk reduced row echelon form. Metode ini merupakan pengembangan metode eliminasi Gauss, dimana matriks sebelah kiri augmented matrix diubah menjadi matriks diagonal (lihat Persamaan (6.17)).
1.Masukkan matriks A dan vektor B beserta ukurannya n
2.Buat augmented matrix [A|B] namakan dengan A
3.Untuk baris ke-i dimana i=1 s/d n
- Perhatikan apakah nilai ai.i sama dengan nol:
- Bila ya: pertukakan baris ke-i dan baris ke-i+≤n, dimana ai+k.i tidak sama dengan nol, bila tidak ada berarti perhitungan tidak bisa dilanjutkan dan proses dihentikan dengan tanpa penyelesaian.
- Bila tidak: lanjutkan Jadikan nilai diagonalnya menjadi satu dengan cara untuk setiap kolom dimana k = 1 s/d n + 1, hitung ai.k=ai.kai.i.
4.Untuk baris ke-j, dimana j=i+ 1 s/d n. Lakukan operasi baris elementer untuk kolom k dimana k = 1 s/d n.
- Hitung c=aj.i
- Hitung aj.k=aj.k−c.ai.k
5.Penyelesaian untuk i = n s/d 1 disajikan pada Persamaan (6.18).
Dari algoritma tersebut, kita dapat membangun sebuah fungsi menggunakan R. Fungsi tersebut adalah sebagai berikut:
gauss_jordan <- function (a){
m <- nrow (a)
n <- ncol (a)
piv <- 1
# cek elemen diagonal utama apakah bernilai nol
for(row_curr in 1:m){
if(piv <= n){
i <- row_curr
while(a[i, piv] == 0 && i < m){
i <- i + 1
if(i > m){
i <- row_curr
piv <- piv + 1
if(piv > n)
return (a)
}
}
# jika diagonal utama bernilai nol,lakukan row swapping
if(i != row_curr)
a <- swap_row(a, i, row_curr)
# proses pembentukan matriks reduced row echelon form
piv_val <- a[row_curr , piv]
a <- scale_row (a, row_curr , 1 / piv_val)
for(j in 1: m){
if(j != row_curr){
k <- a[j, piv]/a[row_curr, piv]
a <- replace_row (a, row_curr, j, -k)
}
}
piv <- piv + 1
}
}
return (a)
}
Dengan menggunakan fungsi gauss_jordan(), sistem persamaan linier pada Contoh 6.3:
(m <- matrix(c(1,2,1,4,3,8), nrow=2))
## [,1] [,2] [,3]
## [1,] 1 1 3
## [2,] 2 4 8
gauss_jordan(m)
## [,1] [,2] [,3]
## [1,] 1 0 2
## [2,] 0 1 1
Contoh 6.4 Dengan menggunakan fungsi gauss_jordan(), carilah penyelesaian sistem persamaan linier pada Contoh 6.1 dan Contoh 6.2: Jawab:
Untuk Contoh 6.1:
am <- c(1,1,2,
1,2,1,
1,-1,2,
6,2,10)
m <- matrix(am, nrow=3)
gauss_jordan(m)
## [,1] [,2] [,3] [,4]
## [1,] 1 0 0 1
## [2,] 0 1 0 2
## [3,] 0 0 1 3
Untuk Contoh 6.2:
m <- matrix(c(2,3,1,1,2,-5,
-1,-2,4,1,1,3),
nrow=3)
gauss_jordan(m)
## [,1] [,2] [,3] [,4]
## [1,] 1 0 0 1
## [2,] 0 1 0 2
## [3,] 0 0 1 3
This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
summary(cars)
## speed dist
## Min. : 4.0 Min. : 2.00
## 1st Qu.:12.0 1st Qu.: 26.00
## Median :15.0 Median : 36.00
## Mean :15.4 Mean : 42.98
## 3rd Qu.:19.0 3rd Qu.: 56.00
## Max. :25.0 Max. :120.00
You can also embed plots, for example:
Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.