이 책을 처음 읽게된 계기는 이전에 읽었던 "완벽한 공부법"에서 "인간관계론"에 관한 예찬글을 보고 도대체 어떤 책이길래 이토록 저자가 예찬을 할까? 하는 호기심에 의해 읽기 시작하게 되었다. 사실 처음에 제목만 보고 서점에 널리고 널린 흔한 자기계발서 중에 하나일 것 같다는 생각이 들었다. 뭔가 뻔하고 고리타분한 이야기만 할 것 같고..


막상 뚜껑을 열어보니 역시나 당연한 말들을 나열했다. 부모님이나 선배가 조언을 한답시고 이러쿵 저러쿵 이야기를 하면 겉으로는 듣는척 해도 속으로는 다른 생각을 하고 있을 것만 같은 그런 이야기들 말이다. 예를 들면 사람들에게 비판, 비난, 불평을 삼가라, 칭찬을 하라, 다른 이에게 관심을 가져라, 웃어라 등등 듣기만 해도 너무 뻔한 이야기어서 귀를 닫고 싶은 생각이 들 정도다. 


하지만 단순히 이러한 뻔한 이야기들만 나열한 것이 아니라 구체적 사례를 들어가며 이러한 행동들이 어떤 사람과의 좋은 관계를 형성하는데에 왜 중요한지에 대해 이야기 했다. 그리고 사실 너무나 뻔한 이야기들 이지만, 뻔한 만큼 반박할 여지가 별로 없는 옳은 이야기라는 생각이 들기도 하다. 단지 그 중요성을 망각한채 살아갈 뿐이다. 


책에서는 사람을 잘 다루기 위한, 그리고 사람들과 좋은 관계를 맺기 위한 여러 가지 조언들을 구체적인 사례와 함께 해주고 있다. 제시된 방법들의 근간에는 결국 남에게 인정받고 자신의 존재 가치를 드러내고자 하는 인간의 욕망이 기저에 깔려있다. 여러 조언들 중에 가장 중요한 포인트는 결국 그 사람을 "인정"하는 것이다. 사람이라면 누구든 자신의 존재 가치를 인정받고 싶어하는 마음이 있고, 이를 위해 부단히 애를 쓴다. 부모에게 인정받기 위해 공부를 열심히 하는 학생, 회사에서 상사 혹은 동료들에게 인정받고자 열심히 일하는 회사원, 남성들에게(혹은 여성?) 자신의 미모를 인정받기 위해 열심히 외모를 가꾸는 여성들, 학생들에게 인정받기 위해 열심히 강의를 하는 교수, 선생님 혹은 강사들.. 대부분의 사람들은 누군가에게 인정받는 사람이 되고자 하는 속성이 있다. 바로 이 속성을 이용하자는 것이다. 그 사람에게 관심을 기울이고, 또한 그 사람의 관심사에 대해 이야기를 나누는 것, 그 사람의 의견에 대한 비판을 삼가하고 그 사람의 이름을 기억해 주는 것, 그 사람의 능력에 대해 아첨이 아닌 진심으로 칭찬을 해주는 것 등은 모두 그 사람을 "인정"한다는 것이다. 이러한 인정의 기술들을 이용하여 적이나 다름 없었던 사람과 둘도 없는 친구가 되거나, 도저히 딸 수 없었던 계약을 따낸 사례 등을 통하여 우리에게 인간관계에 관한 기술을 가르친다. 


필자도 이 책을 읽고 나서 이 기술을 한 번 써먹었던 적이 있다. 회화 학원에서 영어를 배우던 중 그 달의 마지막 수업날에 평소에 쓰던 essay가 아니라 영어로 감사 편지(thank you note)를 적어서 선생님께 제출했다. 사실 원래는 수업에서 좋았던 점, 아쉬웠던 점에 대한 feedback을 하려고 했지만, 책에서 배운 비판을 삼가라, 진심으로 칭찬하라 등을 떠올리며 아쉬웠던 점은 빼고 당신의 수업이 구체적으로 왜 좋았는지 솔직하고 진심을 담은 감사 편지를 썼다. 여기서 중요한 것은 "진심"이다. 그 결과 너무나 행복해하는 답장을 받을 수 있었고 덩달아 나도 행복한 기분이었다. 


사실 이 방법이 별거 아닌데, 주변 사람들에게 사용하기가 왜 이렇게 힘이 든지 모르겠다. 아마도 익숙하지 않아서, 혹은 진심을 담기가 힘들어서 인 것 같다. 진심을 담으려면 그 사람이 진짜 대단하다고 느끼거나 해야하는데, 설령 그렇지 않다 하더라도, 그 사람만의 장점을 보려는 노력이 필요하다. 그것이 설령 작은 것이라고 해도 말이다. 



마지막으로 필자가 책에서 소름끼치게 공감한 구절을 공유하며 서평을 마칠까한다.  



"사람들이 여러분을 기피하고 등 뒤에서 비웃으며, 심지어는 경멸하게 만들고 싶다면 이렇게 하면 된다. 상대의 말을 끝까지 듣지 말라. 여러분 자신에 대해 끊임없이 얘기하라. 다른 사람이 얘기하는 도중에 어떤 생각이 떠오르면 그의 말이 끝날 때까지 기다리지 말라. 그는 당신만큼 똑똑하지 않다. 왜 그의 쓸데없는 얘기를 들으며 시간을 낭비해야 하는가? 즉시 입을 열어 말을 중간에 끊어버려라."



필자는 위의 구절을 보는 순간 너무나 소름끼쳐서 빨간펜으로 별표를 할 정도였다. 필자 주변에 정말 이와 똑같은 행동을 하는 사람이 있고, 솔직히 말하자면 경멸할 정도다. 그는 오직 자기 자신만이 관심사고 오로지 자신의 이야기만 하며, 자신이 듣고 싶은 답을 들을 때 까지 끊임 없이 자신의 주장만을 펼치는 스타일이다. 오로지 내가 세상의 주인공이며 어딜가나 내가 중심이 되어야 한다는 사고방식을 내재하고 있는 사람으로 판단된다. 필자를 비롯한 많은 주변사람들은 이를 오래전부터 느끼고 점점 멀리하고 있는데, 정작 본인은 아직도 깨닫지 못하고 자신의 주변에서 사람들이 점차 떨어져 나가는 것을 느끼지 못하는 것 같다. 한 편으로는 소름 끼치게 싫지만, 한 편으로는 안타까운 마음도 조금은 있다. 그러나 feedback을 해줄 순 없다. 자신을 비판하는 것을 견딜 수 없어하며, 자신 보다 말도 안되게 뛰어난 사람이 아닌 이상 남의 말이나 조언을 들으려 하는 타입이 아니기 때문이다. 아마 조물주 정도가 와서 이야기 하면 들을 것 같긴 하다. 



최근 들어 다양한 경험을 하며 인간관계 때문에 좋기도 했지만 속앓이도 했던 탓인지, 뻔한 내용이면서도 공감가는 부분이 상당히 많았다. 이 책을 통해 나 자신을 되돌아 보는 계기가 되었고, 무엇 보다 중요한 것은 이 배운 내용들을 실제로 적용하는 것이 아닐까? 


이번 포스팅에서는 지난 Lecture 18에 이어 determinant에 대한 포스팅을 하려고한다. 지난 시간에는 determinant에 대한 10가지 특성을 배웠다면, 이번 시간에는 determinant의 실제 계산 방법에 대해 다룰 것이다. 이번 강의의 목적은 determinant의 계산 공식을 이해하는 것이다. 설명하는 과정에서 Lecture 18에서 배웠던 특성들을 많이 언급하므로 이번 강의를 보기 전에 지난 강의를 먼저 보고 오기를 추천한다

 

 

1. 행렬식의 계산 방법과 공식(Determinant Formulas)

 

- Determinant split

 

지난 시간에 우리는 determinant의 세 가지 주요 특성들에 대해 배웠다. 이를 기반으로 나머지 7개의 특성을 정의할 수 있었고, 총 10개의 determinant의 특성들에 대해 정리하였다. 이 중 가장 중요한 처음 세 가지 특성들을 2x2 행렬을 통해 다시금 정리해보자. determinant의 계산 공식을 유도하기 위해서 말이다. 

 

prop. (1)은 단위 행렬의 determinant가 1임을 나타내었다. 또한 prop. (2)는 행 교환(row exchange)을 했을 때, 부호가 바뀌는 것을 의미한다. 이때 row exchange의 횟수가 홀수번(odd)이면 -1, 짝수번(even)이면 부호는 그대로이다. 

 

 

