<- matrix(c(1,2,4,1,1,0,1,1,2), nrow=3, ncol=3, byrow=TRUE) # byrow=TRUE -> disusun per baris
A A
Pertemuan 1: Aljabar Matriks di R
Pengantar Multivariat
Notasi Matrix di R
Untuk membuat suatu matrix di R, gunakan fungsi
matrix(<values>, nrow=<jumlah baris>, ncol=<jumlah kolom>, byrow=TRUE/FALSE)
Argumen byrow
digunakan untuk mengatur apakah matrix disusun per baris atau per kolom.
<- matrix(c(1,2,4,1,1,0,1,1,2), nrow=3, ncol=3, byrow=FALSE) # byrow=FALSE -> disusun per kolom
A A
Tiap baris dan kolom dapat diberikan nama dengan argumen dimnames=list(rownames, colnames)
# Matriks disusun per baris diberikan nama
= c("row1", "row2", "row3")
rownames = c("col1", "col2", "col3")
colnames <- matrix(c(1,2,4,1,1,0,1,1,2), nrow=3, ncol=3, byrow=TRUE, dimnames=list(rownames, colnames))
A A
Dataframe to Matrix
Untuk mengubah suat dataframe menjadi matrix, dapat digunakan fungsi as.matrix()
data(iris)
<- head(iris[, c('Sepal.Length', 'Sepal.Width')])
data <- as.matrix(data)
mat_data mat_data
str(data)
str(mat_data)
Operasi Matrix
Penjumlahan dan Pengurangan
Operasi penjumlahan dan pengurangan pada matriks dapat dilakukan layaknya operasi penjumlahan dan pengurangan pada skalar di R
<- matrix(c(1,1,2,3,1,1,4,1,3), ncol=3, byrow=T)
A <- matrix(c(1,2,3,1,1,4,5,6,7), ncol=3, byrow=T)
B
A B
+ B A
- B A
Perkalian Matriks dengan Skalar
Operasi perkalian pada matriks dapat dilakukan layaknya operasi perkalian pada skalar di R
<- matrix(c(1,1,3,2,1,4), ncol=3, byrow=T)
A <- 2
k
* A k
Perkalian Matriks dengan Matriks
Operasi perkalian matriks dengan matriks harus menggunakan tanda %*%
<- matrix(c(1,1,1,1,2,1), ncol=3, byrow=T)
A <- matrix(c(2,1,1,2,3,1), nrow=3, byrow=T)
B
A
B%*% B A
Melakukan perkalian matriks dengan matriks tanpa menggunakan tanda %
akan melakukan operator lain, yaitu Hadamard Product
<- matrix(c(2,0,-1,4,1,3), ncol=3, byrow=T)
A <- matrix(c(1,3,7,2,0,6), ncol=3, byrow=T)
B
A B
* B A
Transpose
Transpose matriks dapat dilakukan dengan fungsi t()
<- matrix(c(1,1,3,5,2,1,1,0,1,2,3,5), ncol=4, byrow=T)
A A
t(A)
Trace
Untuk penghitungan trace, diperlukan library matlib
dengan fungsi tr()
library(matlib)
<- matrix(c(1,7,6,8,3,9,4,-2,-8), ncol=3, byrow=T) A
Atr(A) # 1 + 3 - 8 = -4
Determinan
Determinan matriks dapat dihitung dengan fungsi det()
<- matrix(c(1,3,2,8,17,21,2,7,1), ncol=3, byrow=T)
A
Adet(A)
Invers
Invers matriks A dapat dihitung dengan fungsi solve(A)
<- matrix(c(1,3,2,8,17,21,2,7,1), ncol=3, byrow=T)
A
Asolve(A)
Power Matrix
Matriks A^n dapat dihitung dengan operator A %^% n
library(expm)
<- 3
n <- matrix(c(1,1,2,3,1,1,4,1,3), ncol=3, byrow=T) A
A%^% n A
Power matrix dalam fungsi dari library expm
ini mengasumsikan nilai n adalah bilangan bulat positif. Jika ingin menggunakan nilai n non bilangan bulat positif.
Square Root Matrix
Dari library expm
, dapat dicari akar kuadrat dari suatu matrix dengan fungsi sqrtm
sqrtm(A)
Bukti:
round(Re(sqrtm(A) %*% sqrtm(A)))
Matriks Identitas
Matriks identitas n x n dapat dengan mudah dibuat menggunakan fungsi diag(n)
<- diag(5)
diag_mat diag_mat
Vektor
Notasi vektor sama dengan membuat suatu matriks dengan ncol=1
<- matrix(c(1,0,2), ncol=1, byrow=T)
x <- matrix(c(2,2,1), ncol=1, byrow=T)
y
x y
Inner Product
print(t(x) %*% y) # bentuk skalar dan simetri
Outer Product
print(x %*% t(y)) # tidak bersifat simetri
Rank Matriks
Untuk menghitung rank matriks, dibutuhkan library Matrix
dengan fungsi rankMatrix()
library(Matrix)
<- matrix(c(5,-14,2,-10,-5,-10,10,2,-4), ncol=3, byrow=T)
A rankMatrix(A)
Bentuk Eselon Baris
Untuk membuat bentuk eselon baris suatu matriks, dibutuhkan library matlib
dengan fungsi echelon()
<- matrix(c(-1,2,0,4,5,-3,3,-7,2,0,1,4,2,-5,2,4,6,1,4,-9,2,-4,-4,7), ncol=6, byrow=T)
A echelon(A, reduced = TRUE)
Eigenvalues
Untuk mencari nilai eigen, gunakan fungsi eigen()
dan akses nilainya dengan $values
<- matrix(c(4,2,2,2,4,2,2,2,4), ncol=3, byrow = TRUE)
A
A<- eigen(A)$values
eig_val eig_val
Eigenvectors
Untuk mencari vektor eigen dari nilai eigen yang bersesuaian, gunakan $vectors
<- eigen(A)$vectors * (-1) # Dikalikan dengan -1
eig_vec eig_vec
Dekomposisi Spectral
Dari eigenvalues dan eigenvector, dapat dibentuk suatu dekomposisi spektral dari suatu matriks.
round(eig_vec %*% diag(eig_val) %*% t(eig_vec))
Dekomposisi Cholesky
Dekomposisi cholesky dari suatu matriks A dapat dilakukan dengan fungsi chol(A)
<- matrix(c(3,0,-3,0,6,3,-3,3,6), ncol=3, byrow=T)
A
Achol(A)
Sehingga dapat dibuktikan A = U`U dengan U matriks segitiga atas dari dekomposisi cholesky matriks A
t(chol(A)) %*% chol(A)
Singular Value Decomposition (SVD)
<- matrix(c(1,0,1,0,1,0), ncol=3, byrow = TRUE)
A
A<- svd(A) svd_A
Nilai diagonal matriks D dapat diakses dengan $d
$d svd_A
Matriks U dapat diakses dengan $u
$u svd_A
Matriks V dapat diakses dengan $v
$v svd_A
Sehingga dapat dibuktikan A = UDV`
$u %*% diag(svd_A$d) %*% t(svd_A$v) svd_A
Ortogonalisasi Matrix (Gram-Schmidt)
Ortogonalisasi matrix dengan proses Gram-Schmidt dapat dilakukan dengan fungsi GramSchmidt()
dari library matlib
.
<- matrix(c( 1:3, 3:1, 1, 0, -2), 3, 3)
A
AGramSchmidt(A)
Bukti:
<- GramSchmidt(A)
A_gs round(A_gs %*% t(A_gs))
Latihan Soal
Diberikan matriks berikut
Carilah nilai:
2.576 x (A + B)
Bx
y`B
x`Ay
Inner product dari x dan x
Inner product dari x dan y
Outer product dari y dan y
Nilai eigen dari A menggunakan
eigen()$values
dan hitung tanpa bantuan kode. Apakah nilainya sama?Vektor eigen dari A menggunakan fungsi
eigen()$vectors
dan hitung tanpa bantuan kode. Apakah nilainya sama?Matriks U, D dan V dari singular value decomposition pada invers dari matriks B