15. matrix 판별식 det(A), 역행렬 solve(A)와 사용자 정의함수
A <- matrix(c(1, -1, 2, 3), nrow=2)
A
# [,1] [,2]
#[1,] 1 2
#[2,] -1 3
#### 2by2 matrix의 determinant 구하기 ####
# A(a b,c d) D(A) = ad-bc
# 1. 사용자 정의 함수로 det() 흉내내기
det_f <- function(A){
d <- A[1, 1] * A[2, 2] - (A[1, 2] * A[2, 1])
return(d)
}
det_f(A)
# 2. 내장함수 쓰기 det()
det(A)
#### 2by2 matrix의 역행렬(inverse) 구하기 ####
# 앞에 1/(ad-bc) 곱하기
# a와 d 바꾸기 + b와 c에 - 달아주기
# 1. 사용자 정의함수
inv_f <- function(A){
B = matrix(, nrow=2, ncol=2) # 빈행렬이지만, 2by2 폼 만들어놓기
B[1, 1] <- A[2, 2]
B[2, 2] <- A[1, 1]
B[1, 2] <- -(A[1, 2])
B[2, 1] <- -(A[2, 1])
# 1/ad-bc 곱해주기
B <- (1/det(A)) * B
return( B )
}
inv_f(A)
# 2. 검산 A %*% A역행렬 = I (단위행렬)
( A %*% inv_f(A) )
# 3. 역행렬 내장함수 solve()와 검산
# ****1.1234134214 e-16같은게 나오면, 전체를 반올림 해주면 된다.
solve(A)
A %*% solve(A)
# [,1] [,2]
#[1,] 1.000000e+00 0
#[2,] 1.110223e-16 1
round( A %*% solve(A) , 10)
# [,1] [,2]
#[1,] 1 0
#[2,] 0 1