[선형대수] 역행렬 계산은 저에게 너무 복잡합니다만?
2021-08-09⚠️ 주의 : 이 글은 오래전에 적혔습니다. 글의 내용이 틀릴 수 있고, 현재의 제 생각과 다를 수 있습니다. 참고 부탁드립니다.
?!?!😵
구름이 잔뜩 낀 사월의 어느 오후, 조용한 강의실에 정신없이 울려 퍼지는 연필과 종이의 마찰음, 마스크 밖으로 튀어나오지 못해 절제된 한숨, 책상에 한없이 날리는 지우개 가루, 종이 속에 펼쳐진 수 많은 숫자들…
그렇다. 바로 중간고사다.
과목은 선형대수. 2학년 학과 수업 중 가장 중요하고도 어려운 과목 중 하나이기도 하다.
아무튼 나 역시 다른 사람들처럼 문제를 한 문제씩 천천히 풀어나갔다.
앗 그런데, 아뿔싸! 큰일이다. 내가 수반행렬을 이용해서 구한 역행렬이 원래 행렬과 행렬 곱 계산을 했을 때 단위행렬이 안되는 것 같았다.
충격적이다. 수많은 연산으로 시간이 오랫동안 흘렀지만 무엇이 문제인지 눈에 잘 보이지 않았다. 나는 더 이상 시간을 지체할 수 없었고, 다른 문제를 풀었어야 했다.
역행렬이 어쩌구가 도대체 뭔데?🤔
간단한 설명
음 일단 내가 중간고사까지 개인적으로 느꼈던 선형대수에서 가장 중요한 질문(물론 더 많이 배울수록 더 중요한 질문들이 많이 생겨났었다)은
선형연립방정식이 무엇이고 이것을 어떻게 풀 것인가? 인 것 같다.
먼저 선형연립방정식은 선형: 일차항으로 이루어진, 연립 : 여러 개의, 방정식 : 미지수에 대한 등식 즉 일차항으로 이루어졌고, 여러 미지수에 대한 서로 관계있는 등식들의 모음이 선형연립방정식이라고 할 수 있다.
맞다. 여러분이 초중고 생활 동안 아주 많이 봐온 일차연립방정식이다.
아무튼 선형연립방정식은 흔히들 말하는 가감법과 대입법을 이용해서 대학생 이전에는 풀어왔었다. 그런데 미지수의 개수가 많아지고, 식의 개수가 많아지면 이 방법들은 시간도 오래 걸리고 힘들다. 그러므로 선형연립방정식을 행렬을 이용해서 방정식의 계수와 관련된 새로운 방정식을 만들어서 푸는 방법을 생각해 볼 수 있다. 그것이 바로 행렬방정식이다.
기호를 통해서 간단하게 나타낼 수도 있다!
라 할 때,
이런 식으로 말이다.
그런데, 이 식을 보면 본능적으로 양변에 A의 역수 즉 1/A를 곱해서 풀고 싶겠지만, 그러면 안 된다!
왜냐하면 행렬은 일반적인 수가 아니기 때문이다!
그래도 좋은 접근이다.
행렬방정식에서도 역수는 아니지만 행렬곱에 대한 역원인 역행렬을 양변에 곱해서 방정식을 풀 수 있다.
아마 이쯤에서 감을 잡았겠지만, 실수 집합의 어떤 수에 역수를 곱하면 1이 나온다. 어떤 수와 1을 곱하면 그 결과는 어떤 수가 된다. 이처럼 행렬 집합에서 어떤 행렬이 역행렬이 존재한다고 할 때(원래 행렬이 정방행렬이 아니거나 기타 이유로 역행렬이 존재하지 않을 수 있다), 역행렬을 곱하면 단위행렬 I가 되고, 어떤 행렬과 단위행렬을 곱하면 그 결과는 어떤 행렬이 된다.
그렇다. 내가 구했던 역행렬은 올바르게 구해지지 않았기 때문에 2)의 성질을 만족하지 않았던 것이다! (아마 계산 실수…)
아무튼 간에 이제 역행렬을 구해보자!
본격적으로 역행렬 구하기!🔢
역행렬을 구하는 방법에는 여러 방법이 있지만, 이 글에서는 행렬식과 수반행렬을 이용해서 역행렬을 구해볼 것이다!
“자세한 공식유도나 증명” 등은 검색을 통해서 알아본다면 더 도움이 될 것이다.
2X2 행렬의 역행렬
먼저 2X2 행렬의 역행렬을 알아보자. 아주 계산하기 쉽고 간단하다!
흠 근데 뭔가 위험한 부분이 있는 것 같다.
만약에 ad-cb가 0이 되면 어떻게 될까?
초중고 생활을 하면서 어떤 수를 0으로 나눠 본 적은 없을 것이다. 왜냐하면 그런 수는 존재하지 않기 때문이다.
그런데 만약에 위처럼 역행렬 계산식의 분수 분모 부분이 0이 되면 역행렬이 존재하지 않게 된다!
그래서 이 분모 부분은 역행렬에서 역행렬의 존재 여부등 꽤 중요한 의미를 갖기 때문에 행렬식이라는 이름이 따로 있다.
자세한 내용은 2X2 행렬보다 크기가 큰 행렬에서 더 살펴보도록 하자.
NXN 행렬( N > 2 )의 역행렬
nxn의 역행렬도 형태는 비슷하다.
처음 보는 게 많다…괜찮다! 나도 그랬었다 ㅎㅎ
먼저 det(A)는 A의 행렬식이다. 위에서 본 2x2행렬 처럼 그냥 원소의 곱으로 적으면 되는데 왜 이상한 기호를 써서 표현할까?
그 이유는 n이 커질수록 즉 (정방)행렬의 크기가 커질수록 원소의 곱이 복잡해져서 그럴 것이다. 행렬식을 어떻게 구하는데 원소의 곱으로 표현하는 것이 복잡해질까? N이 2보다 큰, NXN 행렬 중에서 가장 작은 3x3 행렬의 예시로 한번 알아보도록 하자.
위 그림을 보면 알 수 있듯이 행렬식은 다소 재밌는? 과정을 통해서 계산할 수 있다.
- 먼저 행을 선택한다. (위의 경우는 1행을 선택한 경우이다)
- 행의 원소마다 해당하는 소행렬식을 계산할 수 있는 2x2 행렬까지 구한다.
- 원소의 있는 행,열을 제외한 나머지 행과 열로 소행렬?을 만든다.
- 만든 행렬이 2x2 행렬이면 계산하고 원소의 행과 열에 맞는 부호를 곱한다. (n>2면 똑같은 방식으로 계속해서 소행렬식으로 쪼개서 계산한다.)
- 2에서 구한 소행렬식의 값과 원소의 곱을 모두 더 한다.
2 부분을 보면 알겠지만 마치 마트료시카 인형처럼 행렬식을 계산할 수 있는 행렬인 2x2 행렬이 나올 때까지 재귀적으로 계산을 수행하는 것을 볼 수 있다.
이 과정을 수식으로 적으면 다음과 같다.
여기서 또 하나의 수수께끼가 풀린다. Cnm 은 n행 m열 원소를 선택했을 때 소행렬식과 부호값의 곱이다! 이를 여인자라 한다. 영어로는 Cofactor 그래서 C라는 약자를 사용하는 것이다.
아 참고로 위에 붙어 있는 T는 전치행렬이라는 뜻이다. 쉽게 말해서 전치행렬은 열과 행을 서로 바꾸는 거다. 다음을 보면 이해가 단번에 될 것이다.
이와 같이 성분들이 여인자인 행렬의 전치행렬을 수반행렬이라고 한다. 즉, 우리는 지금까지 역행렬을 구하는 여러가지 방법 중에서 행렬식과 수반행렬을 이용하는 방법을 알아보았다고 말할 수 있겠다.
이로서 드디어 우리는 선형연립방정식을 행렬방정식으로 만들고 역행렬을 구하고 행렬곱 연산, 스칼라 배 연산을 통해서 풀 수 있게 되었다.
혹시 시간이 약간 있다면 글을 읽는 것을 잠시 멈추고, 연습장을 하나 꺼내펼치고, 연필이나 볼펜으로 아무 선형연립방정식을 만들어 적은 다음, 행렬식과 수반행렬을 이용해서 역행렬을 구하고 선형연립방정식을 풀어보는 것이 어떨까?
준비과정을 마치면서
음 설명이 부족하고 지루한 글을 여기까지 읽어줘서 미안하고, 고맙다.
사실 이 글은 Python으로 역행렬을 구하기 위해서 지난 학기에 배웠던 역행렬 개념을 정리하는 글이었다.
(코드는 다 짜놓은 상태이고, 글과 테스트코드를 작성해야함)
아마 곧 있으면, 이에 대한 Python 코드와 약간의 테스트를 곁들인 글도 블로그에 올릴 것 같다.
거의 처음으로 수학과 관련된 글을 써보았는데 역시 수학은 어렵고, 수학을 설명하는 글을 쓰는 것은 더 어렵다.
그렇기 때문에 항상 겸손한 마음으로 더 열심히 공부를 해야겠다는 생각이 든다. (화이팅…!)
다음에는 더 좋은 글로 찾아오겠다. 그럼 안녕🙋♂️