1. 개요[편집]
| 수반행렬 Adjugate (classical adjoint) | |
|---|---|
| 정의 | 여인수행렬의 전치, $\operatorname{adj}(A)_{ij} = C_{ji}$ |
| 기본 항등식 | $\operatorname{adj}(A)\,A = A\,\operatorname{adj}(A) = \det(A)\,I$ |
| 미분 | 야코비 공식 $d\det(A) = \operatorname{tr}(\operatorname{adj}(A)\,dA)$ |
| 특이 행렬 | $\operatorname{rank}A = n-1$ 이면 $\operatorname{adj}A$ 의 계수는 1 |
| 실용 영역 | $2\times2$, $3\times3$ 닫힌 형 역행렬 · 기호 계산 |
| 실용 금지 | $n \gtrsim 4$ 에서 선형계 풀이 용도 |
모든 선형대수 교과서가 3장에서 가르치고, 모든 수치해석 교과서가 1장에서 쓰지 말라고 하는 그 행렬.
수반행렬(adjugate, classical adjoint)은 정사각행렬 의 여인수(cofactor)들을 모아 전치해 만든 같은 크기의 행렬로, 로 쓴다. 존재 이유는 딱 하나의 항등식이다.
이면 양변을 나눠 라는 역행렬의 닫힌 공식이 나온다. 나눗셈 없이 쓰인 형태라는 점이 핵심 — 이 항등식은 실수·복소수뿐 아니라 임의의 가환환 위에서 성립하고, 그래서 정수 행렬·다항식 행렬·기호 행렬에도 그대로 적용된다. 케일리-해밀턴 정리의 표준 증명이 다항식 환 위에서 를 쓰는 것도 그 덕이다.
그런데 수치해석 수업에서는 이 공식이 등장하자마자 절대 쓰지 말라는 경고가 붙는다. 비용도 정확도도 재앙이기 때문. 그럼에도 수반행렬이 죽지 않는 이유는 따로 있다 — 행렬식을 미분할 때, 특이행렬의 영공간을 읽을 때, 그리고 을 수십억 번 뒤집어야 할 때다.
2. 정의 — 여인수행렬의 전치[편집]
의 행 열을 지운 소행렬의 행렬식을 소행렬식 , 부호를 붙인 것을 여인수 라 한다. 수반행렬은 이 여인수행렬을 전치한 것이다.
전치를 빼먹는 것이 이 개념의 1번 실수다. 에서는
로 “대각은 바꾸고 비대각은 부호만 뒤집기”라는 외우기 쉬운 형태가 나온다. 대칭행렬이라 전치가 티가 안 나는 로 배운 사람이 에서 전치를 잊고 역행렬을 전치된 채 얻는 사고가 이 바닥의 국룰.
항등식 자체는 행렬식의 여인수 전개를 두 방향으로 읽은 것에 불과하다. 는 행 전개고, 일 때 은 ” 행을 행으로 갈아끼운 행렬”의 행렬식인데 그 행렬은 같은 행이 두 개라 0이다. 둘을 묶은 것이 .
따라오는 성질들도 깔끔하다.
- — 순서가 뒤집힌다.
- .
- 에서 .
- — 스케일에 제곱으로 반응한다.
마지막 성질은 곧바로 오버플로 경고이기도 하다. 짜리 행렬의 원소를 10배 키우면 수반행렬 원소는 배가 된다.
수반행렬의 각 성분이 차 소행렬식이라는 사실은 이것이 차 복합행렬(compound matrix)과 부호·전치 차이밖에 없는 대상임을 뜻한다. 복합행렬 언어로 보면 코시-비네 공식에서 가 자동으로 떨어진다.
3. 크라메르 법칙과, 아무도 그걸로 안 푸는 이유[편집]
의 해를 성분별 행렬식 비로 주는 것이 **크라메르 법칙**이다.
를 성분별로 쓴 것과 같다. 닫힌 형이고 아름다운데, 실무에서 쓰이지 않는 이유가 두 겹이다.
첫째, 느리다. 여인수 전개로 각 행렬식을 재귀 계산하면 이라 논외고, LU 분해로 영리하게 해도 개의 행렬식을 각각 에 구해야 하니 다. 가우스 소거법 한 번이면 에 끝나는 일을 배 비싸게 하는 셈. 수반행렬 전체를 만드는 것도 마찬가지로 이고, 정칙이면 로 에 우회할 수 있지만 특이행렬에서는 그 우회로가 막힌다.
둘째, 그리고 더 나쁘게, 불안정하다. 크라메르 법칙은 후진 안정하지 않다. 계산된 해 가 원래 문제의 작은 섭동 의 정확한 해라고 말할 수 없다는 뜻이다. 하이엄의 표준 반례는 만으로도 충분한데, 두 행렬식이 각각 심한 상쇄를 겪고 나서 서로 나누어지므로 유효숫자가 두 번 증발한다. 부분 피벗팅을 붙인 가우스 소거는 실무적으로 후진 안정한데, 크라메르는 그 성질을 원리적으로 갖지 못한다.1
그래서 정리하면 이렇다 — 크라메르 법칙은 해가 계수에 대해 어떻게 의존하는지 보여주는 이론 도구이지 알고리즘이 아니다. 존재성 증명이나 기호 미분에는 여전히 유용하다.2
4. 야코비 공식 — 행렬식을 미분하는 방법[편집]
수반행렬의 진짜 밥벌이는 여기다. 를 의 성분에 대한 함수로 보고 미분하면
이고, 이것을 전미분으로 묶은 것이 야코비 공식(Jacobi’s formula)이다.
가 정칙이면 이므로 익숙한 가 되고, 여기서 나 유체역학의 레이놀즈 수송정리(부피 요소의 시간 변화율 )가 나온다. 다만 특이행렬에서도 성립하는 것은 수반행렬 형태뿐이라는 점이 야코비 공식을 굳이 로 쓰는 이유다.
CAE에서 이 공식이 등장하는 자리는 셀 수 없이 많다.
- 초탄성 구성식. 초탄성 재료 모델의 변형 에너지에는 부피 변화 가 들어가고, 응력을 얻으려면 가 필요하다. 야코비 공식이 곧바로 를 준다. 연속체역학의 낸슨 공식 도 같은 여인수행렬이며, 비압축 요소의 압력 자유도와 요소 잠김 논의가 전부 이 를 둘러싸고 벌어진다.
- 형상 민감도. 형상 최적화와 위상 최적화에서 절점 좌표가 움직이면 자코비안 행렬의 행렬식 가 변하고, 요소 적분의 미분에 가 그대로 등장한다. 자동 미분이 내부적으로 뱉는 것도 이 공식이다. 메시 생성의 요소 뒤집힘 검사()를 개선 방향으로 밀 때도 같다.
- 통계와 우도. 가우시안 로그우도의 를 하이퍼파라미터로 미분하면 가 나온다. 가우시안 프로세스 학습의 기울기가 정확히 이것.
5. 특이행렬에서의 수반행렬[편집]
이면 항등식이 로 무너진다. 그런데 이 “무너짐”이 오히려 정보를 준다. 계수에 따라 다음이 성립한다.
| 정칙, | |
| 계수가 정확히 1 | |
| 영행렬 |
계수가 인 경우가 흥미롭다. 는 의 모든 열이 의 영공간에 들어 있다는 뜻이고, 그 영공간은 1차원인데 는 영행렬이 아니다. 따라서 의 0이 아닌 아무 열이나 뽑으면 그것이 영공간을 생성하는 벡터다. 마찬가지로 에서 행들은 좌영공간을 생성한다. 결국 꼴의 계수 1 행렬이고, 는 우영벡터, 는 좌영벡터다.
작은 문제에서는 이게 실제로 쓰인다. 두 벡터에 동시에 수직인 방향, 사영기하 동차좌표에서 두 직선의 교점, 3점을 지나는 평면 — 전부 계수 결손 행렬의 영공간 뽑기다. 반면 큰 문제에서는 안 쓴다. 반올림 오차 때문에 가 정확히 인 일이 관측되지 않고, 무엇보다 특이값 분해의 최소 특이벡터가 같은 답을 훨씬 안정적으로 준다. “수치 영공간”은 SVD의 영역, 수반행렬은 기호·저차원의 영역이라는 분업이 확실하다.3
6. 그래도 살아남은 자리들[편집]
· 닫힌 형 역행렬. 유한요소법의 등매개변수 요소 루틴은 매 요소·매 구적점마다 야코비안 를 뒤집는다. 100만 요소 × 구적점 8개면 800만 번. 이 크기에서는 가 압도적으로 빠르다 — 피벗 탐색이 없어 분기가 전혀 없고, 곱셈 몇 개와 나눗셈 하나뿐이며, 완전히 언롤되어 SIMD와 GPU 워프에 그대로 올라간다. 범용 가우스 소거법 루틴은 피벗 분기 때문에 파이프라인이 깨져 몇 배 느리다. 조건수는? 야코비안이 나쁘다면 그건 메시 생성이 잘못된 것이지 역행렬 알고리즘 탓이 아니다.4 강성행렬 조립, 회전행렬 처리, 그래픽스의 법선 변환 행렬( 이 정확히 그것)이 전부 이 세계다.
분해행렬과 특성다항식. 정의에서 를 변수로 둔 다항식 행렬에 항등식을 쓰면
이 나온다. 분해행렬(resolvent)의 극점이 곧 특성다항식의 근이라는 사실이 여기서 눈에 보인다. 분자 의 계수 행렬 와 의 계수를 의 거듭제곱과 대각합만으로 동시에 뽑아내는 것이 파데예프-르베리에(Faddeev–LeVerrier) 알고리즘이며, 에 나눗셈이 정수뿐이라 기호·정수 계산에서는 지금도 쓰인다. 부동소수점에서는 항들의 크기 차가 극단적이라 이 20만 넘어도 유효숫자가 남지 않는다 — 자세한 사정과 최소다항식과의 관계는 케일리-해밀턴 정리 참고. 분해행렬은 행렬함수의 코시 적분 정의에도 그대로 들어간다.
기호 계산과 정수 산술. 컴퓨터 대수 시스템에서 나눗셈 없이 역행렬 정보를 다룰 때, 정수 행렬의 역을 유리수로 확장하지 않고 표현할 때 가 표준 도구다. “나눗셈이 없다”는 성질은 부동소수점 세계에서 아무 가치도 없지만 환(ring) 위에서는 전부다.
7. 관련 문서[편집]
- 행렬식 · 케일리-해밀턴 정리 · 최소다항식 · 행렬함수
- LU 분해 · 가우스 소거법 · 조건수 · 후진 오차 해석
- 특이값 분해 · 고유값 문제 · 자코비안 행렬
- 등매개변수 요소 · 형상함수 · 강성행렬 · 요소 잠김
- 초탄성 재료 모델 · 연속체역학 · 형상 최적화 · 자동 미분
8. Footnotes[편집]
-
하이엄의 Accuracy and Stability of Numerical Algorithms 1장이 이 반례로 시작한다. 재밌는 건 크라메르 법칙이 전진 오차로는 꽤 괜찮은 경우가 있다는 것 — 그래서 “돌려봤더니 맞던데요?”라는 반박이 끊이지 않는다. 문제는 언제 맞고 언제 틀리는지 사전에 알 수 없다는 점이고, 수치해석에서 그건 그냥 틀린 것과 같다. ↩
-
수반행렬로 역행렬을 구하는 코드를 제출했다가 리뷰에서 반려당한 신입의 변명이 “교과서에 나온 공식대로 했는데요”였다는 이야기는 사무실마다 하나씩 있다. 교과서는 틀리지 않았다. 다만 그 장의 목적이 “역행렬이 존재한다”를 증명하는 것이었지 “역행렬을 구하라”가 아니었을 뿐이다. ↩
-
한국어 “수반행렬”은 지뢰밭이다. 선형대수에서는 이 문서의 adjugate를 뜻하지만, 함수해석·양자역학 맥락에서는 켤레전치 (Hermitian adjoint, 에르미트 수반)를 가리킨다. 영어권이 헷갈리다 못해 전자를 adjugate라는 새 단어로 갈아치운 게 20세기 중반인데, 한국어는 아직 그 개명을 못 따라갔다. 참고로 동반행렬(companion matrix)은 또 다른 물건. ↩
-
그렇다고 , 까지 손으로 전개한 코드를 쓰는 것은 다른 이야기다. 항이 급격히 늘어 코드가 수백 줄이 되고 상쇄도 심해진다. 그래픽스가 동차 변환을 닫힌 형으로 뒤집는 건 그게 회전+평행이동이라는 특수 구조라서지, 일반 라면 그냥 LU 분해를 쓰자. ↩