지난번 포스팅에서는 특수한 형태의 행렬, 제로행렬(zero matrix), 전치행렬 (transpose matrix), 대칭행렬 (symmetric matrix), 상삼각행렬 (upper triangular matrix), 하삼각행렬 (lower triangular matrix), 대각행렬 (diagonal matrix), 항등행렬 또는 단위행렬 (identity matrix, I, or unit matrix, U) 등에 대해서 알아보았습니다.

 

이번 포스팅에서는 역행렬(the inverse of a matrix, invertible matrix)에 대해서 소개하겠습니다.  역행렬은 사용처가 많은 중요한 개념이므로, 아래의 정의, 계산 방법, 존재 여부 확인하는 방벙을 숙지하면 좋겠습니다.

 

 

  • 역행렬 (the inverse of a matrix, invertible matrix)

 

역행렬은 n차정방행렬 Amn과의 곱이 항등행렬 또는 단위행렬 In이 되는 n차정방행렬을 말합니다. A*B 와 B*A 모두 순서에 상관없이 곱했을 때 단위행렬이 나오는 n차정방행렬이 있다면 역행렬이 존재하는 것입니다.

 

 

 

아래에 예를  하나 들어봤습니다.

 

 

역행렬은 (1) 가우스 소거법(Gauss-Jordan elimination method), (2) 여인수(cofactor)를 이용해서 풀 수 있습니다. 여인수를 이용한 방법은 복잡해서 보통 가우스 소거법을 주로 사용하는데요, 이번 포스팅에서는 먼저 가우스 소거법을 소개하고, 다음번 포스팅에서 여인수(cofactor)를 이용한 역행렬 구하는 방법을 알아보겠습니다.

 

가우스 소거법은 기본행연산(elementary row operation)을 이용하여 위의 행렬의 곱의 왼쪽 행렬을 단위행렬로 바꾸어가는 과정이라고 보면 되겠습니다. 



[참고] 기본 행연산 (elementary row operation)


   1. 행렬의 한 행을 상수배한다. 

   2. 행렬의 두 행을 맞바꾼다. 

   3. 한 행을 상수배하여 다른 행에 더한다. 


 

 

[ 가우스 소거법 예시 (Gauss-Jordan elimination method) ]

 

 

 

 

 

R로 역행렬을 풀때는 MASS 패키지의 ginv() 함수를 사용합니다.

 

> # the inverse of a matrix, invertible matrix
> raw_data <- c(1, 2, 3, 4)
> A_1 <- matrix(raw_data, byrow=TRUE, nrow=2)
> A_1
     [,1] [,2]
[1,]    1    2
[2,]    3    4
> library(MASS)
> ginv(A_1)
     [,1] [,2]
[1,] -2.0  1.0
[2,]  1.5 -0.5
> A_1%*%ginv(A_1)
             [,1]          [,2]
[1,] 1.000000e+00 -6.661338e-16
[2,] 8.881784e-16  1.000000e+00

 

 

 

base 패키지의 solve() 함수를 사용해도 동일합니다.

 

> solve(A_1)

      [,1] [,2]

[1,] -2.0  1.0

[2,]  1.5 -0.5



 

 

역행렬이 존재하는 n차정방행렬을 정칙행렬(nonsingular matrix)라고 하며, 역행렬이 존재하지 않는 행렬을 특이행렬(singular matrix)라고 합니다.

 

 

역행렬이 존재하는지 여부를 확인하는 방법으로 행렬식(determinant, 줄여서 det)이라는 지표를 사용하는데요, 이 행렬식이 '0'이 아니면 역행렬이 존재하고, 이 행렬식이 '0'이면 역행렬이 존재하지 않습니다.

 

 

[ 역행렬이 존재하는 조건 : det(A) ≠ 0 ]

 

 

 

 

행렬식의 값은 n값에 따라서 달라지는데요, 2차와 3차정방행렬의 행렬식 구하는 공식만 아래에 소개하도록 하겠습니다.

 

 

[ 2차, 3차정방행렬의 행렬식 공식, SARRUS method ]

 

 

 

 

2차정방행렬의 경우 역행렬이 존재하는지를 확인하고 역행렬을 구하는 간단한 공식이 있는데요, 아래 식을 참고하시기 바랍니다.  아래와 같은 공식은 2차정방행렬에만 존재하므로, 3차 이상의 연립방정식을 풀려면 위에서 소개한 가우스 소거법은 알아두시는게 좋겠습니다.

 

 

 

다음번 포스팅에서는 여인수(cofactor)를 이용한 역행렬 계산 방법(☞ 바로가기) 에 대해서 소개하겠습니다.

 

많은 도움이 되었기를 바랍니다.

 

행렬, 벡터 관련 포스팅은 아래 링크를 걸어놓았습니다.

 

행렬 기본 이해

특수한 형태의 행렬

여인수를 활용한 역행렬 계산

행렬의 기본 연산 (+, -, *, /, ^, %*%, 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)


 

이번 포스팅이 도움이 되었다면 아래의 공감 ♡ 꾸욱~ 눌러주세요. ^^


Posted by R Friend R_Friend

댓글을 달아 주세요

  1. 박상원 2016.01.09 17:49  댓글주소  수정/삭제  댓글쓰기

    좋은 글 감사합니다
    마지막 역행열 공식은 오타가 있네요.^^
    ad -bc

  2. 질문 2016.05.01 19:11  댓글주소  수정/삭제  댓글쓰기

    질문이 있는데요. 1행1열 원소가 0일 경우는 가우스 소거법을 쓸 수 없는 건가요?

    • R Friend R_Friend 2016.05.01 19:57 신고  댓글주소  수정/삭제

      답변부터 하자면, 쓸 수 있을 수도 있고, 없을 수도 있습니다.

      (1) 쓸 수 있는 경우 :
      (첨가)행렬에 기본행연산(elementary row operation)을 적용해서 행사다리꼴(row echelon form)으로 만들어가는 과정이 가우스 소거법인데요, 만약 1행1열이 '0'이라면 기본행연산(elementary row operation)에 "행렬의 두 행을 맞바꾼다"를 적용해서 1행1열이 '0'이 아닌 행으로 맞바꾸면 됩니다. 그렇게 맞바꾼 후에 기본행연산의 '행렬의 한 행을 상수배'하거나 '한 행을 상수배하여 다른 행에 더하는' 과정을 반복해서 행사다리꼴로 만들 수 있다면 가우스 소거법이 가능하게 되겠지요.

      (행사다리꼴 포스팅 참고 ☞ [선형대수] 행 사다리꼴(Row echelon form), 계수(Rank), 그리고 선형연립방정식 해의 존재성(existence)과 유일성(uniqueness) : http://rfriend.tistory.com/179 )

      (2) 쓸 수 없는 경우:
      행렬식(determinant)를 구했더니 '0'인 경우는 역행렬이 존재하지 않는 것이므로 가우스 소거법으로 풀 수가 없겠지요? (1행 1열이 '0'이든 아니든지 말이예요)

    • 질문 2016.05.02 11:40  댓글주소  수정/삭제

      정말 고맙습니다. 학교에서 강의 들어도 이해 못하던 내용을 블로그 포스팅해 주신 내용 보고 이해하고 있어요. 다시 한 번 감사드립니다.