Loading [MathJax]/jax/output/CommonHTML/jax.js
2019-06-25 12:22:07

2차 정방행렬(정사각형행렬)의 역행렬을 구하는 법은 고등학교 수학과정을 배운 사람이라면 모두 다 알 것이다. 다음과 같은 2차 정방행렬이 있다.

 

A=[1234]

 

이 행렬의 역행렬은 다음과 같다. 

 

A1=12[4231]

 

방금 나는 아래 공식에 따라 역행렬을 구했다. 아마 익숙한 공식일 것이다. 

 

2차 정방행렬의 역행렬 구하는 공식

그런데 이 공식은 2차 정방행렬에만 적용될 수 있다. 만약 정방행렬의 차수가 3차, 4차,..., n차라면 역행렬을 어떤 방식으로 구할 수 있을까? 오늘은 바로 그에 대한 해결책에 대해 살펴보려고 한다. 

 

가우스-요르단 소거법으로 n차 정방행렬의 역행렬 구하기

가역(invertible)인 n차 정방행렬의 역행렬은 가우스-요르단 소거법으로 구할 수 있다. 가역이라는 것은 역행렬이 존재한다는 뜻이다. 가우스-요르단 소거법의 기본적인 아이디어는 다음과 같다.

 

"AX = I(항등행렬)라면 X는 A의 역행렬일 것이다. AX의 좌변을 IX로 바꿔주기 위해 기본행연산(elementary row operation)을 해주면, 그에 따라 우변도 바뀌게 될 것이고, 그 우변의 값이 바로 A의 역행렬을 의미하게 된다."

 

자, 이 말이 무슨 뜻인지 천천히 하나하나 살펴보자. 일단 기본행연산연립방정식의 해를 바꾸지 않으면서 행렬을 변형하는 방법들로 다음과 같은 것들을 포함한다.

 

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

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

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

 

여기서 행렬의 각 행은 각 일차방정식을 의미한다. 우리가 연립일차방정식의 해를 구할 때를 생각해보자. 해를 구하기 위해 어떤 일차방정식에는 상수배를 해주기도 하고, 또 상수배를 곱한 일차방정식을 또다른 일차방정식에서 더해주거나 빼주기도 한다. 그리고 각 일차방정식의 나열 순서는 계산 편의에 따라 바꿔주기도 한다. 이런 과정들을 해준다고 그 연립일차방정식의 해가 바뀌었던가? 그렇지 않았다. 해는 결국 동일했다. 

 

이러한 기본행연산을 행렬로 나타낸 것을 기본 행렬(elementary matrix)이라고 한다. 보통 E라고 표기한다.

 

우리는 AX=I의 좌변에 여러 개의 기본행렬을 곱해줘서 AXIX로 변하게 하고 싶다. 이것을 행렬의 곱으로 나타내면 다음과 같이 나타낼 수 있다.

 

ErEr1...E2E1AX=ErEr1...E2E1I

 

IX=ErEr1...E2E1I

 

어떤 행렬에 항등행렬을 곱해주면 행렬 그 자신이 나오므로, 

 

X=ErEr1...E2E1 

 

이다. 따라서 A의 역행렬 A1ErEr1...E2E1이다. X가 A의 역행렬이라고 위에서 언급했었다. 

 

가우스-요르단 소거법으로 3차 정방행렬의 역행렬 구하기 예제

아마 위 증명 과정이 막연하게 느껴지실 수도 있을 것 같다. 예제를 통해서 가우스-요르단 소거법을 좀 더 확실히 이해해보자. 다음과 같은 3차 정방행렬이 있다. 

 

A=[211460272] 

 

가우스-요르단 소거법을 이용해서 A의 역행렬을 구해보자.

 

AX=I라면 X는 A의 역행렬일 것이다. 여기서 X와 I는 모두 3차 정방행렬이다. 기본행렬을 좌변과 우변의 왼쪽에 곱해주어 좌변의 A를 I로 바꿔줄 것이다. 그 결과 우리는 X, 즉 A의 역행렬을 알게 된다. 자, 이제 시작해보자. 

 

AX=I

 

[211460272]X=[100010001] 

 

먼저 A가 대각 성분 아래쪽이 모두 0인 상삼각행렬(upper triangular matrix)이 되도록 기본행연산을 해줄 것이다. 이를 위해 두번째 행과 세번째 행에서 첫번째 행의 상수배를 각각 빼준다.  

 

[211082083]X=[100210101]

 

두번째 행에서는 첫번째 행을 2배한 것을 빼줬고, 세번째 행에서는 첫번째 행을 1배한 것을 더해줬다(-1배한 것을 빼줬다). 이번에는 세번째 행에서 두번째 행의 상수배를 빼준다. 

 

[211082001]X=[100210111]

 

세번째 행에서 두번째 행을 1배한 것을 더해줬다(-1배한 것을 빼줬다). A가 상삼각행렬로 변형되었다. pivot은 2, -8, 1인 것을 알 수 있다. 이제 상삼각행렬이 대각행렬(diagonal matrix)이 되도록 기본행연산을 해줄 것이다. 대각행렬이란 대각성분을 제외하고는 모든 성분이 0인 행렬을 의미한다. 첫번째 행과 두번째 행에서 세번째 행의 상수배를 빼서 각 행의 세번째 성분이 0이 되게 하자.  

 

[210080001]X=[211432111]

 

첫번째 행에서는 세번째 행을 1배한 것을 빼줬고, 두번째 행에서는 세번째 행을 2배한 것을 더해줬다(-2배한 것을 빼줬다). 이번에는 첫번째 행의 두번째 성분이 0이 되게 하기 위해서 첫번째 행에서 두번째 행의 상수배를 빼주자.

 

[200080001]X=[325834432111]

 

첫번째 행에서 두번째 행을 1/8배 해준 것을 더해줬다(-1/8배 해준 것을 빼줬다). 그 결과 A가 대각행렬이 되었다. 이제 각 대각요소를 1로 만들어주자. 각 행을 적당한 상수를 곱해주면 된다. 첫번째 행은 1/2을 곱해주고, 두번째 행은 -1/8을 곱해주고, 세번째 행은 그대로 둔다(1로 곱해준다).

 

[100010001]X=[3451638123814111]  

 

여기서 X의 왼쪽이 항등행렬 I이므로, 

 

X=[3451638123814111]

 

이다. 이 X가 바로 A의 역행렬이다. 

 

이 예제에서 우리는 3차 정방행렬의 역행렬을 구해봤는데, 4차, 5차,..., 100차 정방행렬의 역행렬도 동일한 방식으로 구할 수 있다. 이런 알고리즘을 개발해냈다는 것이 참 놀랍다.

 

 

<참고자료>

[1] 박부성 지음, "8일간의 선형대수학", 경문사

[2] Gilbert Strang 지음, "Linear algebra and its applications (제4판)", BROOKS/COLE CENGAGE Learning