prop. (3)는 (3)-1과 (3)-2로 나누어져 있는데, (3)-1은 하나의 row에 곱해진 scale상수를 밖으로 뺄 수 있다는 것이었고, (3)-2는 하나의 row에 대해서 나머지 row는 그대로 유지한 채 분리해서 정리할 수 있다는 것이었다. 여기서는 (3)-2에 대해서 다시 정리해보자. 

 

 

지난 강의에서는 row 1에 [a' b']이 더해진 것을 가정하고 [a b]와 [a' b']에 대한 determinant로 각각 나누어서 정리하였다. 그러나 이번엔 row2는 그대로 유지한 채, 기존의 [a b]를 [a 0]와 [b 0]에 대해서 나누어 정리하였다. 이렇게 나누어 정리해도 determinant는 같음을 알 수 있다. 식 (2)의 우변은 row1을 분리하여 정리한 것인데, 여기서 row2를 기준으로 한 번 더 분리하여 정리해보자. 우선 첫 번째 determinant식의 row1=[a 0]를 그대로 유지한 채 row2=[c d]를 분리하여 정리하고, 마찬가지로 최 우측의 row1=[0 b]을 유지한 채 row2를 분리하여 정리하면 아래 식과 같다. 

 

 

이렇게 하여 prop. (3)을 이용하여 행렬식을 분리하여 정리하였다. 이렇게 분리하니 식이 많아지긴 했지만 각각의 계산은 굉장히 간단하다. 아래쪽의 첫 번째와 네 번째 식은 모든 원소가 0인 column vector가 존재하므로 prop. (6)에 의해 determinant가 0이 된다. 즉 pivot이 0인 특이 행렬(singular matrix)이기 때문이다. 

 

두 번째는 대각 행렬(diagonal matrix)이므로 대각 원소들을 그냥 곱하면 된다. 따라서 determinant는 ad가 된다. 세 번째 determinant는 대각 행렬이 뒤집힌 상태이다. 따라서 prop. (2)를 이용하여 row exchange를 하면 일반적인 대각 행렬이 되고, 부호는 -1을 곱해준다. 이 상태에서 prop. (3)-1을 이용하여 각 row에 곱해진 c와 d를 차례로 밖으로 빼내면 결과적으로 ad-bc가 된다. 아래 식은 식 (3)의 아래 에서 두 번째와 세 번째 determinant를 풀어서 계산한 식을 나타낸다. 

 

 

우리는 최초의 2x2 determinant를 지난 시간에 배운 determinant의 특성들을 이용하여 분리하여 계산하였다. 분리하는 과정은 약간 번거로울 수 있지만, 분리한 뒤의 determinant를 계산하는 것은 매우 쉬운일이다. 그런데 왜 우리가 고작 2x2행렬의 determinant를 구하는데 이렇게 애를 쓸까? 그냥 ad-bc를 하면 될텐데. 

우리의 목적은 단순이 2x2행렬의 determinant를 구하는 것이 아니다. 3x3, 4x4, 나아가 n x n행렬의 determinant를 구하는 방법을 알아내는 것이 목적이다. 

 

우리는 2x2행렬을 분리한 결과, 처음에 row1을 각 원소에 대해 쪼개어 두 개의 행렬식을 만들었다. 식 (2)와 같이 말이다. 그 다음은 식 (3)과 같이 row2에 대해서 쪼개어 식을 네 개로 만들었다. 그렇다면 위의 방법을 3x3행렬에 적용하면 어떻게 될까? 3x3의 행렬을 쪼갠다면 다음과 같은 시나리오가 될 것이다. 

 

 

 

 

먼저 row2, row3는 그대로 유지한 채 row1=[a b c]에 대해서 쪼개면 식 (5.1)과 같이 3개의 행렬식이 나온다. 이 쪼갠 행렬의 각각에 대해서 이번엔 row2를 기준으로 쪼갤 수 있다. 식(5.1)의 첫 번째 행렬식을 row2에 대해 쪼갠 것이 식 (5.2)에 나타난 3개의 행렬식이다. 이렇게 하면 식 (5.2) 단계에서는 총 9개의 행렬식이 나온다. 이제 마지막으로 식 (5.2)단계에 있는 행렬식들을 나머지 row는 유지한 채 row3=[g h i]를 기준으로 쪼개면 역시 각 행렬식 당 세 개의 행렬식이 식 (5.3)과 같이 나오게 된다. 결국 3x3행렬식을 각 row에 따라 쪼개면 총 27개의 행렬식이 나오게된다. 행렬식 분리가 완료되면 대부분의 행렬식(determinant)들은 column의 원소가 모두 0이기 때문에 0이 되고 남은 행렬식들을 이용하여 간단히 행렬식을 계산할 수 있다. 

 

 

4x4를 쪼개면 총 몇 개의 행렬식으로 분리할 수 있을까? 바로 n의 n승, 즉 

이다. 3x3의 경우엔 3^3=27, 4x4의 경우엔 4^4=256개의 행렬식으로 쪼갤 수 있다. 물론 실제 determinant를 계산할 때 이렇게 일일이 쪼개서 하라는 것이 아니다. determinant의 계산 과정의 개념적 설명을 하기 위한 과정이다. 

 

식 (5)에서 3x3행렬의 determinant를 분리할 때, 마지막 세 번째 단계에서 총 27개의 determinant를 구하였고, 대부분의 determinant는 0이었다. 그런데 0이 되는 것들은 중요하지 않고, 0이 아닌 것들이 중요하다. 그렇다면 언제 determinant가 0이 아니게 될까? 

식 (3)의 마지막 줄을 보면 첫 번째와 네 번째 determinant는 0이 되고 두 번째와 세 번째 determinant만 살아남았다. 이 둘은 공통점이 있는데 무엇일까? 바로 살아남은 각 원소들이 row와 column에 오직 자기 자신만이 존재하는 것이다. 식 (5)에서도 지면의 한계 상 27개의 determinant를 다 적지는 못했지만, 역시 0이 아닌 determinant들은 같은 특성을 보인다. 그렇다면 3x3 determinant를 기준으로 식을 분리했을 때 살아남는 것들을 적어보도록 하겠다. 

 

일단 식 (6)의 첫 번째 determinant를 보면 a11을 기준으로 해당 row와 column에 오직 a11밖에 없다. a22와 a33로 마찬가지로 원소 자신을 기준으로 row와 column에 오직 자기 자신밖에 없다. 27개의 determinant중에 이와 같이 원소를 중심으로 row와 column에 오직 자신만 존재하는 determinant만 0이 아니게되고 살아남게 된다

 

첫 번째 determinant는 대각 행렬(diagonal matrix)이므로 대각 원소를 그냥 곱해주면 된다. 두 번째를 보자. a11은 그대로이고 아래에 a23과 a32가 존재한다. 이는 마치 치환 행렬(permutation matrix)과 같은 형태인데, 대각 행렬의 형태로 만들어주기 위해선 row exchange를 해야 한다. 즉 row2와 row3을 교환해주면 대각행렬이 만들어진다. determinant위에 R.E 2,3이 Row Exchange 2, 3을 의미하는 것이며, 지난 시간에 배운 prop. (2)를 통해 부호가 바뀌게 된다. 행 교환을 한 다음 prop. (3)-1을 통해 원소들을 밖으로 빼주면 -a11*a23*a32가 된다. 

 

이번엔 네 번째 determinant를 보자. 네 번째도 대각 행렬 형태가 아니므로 행 교환을 해야하는데, 이번엔 두 번의 행 교환이 필요하다. 먼저 row1과 row3을, 그 다음엔 row2와 row3을 교환해주면 대각행렬이 만들어지는데, 이때 행 교환을 두 번 했기 때문에 부호는 그대로 +가 된다. 나머지도 같은 방법으로 행 교환을 통해 정리해주면 최종적으로 식 (6)과 같이 6개의 행렬식에 대한 식이 만들어진다. 

 

이렇게 하여 3x3크기의 행렬에 대한 determinant식을 완성하였다. 그런데 이 식을 유도하는 방식을 과연 nxn크기의 determinant를 구하는 일반적인 공식(General formula)처럼 사용할 수 있을까? 정답은 No다. 식 (6)의 첫 번째와 여섯 번째 행렬식(determinant)을 보면 첫 번째 행렬식의 부호는 대각 원소들을 그대로 곱해주면 된다. 그러나 여섯 번째 행렬식은 행 교환(row exchange)을 해야 하고 한 번의 행 교환을 통해 부호가 -로 바뀌게 된다. 즉 대각 행렬의 행렬식의 부호는 +, 여섯 번째와 같이 반대 방향의 대각 행렬식(counter diagonal determinant)의 부호는 -가 된다. 그러나 이는 nxn크기의 행렬식에 대해서 일관성이 없다. 아래의 4x4크기의 행렬식을 보자. 

 

 

