R (4) 역행렬(inverse of a matrix, invertible matrix) : ginv(), 여인수(cofactor)
R 분석과 프로그래밍/R 선형대수 2015. 12. 2. 01:33지난 포스팅에서는 가우스 소거법(Gauss-Jordan elimination method)을 활용한 역행렬 계산방법을 알아보았습니다. (☞ 바로가기)
이번 포스팅에서는 여인수(cofactor)를 이용한 역행렬(the inverse of a matrix, invertible matrix) 계산 방법에 대하여 소개하도록 하겠습니다.
이를 이해하기 위해서는 (1) 소행렬식(minor determinant), (2) 여인수(cofactor), (3) 수반행렬(adjoint matrix)에 대해서 먼저 알아보고 나서, 그 다음에 (4) 여인수를 이용한 역행렬 계산 방법을 소개하겠습니다.
(1) 제 (i, j) 소행렬식 (minor determinant)
제 (i, j) 소행렬식이란 n차정방행렬의 i행과 j열을 제거하고 만든 부분행렬의 행렬식(determinant)을 말합니다. i행과 j열이 제거되어서 원래 행렬 A보다 행과 열이 하나씩 작아진 행렬을 가지고 행렬식을구하기 때문에 소행렬식(minor determinant, minor of entry aij)이라고 부릅니다.
아래 3*3 행렬식 A를 예로 들어서 소행렬식을 풀어보겠습니다.
위의 9개 소행렬식 중에서 "제(1, 1) 소행렬식"을 어떻게 구했는지에 대해서 이미지로 표시해보면 아래와 같습니다. 아래의 방식을 9개 소행렬식 모두에 차례로 적용한 것입니다.
R로 행렬식 값 구할 때는 det() 함수를 사용합니다.
> # determinant : det() > M11 <- matrix(c(1, 2, 0, 4), byrow = TRUE, nrow = 2) > det(M11) [1] 4
|
참고로, 2차정방행렬과 3차정방행렬의 행렬식(determinant) 구하는 공식은 아래와 같습니다.
(2) 여인수 (cofactor)
여인수는 제(i, j) 소행렬식에 (-1)^(i+j)를 곱한 것이며, cofactor의 앞 대문자를 따서 Cij 로 표기합니다.
(Mij 는 소행렬식, minor determinant)
[ 여인수 정의 (definition of cofactor) ]
[ 여인수 행렬 (matrix of cofactors) ]
아래에 3 by 3 행렬 A의 여인수를 구하는 예를 들어보았습니다. 위에 (1)번에서 구해봤던 소행렬식(minor determinant) Mij에 (-1)^(i+j) 를 곱하면 제(i, j) 여인수가 됩니다.
(3) 수반행렬 (adjoint matrix)
수반행렬(adjoint matrix)은 여인수 행렬(matrix of cofactors)의 전치행렬(transpose matrix)를 말하며, adjoint matrix의 앞글자를 따서 adj(A)라고 표기합니다.
[ 여인수 행렬(matrix of cofactors)과 수반행렬 (adjoint matrix)의 관계 ]
위의 3 by 3 행렬 A에 대해서 여인수 행렬(matrix of cofactors) Cij를 바로 위에서 풀어보았는데요, 이 여인수행렬의 전치행렬(transpose matrix)인 수반행렬(adjoint matrix) 예시를 아래에 제시해보았습니다.
(4) 여인수를 활용한 역행렬 계산 (invertible matrix by using cofactors)
여인수를 활용한 역행렬 계산 방식은 아래와 같습니다. 아래 공식처럼 역행렬(the inverse of a matrix)은 수반행렬(adjoint matrix)를 행렬식(determinant)으로 나눈 값입니다. 왜 위에서 소행렬식, 여인수, 수반행렬을 먼저 차례로 살펴보았는지 이제야 이해하실 수 있을 것입니다.
위에서 줄곧 예시로 들었던 3 by 3 정방행렬 A에 대해 여인수를 활용한 역행렬을 구해보면 아래와 같습니다.
[ 여인수를 활용한 역행렬 계산 예시
(example of invertible matrix caculation by using cofactor) ]
위의 역행렬 계산 문제를 R의 MASS패키지 내 ginv() 함수로 풀어보면 아래와 같습니다.
> # the inverse of a matrix, invertible matrix > A <- matrix(c(1, 0, 1, 0, 1, 2, -1, 0, 4), byrow = TRUE, nrow = 3) > A [,1] [,2] [,3] [1,] 1 0 1 [2,] 0 1 2 [3,] -1 0 4 > library(MASS) > options(digits=2) > ginv(A) [,1] [,2] [,3] [1,] 0.8 -3.3e-16 -0.2 [2,] -0.4 1.0e+00 -0.4 [3,] 0.2 0.0e+00 0.2
|
R base패키지의 solve() 함수를 이용해서 역행렬을 구해도 결과는 동일합니다.
> A <- matrix(c(1, 0, 1, 0, 1, 2, -1, 0, 4), byrow = TRUE, nrow = 3) > A [,1] [,2] [,3] [1,] 1 0 1 [2,] 0 1 2 [3,] -1 0 4 > solve(A) [,1] [,2] [,3] [1,] 0.8 0 -0.2 [2,] -0.4 1 -0.4 [3,] 0.2 0 0.2
|
R로 단 1줄이면 풀어지는 문제에 대해서 컴퓨터는 뒤에서 안보이게 위에서 소개했던 절차들, 즉, 소행렬식, 여인수, 수반행렬을 구하고 그 다음에 역행렬을 구하는 과정을 거쳤을 것입니다. 우리 대신 일해주는 컴퓨터가 있어서 얼마나 좋은 세상인지 모르겠습니다.
많은 도움 되었기를 바랍니다.
행렬, 벡터 관련 포스팅은 아래 링크를 걸어놓았습니다.
☞ 행렬 기본 이해
☞ 행렬의 기본 연산 (+, -, *, /, ^, %*%, colMeans(), rowMeans(), colSums(), rowSums())
☞ 벡터의 기본 이해와 연산 (vector: addition, subtraction, multiplication by scalar)
☞ 벡터의 곱 (1) 내적 (inner product, dot product, scalar product, projection product)
☞ 벡터의 곱 (2) 외적 (outer product, cross product, vector product, tensor product)
이번 포스팅이 도움이 되었다면 아래의 공감 ♡ 꾸욱~ 눌러주세요. ^^
'R 분석과 프로그래밍 > R 선형대수' 카테고리의 다른 글
R (6) 벡터의 곱 - [1] 내적 (inner product, dot product, scalar product, projection product) (4) | 2015.12.08 |
---|---|
R (5) 벡터(Vector)의 기본 이해와 연산 (합, 차, 스칼라배) (1) | 2015.12.05 |
R (3) 역행렬(inverse of a matrix, invertible matrix) : ginv(), 가우스 소거법(Gauss-Jordan elimination method) (5) | 2015.12.01 |
R (2) 특수한 형태의 행렬 (0) | 2015.11.30 |
R (1) 행렬의 기본 개념 (2) | 2015.11.27 |