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

+ Recent posts