식 (7)의 counter diagonal형식의 determinant를 diagonal형태로 만들기 위해선 row1과 row4, row2와 row3의 두 번의 행 교환이 필요하다. 따라서 식 (6)의 경우와는 다르게 부호가 +가 된다. 결과적으로 식 (6)의 공식 유도 방식은 일관성이 없으며 오직 3x3크기의 determinant에만 적용될 수 있다. 만약 4x4에다 위의 방식을 적용하여 식을 만들면 각 크기의 determinant마다 서로 다른 형태의 식이 나오게 되고 식이 무한정 길어진다는 단점도 있다. 

우리가 원하는 것은 어떤 nxn 크기의 determinant에도 적용할 수 있는 일반적인 공식이다. 지금부터 임의의 크기의 determinant를 구할 수 있는 일반적인 공식에 대해 알아보도록 하자. 

 

 

- Big Formula

 

지금부터 배울 공식은 Big formula로 불리는 공식이며, 2x2, 3x3, 4x4, ... nxn에 모두 적용할 수 있는 determinant를 계산할 수 있는 일반적인 공식(General formula)이다. 즉 nxn크기의 행렬에 대해서 식 (6)과 같이 0이 아닌 텀들의 합으로 determinant를 계산하는 공식이다. 식 (3)에서는 2x2 determinant에 대해서 분리된 행렬식중에 0이 아닌 텀이 두 개이고, 식 (6)의 3x3에서는 총 27개 중 6개이다. 그렇다면 4x4에서는 0이 아닌 행렬식이 몇 개일까? 바로 24개이다. 이를 계산하는 법은 n!(factorial)이다. 3x3은 3!=3x2x1=6, 4x4는 4!=4x3x2x1=24가 된다. 이렇게 0이 아닌 텀을 factorial로 계산하는 이유는 다음과 같다. 

 

 

 

 

Fig. 1 3x3 determinant를 분해하는 과정

 

 

 

일단 앞서 언급했듯이 행렬식을 쪼갠 식 중에서 0이 아닌 살아 남는 식들은 바로 치환 행렬(permutation matrix)형태의 식이다. 즉 쪼갠 식의 각각의 원소가 자기 자신의 위치를 중심으로 row와 column에 오직 자기 자신만 존재하는 형태이다. 이와 같이 행렬식을 쪼갤 때 Fig. 1과 같이 먼저 row1의 3개의 각 원소 a11, a12, a13을 기준으로 식을 분리한다. n=3이기 때문에 a11을 기준으로 쪼갠 행렬식에서 나올 수 있는 조합은 이제 n-1=2개 이다.  Fig. 1의 두 번째 줄에서 녹색 영역을 제외한 2x2부분 행렬식에 대해서 이 2개의 경우의 수가 나온다. 이 두 가지의 조합이 바로 마지막 세 번째 줄이다. 이 세 번째 단계에서 나올 수 있는 조합은 이제 n-2=1이므로 a33과 a32를 그대로 쓰면 된다. 나머지 a12, a13도 똑같이 조합에 대한 경우의 수가 row1의 원소들을 시작으로 n-1, n-2과 같이 줄어들기 때문에 결과적으로 n!(factorial)만큼의 살아남는 행렬식들을 계산하고 더해준다. 이때 중요한 것은 절반은 부호가 +, 나머지 절반은 -의 부호를 가진다. 아래식을 보자. 

 

 

행렬 A의 determinant를 구하는데 있어서 n factorial의 수 만큼 마지막 단계까지 쪼갠 각 행렬식 계산 결과를 더해준다. 다시 한 번 말하지만 n factorial의 수는 행렬을 분해했을 때 0이 아닌 살아 남는 행렬의 수를 의미하고, 형태는 치환 행렬(permutation matrix)을 의미한다. 이 과정을 수식으로 나타낸 것이 식 (8)이다. 

 

 

여기서 alpha부터 omega는 1부터 n까지의 치환 행렬의 column index를 의미한다. 이때 alpha부터 omega의 column index들은 단 한번씩만 사용된다. 즉 식 (8)의 alpha, bete, ... omega등은 a11a22a33 - a11a23a32 - a12a21a33 + a12a23a31 + a13a21a32 - a13a22a31에서 볼드체 숫자(column index)에 해당한다. 

 

우리는 식 (8)을 이용하여 이전 시간에 배웠던 행렬식의 특성(Determinant properties)들을 전부 확인할 수 있다. 가령 단위 행렬의 determinant가 1인 것은 식 (8)을 이용하여 Fig. 1과 같이 전개해보면 결과값이 1인 것은 오직 첫 번째 텀이다. 따라서 단위 행렬이 1인 것을 식 (8)을 통해 확인할 수 있다. 이와 같이 prop. (1) ~ (10)까지의 모든 특성들도 식 (8)을 통해 확인할 수 있다. 

 

 

- Example of Big Formula

 

이제 실제 행렬의 determinant를 Big formula인 식 (8)을 이용하여 풀어보도록 하자. 아래의 4x4의 determinant를 어떻게 푸는지 그 과정을 잘 살펴보도록 하자. 

 

 

 

식 (10)은 4x4크기의 행렬의 determinant이다. n=4이기 때문에 행렬식(determinant)을 쪼갤 수 있는 총 가짓수는 4의 4승(4^4)이므로 4x4x4x4=256가지의 행렬식으로 분해할 수 있다. 그러나 이 중 0이 아닌 살아남는 행렬식(Permutation matrix type)은 4!=4x3x2x1=24개이다. 그러나 식 (10)의 많은 원소들이 0을 포함하고 있기 때문에 이 24개 중에서도 대부분의 행렬식이 0이 된다. 따라서 계산을 효율적으로 하기 위해 0이 아닌 원소들을 치환 행렬의 조건에 맞게 순차적으로 선택하여 행렬식을 계산해 보도록 하자. 아래 그림을 보자. 

 

 

Fig. 2 Big Formula를 이용한 4x4 determinant의 계산

 

 

Fig. 2는 식 (8)에 나타난 Big Formula를 이용하여 4x4 행렬의 determinant를 구하는 모습이다. step1-1을 보면 먼저 원소 중에 0이 아닌 원소를 하나 고른다. 맨 처음 고른 원소는 a14의 위치에 있는 원소를 골랐으며, 이 원소를 중심으로 row와 column의 원소들은 다음 step에서 고를 수 없다. 즉 step1-2에서 원소를 고를 때는 step1-1의 흰색 영역에 있는 원소들 중에 0이 아닌 원소들을 골라야 한다. step1-2에서는 a23의 위치에 있는 원소를 골랐다. 역시 step1-3에서는 step1-2의 흰색 영역의 원소들 중에 골라야 하며 a32를 골랐다. 마지막 step1-4에서는 딱 하나 남은 원소인 a41의 위치의 원소를 고른 모습이다. 

 

이렇게 하여 step1-4에서 반대방향 대각선의 원소들을 골랐으며, perm(4,3,2,1)로 표기를 하였다. 여기서 괄호 안의 숫자들은 column의 index를 의미한다. 즉 (4,3,2,1)은 순서대로 row1의 column index가 4, row2의 column index가 3, row3의 column index가 2, row4의 column index가 1임을 각각 의미한다. 결과적으로 치환 행렬(permutation matrix)형태의 행렬이 만들어진 것이다. perm(4,3,2,1)의 치환 행렬을 대각 행렬(diagonal matrix)의 형태로 만들기 위해선 두 번의 행 교환(row exchange)이 필요하다. 4와 1, 그리고 2와 3을 교환 하면 대각 행렬이 만들어진다. 따라서 prop. (2)에 따라 부호는 원래대로 +이며, prop. (7)에 따라 대각 원소들끼리 곱해주면 결과적으로 1이 나온다. 

 

두 번째로 step2-1 ~ step2-4의 단계도 역시 같은 방법으로 이전 단계의 흰 영역중 0이 아닌 원소들을 선택하는 방법으로 Big Formula를 적용하면 perm(3,2,1,4)가 나온다. 여기 까지 하고 나면 행렬식의 모든 원소에 대해서 처리를 했기 때문에 그 이상의 과정은 필요없다. 원래는 4x4의 경우 24개의 텀에 대하여 모두 계산해야 하지만, 이 예제에선 나머지 원소들이 0이기 때문에 하나의 원소라도 0이면 determinant가 0이 되기 때문에 더 이상 진행할 필요가 없는 것이다. 결국 step2-4를 통해 구한 perm(3,2,1,4)의 경우, 3과 1의 한 번의 row exchange만 하면 대각 행렬이 되기 때문에 부호는 -가 되고 결과는 -1이 된다. step1과 step2에서 구한 행렬식의 값들을 더하면 결과적으로 det A는 0이 된다. 결국 Fig. 2의 행렬식은 determinant가 0이기 때문에 특이 행렬(singular matrix)이다. 특이 행렬이기 때문에 row의 선형 결합(Linear combination)이 0이 된다. (row1+row3) - (row2+row4) = 0. column의 경우도 마찬가지이며, 특이 행렬이기 때문에 column의 선형 조합을 통해 영벡터(zero vector)를 만들 수 있는 null space가 존재한다. 

 

이번 섹션에서 다루었던 Big Formula의 내용을 잘 이해하고, 이를 기반으로 다음 섹션에서 여인수(Cofactor)에 대해 공부해보도록 하자.  

 

 

 

2. 여인수(Cofactor)

 

여인수(cofactor)는 이전 섹션에서 배웠던 식 (8)의 Big formula를 분할하는 방법이다. 즉 nxn의 determinant를 이보다 한 단계 작은 크기인 (n-1)x(n-1)의 determinant와 연결시키는 방법이다. 이를 여인수 전개(cofactor expansion)라 한다. 식 (8)의 Big Formula는 식 (6)과 같이 determinant의 모든 식을 나열하는 방식이다. Big Formula를 이용하여 구했던 식 (6)의 3x3 determinant를 cofactor를 이용하여 계산해보자. 아래 그림을 보자. 

 

Fig. 3 cofactor를 이용한 determinant의 계산

 

 

Fig. 3은 기존의 Big Formula를 이용하여 계산한 determinant를 cofactor를 이용하여 계산한 것이다. row1의 첫 번째 원소 a11을 선택하고 나머지 2x2공간(흰 부분)에 대한 모든 경우를 계산하여 a11에 곱해준다. 이때 최초에 선택한 a11을 factor, 나머지 2x2의 모든 경우에 대한 계산이 괄호안에 있는 (a22a33 - a23a32)이며 이를 여인수(cofactor)라고 한다. cofactor라는 말은 factor에 "공동", "협동"이라는 뜻을 지닌 접두사 co가 붙어서 factor와 공존하는 cofactor라는 뜻이 된다. 두 번째 파란 줄로 표시된 cofactor는 a12앞의 부호를 +로 만들기 위해 순서를 바꾸어 더해준 것이다. 

 

그렇다면 cofactor를 단순히 factor를 중심으로 식을 묶어준 것이 지나지 않는 것일까? 단순히 그렇지는 않다. 아래 그림을 보자. 

 

Fig. 4 nxn과 (n-1)x(n-1)의 determinant 사이의 연결고리 역할을 하는 여인수(cofactor)

 

 

cofactor는 앞서 언급했듯이 nxn의 determinant와 (n-1)x(n-1)의 determinant의 연결고리다. 3x3의 determinant의 한 factor인 a11은 이보다 한 단계 작은 2x2의 determinant와 곱해지는데, 여기서 2x2 determinant가 바로 여인수(cofactor)이다. 이는 처음에 factor를 선택하고나면 factor가 있는 row와 column은 다른 원소를 사용할 수 없기 때문에 치환 행렬(permutation matrix)의 형태를 만들기 위해서는 이보다 한 단계 작은 (n-1)크기의 determinant를 고려해야 한다. 결국 (n-1)x(n-1)의 determinant인 cofactor는 nxn의 determinant를 계산하기 위한 각 factor와 관련된 모든 가능한 치환 행렬의 부분 조합이라고 할 수 있다. 

 

지금까지 우리가 예를 들 때 factor를 항상 row1에서 선택했는데, 사실 반드시 row1에서 선택할 필요는 없다. factor는 어떤 row에서 선택해도 무방하지만 계산하기가 편리하기 때문에 row1에서 선택한 것이다. 

 

아무튼 이러한 cofactor를 일반적인 식으로 정의해보면 다음과 같다. 

 

 

 

factor aij의 cofactor Cij는 factor aij의 i번째 row와 j번째 column을 제외한 나머지 n-1크기의 행렬에 대한 determinant를 의미한다. 여기서 한 가지 법칙이 존재하는데, cofactor는 i와 j인덱스에 따라 부호가 결정되는데, 바로 i+j가 짝수(even number)이면 부호는 +를, 홀수(odd number)이면 -부호를 가진다. 이 cofactor에 대한 공식은 아래와 같이 쓸 수 있다. 

 

 

식 (12.1)은 row1에 대한 cofactor공식이며, row의 index는 어떤 것이라도 가능하다. 식 (12.2)는 cofactor의 부호를 나타낸다. cofactor의 i와 j의 index의 합이 짝수냐, 홀수냐에 따라 부호가 마치 체스보드처럼 교차하여 나타나는 것을 볼 수 있다. 

아래의 식 (13)은 cofactor 공식을 이용하여 2x2행렬의 determinant를 구한것이다. 아래와 같이 ad+b(-c)가 나올 것이다. 

 

a11의 cofactor C11은 +d가 되고, C12는 i+j=1+2=3(odd)이기 때문에 -c가 된다. 이와 같이 3x3, 4x4, nxn의 determinant에 대해서도 cofactor를 이용하여 계산할 수 있다. cofactor를 이용한 4x4행렬의 determinant계산을 끝으로 이번 챕터를 마무리 하도록 하자. 

 

 

위의 식 (14)는 식(10)에서 Big Formula를 이용해 풀었던 행렬이다. 이를 cofactor를 이용하여 풀어보도록 하자. 이번 예제를 통해 보이고자 하는 것은 cofactor를 이용하여 nxn과 (n-1)x(n-1)의 determinant를 어떻게 연결지어 풀 수 있는지를 보이고자 하는 것이다. 아래 그림은 식 (14)의 determinant를 행렬식을 이용하여 풀이한 과정을 나타낸다. 

 

 

 

Fig. 5 여인수(cofactor)를 이용한 4x4행렬의 determinant 계산

 

 

맨 처음 4x4행렬에 대한 여인수(cofactor) 식을 세우면 det A = a11C11+a12C12+a13C13+a14C14 와 같이 된다. 이 중 a11과 a12의 값이 0이기 때문에 캔슬 되고 나머지 텀인 a13C13+a14C14만 남게 된다. 이때의 cofactor C13과 C14는 맨 처음 행렬 그림에서 각각 흰색 부분의 3x3행렬에 대한 determinant를 나타내고, 이것을 행렬식으로 표현한 것이 바로 그 아래에 있는 식이다. 이때 두 번째 행렬식의 부호가 -인 이유는 C14의 인덱스의 합이 1+4=5와 같이 홀수가 되므로 부호는 음수가 된다. 그 다음 3x3행렬식을 cofactor 공식을 이용하여 2x2행렬로 나타내고, 마지막에 cofactor의 index에 따른 부호를 고려하여 determinant를 계산해주면 결과적으로 0이 나오는 것을 볼 수 있다. 맨 아래 왼쪽의 2x2행렬식은 원래 1(ad-bc) = 1(1-0) = 1이지만, 이때의 cofactor의 index C12가 1+2=3으로 홀수이기 때문에 부호가 -가 된다. 이와 관련해서는 식 (11)을 참조하자. 결과값은 -1 - (0-1)=0이 된다. 

 

결과적으로 cofactor를 이용하여 최초의 4x4의 행렬식(determinant)으로부터 3x3, 2x2와 같이 작은 크기의 행렬식으로 정리하여 행렬식을 풀 수 있었다. Fig. 5를 잘 이해하도록 하자. 

 

 

 

3. 마치며

 

이번 포스팅에선 행렬식(determinant)의 실제 계산법에 대하여 공부해봤다. 지난 강의(Lecture 18)에서 배웠던 행렬식의 특성들을 이용하여 Big Formula를 유도하였고, 이를 통해 여인수(cofactor)를 소개하였다. cofactor는 궁극적으로는 nxn의 행렬식을 계산함에 있어 최초의 nxn의 행렬식으로부터 단계적으로 (n-1)x(n-1)의 행렬식과의 관계를 cofactor로 정의하고 이를 통해 행렬식을 계산하는 것에 그 목적이 있다. 사실 일반적으로는 3x3의 행렬식의 계산법 정도는 손으로 풀 줄 알면 좋지만, 그 이상의 크기는 컴퓨터를 이용하여 계산하기 때문에 반드시 알고 있어야 할 필요는 없을 것 같다. 이렇게 계산할 수 있구나 정도면 알아두면 무리가 없을 것이다. 물론 시험을 봐야 하는 학생들은 예외^^

 

지금까지 우리는 임의의 직사각행렬(Rectangular Matrix)에 집중해 왔다. 이번 챕터부터는 주로 정방행렬(Square Matrix)에 관련된 내용들을 다룰 것이다. 이번 시간과 다음에 이어질 강의에서는 정방행렬의 행렬식(Determinant)에 관해 공부를 할 것이다. 사실 이 행렬식(Determinant)이 필요한 이유는 여러 가지가 있지만, 가장 큰 이유중 한 가지는 바로 고유값(Eigen Value)때문이다. 행렬식과 고유값에 대한 자세한 내용은 이후의 강의에서 공부하도록 하고 이번 강의에서는 행렬식의 속성과 특징들에 대해서 알아보도록 하자. 

 

 

1. 행렬식(Determinant)

 

행렬식(determinant)은 정방행렬(square matrix)에서만 정의되는 숫자이다. 모든 정방행렬은 이 수치를 가지며, 아래와 같이 표현한다. 

 

 

det A, 혹은 양쪽에 bar를 붙여서 |A|로 표현한다. 벡터의 크기를 표현할 때 bar를 양쪽에 두 개씩 붙이는 것( ||a|| )과 혼동하지 말자. 행렬식은 행렬의 행렬식(determinant of the matrix)이다. 

 

행렬식은 magic number와 같다. 이 하나의 숫자로 행렬의 모든 특성이나 속성을 표현할 순 없지만, 어떤 행렬의 가능한 많은 정보들을 압축하여 하나의 숫자에 담고 있다. 가령 수업시간에 많이 배웠던 내용이고 앞으로도 다시 배우겠지만, determinant(행렬이라는 단어와 혼동이 있을까 싶어 앞으로 행렬식이라는 표현보다 영문 표기를 쓰도록 하겠다)가 0이 아닌 경우 그 행렬이 역행렬이 존재함을 의미한다. 혹은 determinant가 0인 경우 행렬이 특이 행렬(singular matrix)임을 의미한다. 따라서 determinant는 어떤 행렬의 invertibility(역행렬의 존재 가능성)를 테스트하는데 사용된다. 수업시간에 determinant에 대해서 주로 이러한 내용에 관해 배웠을 것이다. 하지만 determinant는 이보다 많은 정보들을 담고 있다. 이제부터 하나씩 배워보도록 하자. 

 

사실 많은 학생들이 determinant를 배울 때 invertibility의 체크에 대한 내용과 계산 과정에 대해서만 배웠을 거라고 생각한다. 계산 과정이야 그대로 따라하면 초등학생들도 할 수 있는 것이고 중요한 것은 determinant가 의미하는 것이 무엇이고 어떤 정보들을 나타내고 있는지를 아는 것이다. 그래서 이번 포스팅에서는 계산 식에 대한 내용은 거의 다루지 않고 다음 포스팅에서 계산 식에 대한 내용들을 다룰 예정이다. 이번 포스팅에서는 우선 determinant의 3개의 주요 특성에 대해 먼저 다루고, 이 3개의 특성을 기반으로 7개의 특성에 대해서 설명을 하도록 하겠다

 

 

- prop. (1) 

 

 

 

첫 번째 특성은 단위 행렬(Identity matrix)의 determinant는 1이라는 것이다. 이때 행렬은 n x n크기의 행렬에 대해서 동일하게 적용된다. 계산 과정은 이후에 설명하더라도 첫 번째 특성은 매우 간단하기 때문에 더 이상 설명할 것이 별로 없다. 식 (2)의 예로 2 x 2 단위 행렬의 determinant를 계산해보자. determinant의 실제 계산 수식에 대해선 다음 포스팅에서 자세히 다룰 예정이니 일단 수업 시간에 배웠던 2x2 determinant 계산공식을 활용하여 답을 구해보자. 식 (3.1)은 2x2 행렬의 determinant를 구하는 공식이다. 

 

 

단위 행렬의 determinant를 계산한 결과, 식 (2)의 특성 처럼 1이 나오는 것을 볼 수 있다. 

 

 

 

- prop. (2) 

 

 

두 번째 특성은 행렬의 어떤 row를 다른 row와 바꾸면 determinant의 부호(sign)가 바뀐다는 것이다. 여기 까지의 특성만 봤을 때 혹시 어떤 행렬에 대한 determinant인지 눈치 채셨는가? 

일단 첫 번째 특성은 단위 행렬로부터 시작하였다. n x n에서 n이 얼마이던 간에 단위 행렬이라면 determinant는 1이다. 두 번째 속성은 어떤 정방행렬 이던간에 임의의 row를 교환하면 determinant의 부호가 바뀐다는 것이다. 그런데 특성 1로부터 출발하면 어떤 행렬이 될까? 즉 단위 행렬에서 임의의 row를 교환할 경우 이전에 배웠던 치환 행렬(permutation matrix)이 되는 것을 알 수 있다. 여기서 우리가 알 수 있는 것은 모든 치환 행렬의 determinant는 1 혹은 -1이 된다는 것이다. 이때 1 혹은 -1이 되는 기준은 행 교환(row exchange)을 짝수번(even) 했는지, 아니면 홀수번(odd) 했는지에 따라 정해진다. 즉 맨 처음 단위행렬에서 임의의 행 교환을 1번 했으면 이때의 determinant는 -1이 된다. 여기에서 임의의 행 교환을 한 번 더 하여 총 행 교환을 두 번 하게 되면 determinant는 1이 된다. 

 

 

식 (5)는 치환 행렬에 대한 규칙임을 기억하자. 특성 2는 다른 어떤 정방행렬에도 동일하게 적용되며, 단지 행 교환 이전의 determinant에서 부호가 바뀐다는 것을 명심하자. 마찬가지로 2x2 단위 행렬에 대해 특성 2를 적용하여 실제 계산을 수행해보자. 

 

 

최초의 단위 행렬에서 row exchange를 했을 경우 determinant의 부호가 바뀌는 것을 볼 수 있다. 여기서 한 번 더 하면 부호는 다시 +부호가 된다. 결국 단위 행렬의 row exchange를 짝수번 하면 1, 홀수번 하면 -1이 되는 것을 확인하였다. 이것은 임의의 n x n 치환행렬에 대해서도 동일하게 작용한다. 지금은 2x2크기의 정방 행렬의 determinant 공식만 다루고 있지만 사실 우리가 원하는 것은 n x n의 행렬에도 적용되는 일반적인 방법이다. 계산 방법은 바로 다음 포스팅에서 다루도록 하고 세 번째 특성으로 넘어가자. 

 

 

- prop. (3)-1

 

세 번째 특성은 사실 핵심이 되는 determinant의 특성이니 잘 이해하도록 하자. (3)-1과 (3)-2로 나누어서 정리하도록 하겠다. (3)-1의 특성을 우선 식으로 써보면 아래와 같다. 

 

 

식 (7)이 의미하는 것은 임의의 정방행렬 A에서 임의의 하나의 row에 t라는 scale 상수를 곱한 다음 determinant를 계산하면, A의 determinant에 t라는 상수를 곱한 것과 값이 같다는 것이다. 이때 t는 임의의 하나의 row에만 곱해지는 상수이고 나머지 n-1의 row는 그대로 두는 것이다. t를 2번째 row, 혹은 n번째 row에 곱하고 나머지는 그대로 둔 상태에서 계산해도 식 (7)의 법칙이 적용이 된다. 이것이 특성 (3)-1이다. 실제로 계산해보면 아래와 같다. 

 

 

 

- prop. (3)-2

 

역시 특성 (3)-2를 먼저 아래와 같이 식으로 정리해보자. 

 

 

식 (9)가 의미하는 것은 행렬 A에서 임의의 row에 어떤 벡터를 더했을 때의 determinant는 더한 row를 따로 분리하여 determinant 계산할 수 있다는 것이다.  즉 row1에 v=[a' b']을 더했다면, 원래 행렬의 determinant와 v와 나머지 row들로 만든 행렬의 determinant를 따로 계산하여 더한 값과 같다는 것이다. 이때 주의할 것은 더한 row를 제외한 나머지 n-1의 row들은 그대로 두어야 한다는 것이다. 실제 계산을 해보면 아래와 같다. 

 

 

 

정리해보면 특성 (3)-1과 (3)-2는 임의의 n x n크기의 정방행렬에 동일하게 적용되며, 어느 하나의 row에 scale상수를 곱하거나 임의의 row벡터를 더했을 경우, 나머지 n-1의 row들은 그대로 둬야 한다는 것이다. 결국 이들 특성 (3)-1과 (3)-2로 하여금 determinant를 구하는데 있어 선형 결합(Linear combination)의 규칙이 작용하는 것이다. determinant는 선형 함수(Linear Function)이다. 특성 (3)-1과 (3)-2를 같이 쓰면 아래와 같다. 

 

 

식 (11.1)은 determinant의 선형결합에 관한 식을, (11.2)는 그에 대한 예를 나타낸다. 

 

여기서 어떤 사람들은 오해를 할 수 있다. 즉 determinant가 선형 함수라고 해서 모든 row에 대해서 이러한 선형성이 동시에 적용되는 것이 아니다. 아래 식은 틀린 식이다. 

 

 

식 (12)는 determinant의 선형성이 모든 row에 대해서 동시에 적용되지 않음을 나타내는 것이다. 중요한것은 우리가 지금까지 determinant의 특성들에 대해서 언급하고 예를 들었을 때 단 하나의 row에 대해서만 적용을 하고 나머지 row들은 그대로 뒀다는 것이다. 결국 어떤 정방행렬의 determinant는 각각의 row에 대해서만 독립적으로 선형성(Linearity)을 나타낸다

 

이렇게 하여 determinant의 주요 특성 세 가지를 정리하였다. 우리는 이 세 가지 주요 특성들을 통해 어떠한 행렬의 determinant라도 정의할 수 있다. 그러나 이 세 가지 말고도 determinant는 다양한 특성들을 가지고 있다. 이제 이 세 가지 기본적인 특성들을 기반으로 determinant에 대한 나머지 특성들에 대해서도 알아보자. 

 

 

- prop. (4)

 

 

네 번째 특성은 행렬 A에 똑같은 row가 2개 존재한다면 그 행렬의 determinant는 0이 된다는 것이다. 사실 2 x 2의 경우엔 이해가 간다. 2 x 2에서 두 개의 row가 같아지면 det A=ab-ab=0 이 되기 때문에 당연히 0이 될 것이다. 하지만 왜 n x n의 행렬의 경우에도 같은 row가 두 개 존재하면 determinant가 0이 될까? 예를 들면 10 x 10의 정방행렬에서 row 2와 row 7이 같다고 해보자. 이렇게 큰 행렬에서 단지 두 개의 row가 같다고 해서 왜 determinant가 0이 될까? 

 

우리는 지금까지 determinant의 주요한 3개의 특성을 공부했다. 단위 행렬의 determinant가 1이 되는 특성, 행을 교환하면 determinant의 부호가 바뀌는 특성, 그리고 각각의 row에 독립적으로 적용되는 선형성(linearity)등이다. 어찌 되었든 우리는 앞서 배운 세 개의 특성을 가지고 바로 이 네 번째 특성을 정의해야 한다. 어떻게 할 수 있을까? 바로 prop. (2)로 부터 정의할 수 있다. 

 

prop. (2)는 row exchange가 발생했을 때 원래의 행렬과 다른 행렬이 만들어지게 되고, 결국 determinant의 부호가 바뀐다는 특성이다. 그러나 두 row가 같아져 버리면 row exchange를 해도 원래 행렬과 같아진다. 그러나 prop. (2) 특성은 반드시 만족해야 하기 때문에 부호를 반드시 바꿔야 하는데, 원래 행렬과 같기 때문에 부호를 바꾸어도 똑같아야만 한다. 수 많은 숫자들 중에 부호를 바꿔도 똑같은 숫자가 딱 한가지 있다. 바로 0(zero)이다. 따라서 어떤 행렬 A가 두 개의 같은 row를 가지고 있을 경우, A의 determinant가 0이 되어야만 같은 row를 교환하여 부호가 바뀌어도 prop. (2)가 성립하게 된다. 

 

또한 이렇게 생각해 볼수도 있다. 정방행렬에서 두 개의 같은 row가 있다면 rank는 n보다 작다. 따라서 이 행렬은 역행렬이 존재하지 않게 되므로 처음에 언급했듯이 determinant가 0이 되어야 한다. 

 

 

- prop. (5)

 

다섯 번째 특성은 소거(elimination)와 관련이 있다. Lecture 2에서 배웠듯이 소거 과정에서 우리는 pivot 변수를 지정하고 그 아래에 있는 원소들을 0으로 만들기 위해 pivot row에 특정 상수를 곱한 다음, 제거 할 row에서 이를 빼준다. 따라서 제거 할 k번째 row로 부터 상수값 $l$을 찾아서 pivot row와 곱해준다음 이를 k 번째 row에서 빼준다. 여기서의 특징은 이러한 소거 과정에서 중간에 나타나는 행렬의 determinant는 처음과 같다는 것이다.  즉 아래의 식과 같다. 

 

 

다시 말하자면 원래의 행렬 A를 소거하여 상삼각행렬(Upper triangular matrix) U를 만들었을 때, U의 determinant는 A의 determinant와 동일하다는 것이다. 결국 행렬 A를 소거를 해도, 소거 과정에서 나오는 어떠한 행렬도 determinant는 변하지 않는다. 이것이 다섯 번째 특성이다. 

 

그렇다면 이 특성은 어디서부터 오는가? 설명을 위해 식 (14)를 2x2행렬에 표현해 보자. 

 

 

식 (15)는 2x2행렬에서 소거를 위해 row1에 $l$을 곱하여 row2에서 빼주는 식에 대한 determinant를 나타낸 것이다. 그런데 이 식은 우측과 같이 분리가 가능하다. 바로 특성 prop. (3)-2로 부터 파생되는 것이다. 결과적으로 식 (15)의 최 우측의 determinant는 0이 되어 원래 행렬의 determinant와 같아지는 것을 볼 수 있다. prop. (3)-2를 통해 소거된 행렬과 원래 행렬의 determinant는 같음을 보였다. 

 

여기서 최 우측의 determinant에 prop. (3)-1을 적용할 수 있다. row2에 곱해져 있는 $l$을 밖으로 빼내면 아래와 같이 쓸 수 있다. 

 

 

이렇게 되면 최 우측 행렬의 determinant는 row1과 row2가 같다. 따라서 prop. (4)에 의해 0이 된다. 

 

prop. (5)를 정리하자면 임의의 행렬 A를 소거하는 과정에서 만들어지는 모든 행렬은 원래의 행렬 A와 같은 determinant값을 가진다. 이를 이전에 정리했던 특성들 prop. (3)-1, prop. (3)-2, prop. (4) 를 통해 정리하였다. 

 

 

- prop. (6)

 

Determinant의 여섯 번째 특성은 간단하다. 바로 원소들이 모두 0인 row가 하나 라도 존재한다면 determinant가 0이 된다는 것이다. 

 

 

모든 원소가 0인 row가 하나 라도 존재한다면, 해당 행렬은 특이 행렬(singular matrix)이 되고, rank는 n보다 작아지며, 역행렬은 존재하지 않는다. 그렇다면 이전의 특성들로부터 어떻게 특성 (6)을 유도할 수 있을까? 바로 prop. (3)-1으로부터 유도할 수 있다. 

 

 

예를 들어 t=0이고, t가 어떤 특정 row에 곱해졌다고 생각해보자. t는 prop. (3)-1에 의해 밖으로 뺄 수 있는데, t가 0이기 때문에 결국 determinant는 0이 된다. 

 

 

- prop. (7)

 

일곱 번째 특성은 매우 중요하면서 유용하므로 집중해서 잘 알아두도록 하자. 이는 상삼각행렬(Upper triangular matrix)과 관련되어있다. 2x2크기의 경우엔 determinant를 구하는 것이 어렵지 않지만, 100x100과 같이 큰 행렬일 경우엔 계산 과정이 굉장히 오래 걸린다. 이번 특성은 이러한 determinant의 계산을 손쉽게 해주는 방법이고 굉장히 유용하게 사용될 수 있다. 일단 아래의 상삼각행렬을 보자. 

 

 

4x4처럼 표현 되긴 했지만, 식 (19)를 n x n크기의 정방행렬이라고 생각해보자. 상삼각행렬이기 때문에 대각선 원소들을 중심으로 아래쪽 원소들은 모두 0이다. 대각선 원소들을 d1, d2, ... dn이라고 표현하고, 위쪽에 있는 원소들은 중요하지 않기 때문에 별표로 표시하였다. 

 

상삼각행렬(Upper triangular matrix)은 원래의 행렬 A를 소거(elimination)하여 만들 수 있는 행렬이다. 따라서 prop. (5)에서 확인했듯이 원래 행렬의 determinant와 같다. 그러나 이 상태에서 determinant를 구할 수 있는 더 쉬운 방법이 있다. 바로 상삼각행렬의 determinant는 대각 원소 d1, d2, ... dn들의 곱으로 구할 수 있다. 즉

 

 

따라서 상삼각행렬을 얻었을 때 determinant를 구하려면 대각 원소들을 곱해주기만 하면 된다. MATLAB과 같이 행렬 연산을 하는 software의 경우, 실제 어떤 행렬의 determinant를 계산할 때 먼저 소거(elimination)를 통해 상삼각행렬을 만들어준 뒤 pivot원소인 대각 행렬의 곱을 통하여 determinant를 계산한다. 행렬의 크기가 늘어날 수록 계산이 복잡해지는데, 이와 같은 방법으로 계산을 해주면 훨씬 빠르고 효율적으로 계산할 수 있다. 

 

대각 원소들의 곱으로 determinant를 구하는 건 알았고, 한 가지 더 신경써야 할 부분이 있다. 바로 determinant의 부호이다. 소거를 하는 과정에서 그대로 한 번에 된다면 좋겠지만, 어떠한 경우에는 행 교환(row exchange)을 해야할 때가 생긴다. 소거 과정에서 row exchange가 필요한 경우엔 부호를 살펴야하고 그렇지 않은 경우엔 그대로 대각 원소 d들을 곱해주면 된다. 만약 행 교환이 홀수번 일어나면 대각 원소들의 곱의 결과 값에 -1을 곱해주면 되고, 행 교환이 짝수번 발생하면 그대로 두면 된다. 이는 prop. (2)로 부터 증명할 수 있다. 

 

여기서 한 가지 의문점이 생긴다. 식 (20)에서 determinant를 구하기 위해선 대각 원소들의 곱을 통해 구할 수 있다고 했는데, 왜 *로 표시된 값들은 determinant에 영향을 미치지 않을까? 이를 어떻게 증명할 수 있을까? 이는 prop. (5)를 통해 증명할 수 있다. 소거를 해도 determinant에는 영향을 미치지 않기 때문에 Lecture 3의 Gauss-Jordan에서 했던 위쪽 방향으로의 소거를 해도 같다. 결국 U행렬은 대각 원소들만 존재하는 대각 행렬(diagonal matrix)이 되며,  determinant는 아래 식과 같이 표현할 수 있다. 

 

 

 

이제 대각 행렬을 제외한 나머지 원소들은 determinant에 영향을 미치지 않는 것으로 증명이 되었다. 그런데 왜 하필 대각 원소들의 곱일까? 이는 prop. (1)prop. (3)-1을 통해 증명할 수 있다. 우선 식 (21)을 보면 U의 각 row에 d1, d2, ... dn들이 곱해져 있는 형태이다. prop. (3)-1에 의해 우리는 이 d들을 밖으로 뺄 수 있다. d1을 시작으로 d2, d3, ... dn을 차례로 빼면 아래와 같은 형태가 된다. 

 

 

식 (22)에서 d들을 밖으로 빼면 대각 행렬은 단위 행렬(identity matrix)이 되며, prop. (1)에 의해 단위 행렬의 determinant는 1이 된다. 결과적으로 대각 원소들의 곱으로 상삼각행렬 U의 determinant를 구하는 것을 prop. (1), (2), (3)-1, (5)를 통해 증명하였다. 최초의 행렬 A에서 prop. (5)를 통해 소거를 하여 D를 만들고, prop. (3)-1을 통해 d들을 밖으로 빼내었으며, prop. (1)을 통해 d들의 곱만으로 determinant를 계산할 수 있음을 보였다. 또한 행 교환이 필요한 경우 prop. (2)를 통해 부호를 적절히 바꿀 수 있음을 보였다. 

결국 prop. (7)이 말하고자 하는 것은 A가 특이 행렬(singular matrix)이 아닐 때, determinant를 대각 원소들의 곱만으로 계산할 수 있다는 것이다. 매우 중요하니 잘 알아두도록 하자. 

 

 

- prop. (8)

 

prop. (7)에서는 pivot원소, 즉 d1 ~ dn이 0이 아님을 가정하였다. 그런데 만약 식 (20)에서 만약 어느 하나의 pivot 원소 dk가 0인 경우엔 어떻게 될까? 이 경우엔 위쪽 방향으로의 소거를 통해 식 (21)과 같이 대각 행렬(diagonal matrix)을 만들었을 때 dk=0인 row가 zero row가 된다. 이 경우 prop. (6)에 의해 행렬 자체가 특이 행렬임이 판명나고, 결국 determinant는 0이 된다. 따라서 여덟 번째 특성은 행렬 A가 특이 행렬(singular matrix)일 때 determinant가 0이 되고, A가 특이 행렬이 아닐 때, 즉 역행렬을 가질 때(invertible)는 determinant가 0이 아니다

 

 

어떤 pivot 원소가 0이라는 것은 결과적으로 행렬의 rank가 그 만큼 줄어들게 되고, 하나의 zero row를 갖게 되어 prop. (6)에 따라서 determinant는 0이 된다. 결국 full rank가 아닌 행렬은 특이 행렬이 되어 역행렬이 존재하지 않게 된다. 이것을 우리는 determinant의 계산을 통해 알 수 있다. 따라서 determinant의 계산은 역행렬의 존재 여부를 판단할 수 있는 좋은 방법이다. 

 

반면 행렬 A가 역행렬을 가질 때, 우리는 소거를 통해 A를 U(upper triangular matrix)로 만들고, 다시 위쪽으로 소거하여 D(diagonal matrix)를 만들고, 대각 원소 d1 ~ dn을 곱하여 determinant를 계산한다. 여기서 중요한 사실 한 가지는 우리는 방금 언급한 이 사실을 통하여 determinant의 공식을 유도할 수 있다는 것이다. 2x2크기의 정방행렬에 대한 determinant의 계산 공식은 다들 알다시피 ad-bc이다. 그러나 이 공식이 어떻게 유도되었는지 아는 사람은 그리 많이 않을 것이다. 아래 식을 보자. 

 

 

식 (24)는 행렬 A를 소거하여 상삼각행렬 U를 만든 것이다. (24.1)을 보면 소거할 때 pivot인 a를 소거할 원소인 c와 같게 만들기 위해 c/a를 row1에 곱한 뒤 row2에서 이를 빼준다. 이해가 잘 가지 않는다면 예를 든 (24.2)를 참고하기 바란다. 어쨋든 행렬 A를 소거하여 (24.1)과 같이 상삼각행렬 U를 만들었다. 우리는 prog. (7)을 통해 U의 determinant는 대각 원소들을 곱하면 된다고 이미 배웠다. 0인 pivot이 없으므로 (24.1)의 대각행렬을 곱해보자. 어떤 식이 나오는가? 

 

 

우리가 수업시간에 determinant를 구할 때 늘 써먹던 그 식은 바로 이와 같이 determinant의 prop. (1) ~ prop. (7)로 부터 유도된 것이다. 만약 식 (24)에서 a가 0이면 row exchange를 하고 determinant의 부호를 바꾸면 되고, 그래도 계산할 수 없다면 A가 특이 행렬이다. 

 

정리하자면 어떤 임의의 크기의 정방행렬 A의 determinant는 소거를 통해 만들어진 U의 대각 성분들의 곱으로 간단히 구할 수 있으며, (25)는 이런 절차에 따라 유도된 식이다. 

 

 

- prop. (9)

 

아홉번 째 특성은 간단하면서도 굉장히 유용하다. 일단 먼저 써보도록 하겠다. 

 

 

행렬 A와 B의 곱의 determinant는 determinant A와 determinant B의 각각의 곱과 같다는 것이 아홉번째 특성이다. 언뜻 보면 별것 아닌 것처럼 보이겠지만, 이 특성은 굉장히 값지고 유용한 특성이다. 이전의 prop. (3)-2의 식 (12)에서 행렬의 덧셈에 대한 determinant는 성립하지 않음을 알았다. 즉 모든 row에 대한 선형성(linearity)이 동시에 적용되지는 않는다는 것이다. 그러나 재밌게도 행렬의 곱셈에 대한 determinant는 분리하여 정의할 수 있다. 

 

예를 한 번 들어보자. A의 역행렬(inverse matrix)에 대한 determinant는 어떻게 정의할 수 있을까? 

 

 

식 (27.1)은 A의 역행렬과 A를 곱하면 단위행렬이 된다는 우리가 잘 아는 관계식이다. 식 (27.1)을 식 (26)을 이용하여 determinant를 구하면 (27.2)와 같이 되는데, 우변의 단위 행렬의 determinant는 prop. (1)에 의해 1이 된다. 여기서 식 (27.2)의 양변을 det A로 나눠주면 아래와 같이 det A(inverse)를 정의할 수 있다. 

 

 

A의 역행렬의 determinant는 1/(det A)로 정의할 수 있다. 사례를 한 번 들어보자. A를 소거를 통하여 대각 행렬(diagonal matrix) D로 만들었다고 했을 때, 식 (28)의 내용을 아래와 같이 쓸 수 있다. 

 

 

결과적으로 식 (26)이 의미하는 것은 어떤 두 개의 대각 행렬(diagonal matrix)의 관계를 정의할 때 유용하게 사용될 수 있으며, 이때 만약 행렬들이 대각행렬이 아니라면 소거 과정을 통해 대각 행렬을 만들어 이들을 적용할 수 있다. 

 

앞서 언급했지만 determinant는 행렬 A의 역행렬의 존재 여부(invertibility)를 체크하는데 사용된다. 즉 A가 역행렬을 가지면 determinant는 0이 아니고, 역행렬을 가질 수 없으면(singular matrix이면) determinant는 0이 된다. 이를 식 (28)을 통해 설명할 수 있다. A determinant가 0이 되면 A의 역행렬의 determinant가 1/0이 되어 식이 이상하게 되어버린다. 따라서 determinant는 역행렬의 존재 여부를 판별할 때 좋은 기준이 된다. 

 

약간 다른 경우도 한 번 살펴보자. A의 제곱인 경우엔 어떨까? 즉 A*A말이다. 이 역시 (det A)(det A)가 된다. 그렇다면 2*A의 determinant는 어떻게 될까? 2*A는 A+A이다. 이 경우엔 어떻게 정의할 수 있을까? 이때는 단순히 2*(det A)는 틀린 답이다. 2*A라는 것은 A의 모든 row에 각각 2씩을 곱해준 것이다. 따라서 prop. (3)-1과 식(22)와 같이 2를 앞쪽으로 빼줄 수 있다. row1에 곱해진 2를 먼저 앞으로 빼고, row2, ... row n에 곱해진 2를 차례로 앞으로 빼면 결과적으로 2를 n번 만큼 앞으로 빼서 곱해준 셈이 되기 때문에 2의 n승이 된다. 이들을 정리하면 다음과 같다. 

 

 

식 (30.1)은 식 (26)에 의해 정의된 것이다. 또한 나중에 자세히 다룰 기회가 있겠지만 식 (30.2)의 determinant는 어떤 volume을 정의하는데 있어 유용하게 사용된다. 

 

 

- prop. (10)

 

마지막 열 번째 특성도 그리 어렵진 않다. 바로 적어보겠다. 

 

 

열 번째 특성은 A의 transpose의 determinant는 원래 A의 determinant와 같다는 것이다. 일단 여기서 다루고 있는 행렬은 정방행렬이므로 전치(transpose)를 해도 A의 가로, 세로의 크기는 변하지 않는다. 눈여겨 봐야할 것은 row와 column이 바뀐다는 것이다. 

 

 

지금까지 우리는 determinant와 관련된 모든 작업을 row 기준으로 해왔다. 모든 원소가 0인 row가 하나라도 있을 경우 determinant는 0이 되는 등 row기준으로 모든 작업을 진행해왔다. 그렇다면 모든 원소가 0인 column이 존재한다면 determinant는 어떻게 될까? 정답은 똑같이 0이다. 마찬가지로 행 교환(row exchange)을 했을 때 부호가 바뀌었다면, 열 교환(column exchange)을 했을 때에도 부호가 바뀐다. 그리고 일단 식 (31)의 determinant를 구했을 때, 양쪽 모두 ad-bc로 식은 같다.

 

 뭔가 같은 것 같긴 하지만 그래도 이전의 특성들을 활용해 식 (31)을 증명해보자. 아래 식을 보자. 

 

 

최초의 식 (33.1)에서 Lecture 4에서 배웠던 LU 분해(LU decomposition)를 통해 식 (33.2)와 같이 만들 수 있다(두 행렬의 곱에 transpose를 취하면 순서가 바뀜에 유의). 식 (33.2)는 하삼각행렬(Lower triangular matrix) L과 상삼각행렬(Upper triangular matrix) U의 곱으로 이루어져 있다. 이를 바로 전에 배웠던 prop. (9)의 특성을 이용하여 정리하면 식 (33.3)과 같이 된다. 여기서 L의 경우 대각 원소들은 1로 이루어져있다. 이 L행렬들의 대각 원소들을 제외한 나머지 원소들은 소거(elimination)를 통하여 없앨 수 있고, 결국 L의 determinant는 1이 된다. 

이제 남은 것은 식 (33.4)의 U이다. 알다시피 U도 transpose이던 아니던 삼각행렬(triangular matrix)의 형태를 띈다. 어떤 삼각 행렬이던간에 대각 원소들을 제외한 나머지 원소들은 소거를 통하여 없앨 수 있으며 determinant의 계산에 영향을 미치는 것은 결국 대각 원소(diagonal elements)들이다. 따라서 U를 transpose해도 대각 원소들은 바뀌지 않기 때문에 결과적으로 determinant는 같다. 이렇게 하여 determinant의 열 번째 특성도 증명을 하였다.  

 

 

2. 마치며

 

이번 강의에선 행렬식(determinant)의 특성들에 대해서 알아보았다. 아직 2x2크기의 행렬 이외의 determinant를 구하는 계산식은 배우지 않았는데 이들은 다음 포스팅에서 다룰 예정이다. 사실 계산식을 배우는 것 보다는 determinant가 가지고 있는 특성들을 먼저 이해하는 것이 나중에 응용될 여러 가지 수식들에 대해서도 훨씬 유용하다. 우리는 먼저 determinant의 중요한 3가지 특성들을 정리하고, 이를 기반으로 나머지 7개의 특성들에 대해서 정리하였다. 마지막으로 중요한 말 한 가지만 하자면, determinant는 pivot들의 곱으로 이루어지는 수치이다 !.

 

각 특성들은 determinant를 이해하는 데에 중요하기 때문에 반드시 이해하고 넘어가시기 바랍니다. 

특성들이 총 10가지나 되기 때문에 이를 한 눈에 알아보기 쉽게 아래에 표로 정리하였으니 참고하기 바랍니다. 꼭 표만 보지 마시고 반드시 본문의 내용을 숙지하신 뒤 참고용으로만 보시는 것을 추천드립니다

  • Determinant의 특성들
 특성 수식  설명 
 prop. (1) 
  • 단위행렬의 determinant는 1이다. 
 prop. (2) 
  • 행을 바꾸면 determinant의 부호가 바뀐다. 
  • 홀수번 바꾸면 -1, 짝수번 바꾸면 원래 부호 그대로. 
 prop. (3)-1
  • 행렬의 하나의 row에 곱해진 상수는 밖으로 뺄 수 있다. 
 prop. (3)-2   
  • 행렬의 하나의 row에 더해진 row벡터는 분리하여 정리할 수 있다. 
 prop. (4)   
  • 행렬에 두 개의 똑같은 row가 존재하면 determinant는 0이 된다. 
 prop. (5)   
  • 행렬을 Gauss소거법으로 소거하여도 determinant의 값은 변하지 않는다. 
 prop. (6)   
  • 모든 원소가 0인 row가 하나 라도 존재한다면, determinant는 0이다. 
 prop. (7)   
  • 삼각행렬(triangular matrix)의 determinant는 대각 원소들의 곱으로 간단히 구할 수 있다. 이때 d들은 0이 아니어야 한다. 
  • 일반 행렬들도 소거를 통해 삼각행렬을 만들고 대각 원소들의 곱으로 간단히 determinant를 구할 수 있다. 
 prop. (8) 
  •  행렬 A가 특이 행렬(singular matrix)이면 determinant는 0이다. 
  •  역행렬이 존재하면 determinant는 0이 아니다. 
  • 반대로 determinant를 통해 행렬의 역행렬 존재 여부를 판별할 수 있다.
 prop. (9)   





  • 두 행렬의 곱 AB의 determinant는 각 행렬의 determinant의 곱과 같다. 
  • A의 역행렬의 determinant는 A의 determinant의 역수이다. 
  • A의 제곱의 determinant는 A의 determinant의 제곱과 같다.
  •  A에 상수를 곱한 determinant는 상수의 n승을 A의 determinant에 곱한 것과 같다. 
 prop. (10)   
  • 행렬 A의 transpose의 determinant는 원래 행렬의 determinant와 같다. 
  • 즉 transpose를 해도 determinant는 변하지 않는다.  

 

+ Recent posts