행렬식

편집 역사 토론
수치해석 마지막 수정: 2026-07-12 04:05:47

1. 개요[편집]

행렬식
Determinant
기호det(A), |A|
분야선형대수 × 수치해석
기하학적 의미부피 배율 (signed volume)
실용 계산LU 분해 후 대각원소 곱
특이 판정det = 0 ⟺ 역행렬 없음

det가 0이면 그 행렬은 죽은 거다. 되살릴 방법은 없다.

행렬식(determinant)은 정사각 행렬 하나에 대응되는 스칼라 값으로, 그 행렬이 나타내는 선형변환이 공간의 부피를 얼마나 늘리거나 줄이는지를 나타내는 배율이다. 기호로는 det(A)\det(A) 또는 A|A|로 쓴다. 값이 0이면 변환이 공간을 납작하게 찌부러뜨린다는 뜻이고, 이는 곧 역행렬이 존재하지 않는다(특이하다, singular)는 것과 완벽하게 같은 말이다.

행렬식은 선형대수의 가장 오래된 개념 중 하나이면서도, 실무 수치계산에서는 의외로 “직접 값을 구할 일이 드문” 애증의 존재다. 왜냐하면 정확한 값 자체보다 “0이냐 아니냐”, “부호가 뭐냐” 정도만 궁금한 경우가 대부분이고, 큰 행렬의 행렬식은 오버플로/언더플로로 숫자가 폭주하기 십상이기 때문.1

2. 정의[편집]

2×22 \times 2 행렬의 행렬식은 대각 곱의 차다.

det(abcd)=adbc\det \begin{pmatrix} a & b \\ c & d \end{pmatrix} = ad - bc

일반적인 n×nn \times n 행렬에 대해서는 라이프니츠 공식으로 정의된다. 모든 순열 σ\sigma에 대해 부호를 매겨 더한다.

det(A)=σSnsgn(σ)i=1nai,σ(i)\det(A) = \sum_{\sigma \in S_n} \operatorname{sgn}(\sigma) \prod_{i=1}^{n} a_{i,\sigma(i)}

이 정의는 아름답지만, 순열의 개수가 n!n!개라 계산에는 절대 쓰지 않는다. 대신 교과서에서는 여인수 전개(cofactor expansion, 라플라스 전개)를 가르친다.

det(A)=j=1n(1)i+jaijMij\det(A) = \sum_{j=1}^{n} (-1)^{i+j} \, a_{ij} \, M_{ij}

여기서 MijM_{ij}iijj열을 지운 소행렬식(minor). 손으로 3×33 \times 3을 풀 때는 편하지만, 재귀적으로 파고들면 결국 O(n!)O(n!)이라 컴퓨터에게는 재앙이다.

3. 기하학적 의미[편집]

행렬식의 진짜 정체는 부호 있는 부피 배율이다. 2차원에서 행렬 AA의 두 열벡터가 만드는 평행사변형의 넓이가 det(A)|\det(A)|이고, 3차원에서는 세 열벡터가 만드는 평행육면체의 부피가 det(A)|\det(A)|이다. 부호는 방향(orientation)을 뒤집었는지 알려준다 — 음수면 좌표계가 거울상으로 뒤집힌 것.

이 관점에서 det=0\det = 0의 의미는 직관적이다. 부피가 0이라는 건 벡터들이 한 평면(또는 직선) 위에 눌러앉았다는 뜻, 즉 선형 종속이다. 변환이 차원을 하나 이상 잡아먹었으니 되돌릴 수 없고, 그래서 역행렬이 없다. 자코비안 행렬의 행렬식이 좌표 변환에서 미소 부피 요소의 배율(dV=JdVdV' = |J|\,dV)로 쓰이는 것도 정확히 이 이유다.2

4. 주요 성질[편집]

행렬식은 다음 성질들로 무장하고 있어, 정의로 계산하지 않아도 값을 다룰 수 있다.

  • 곱셈성: det(AB)=det(A)det(B)\det(AB) = \det(A)\det(B). 변환을 이어 붙이면 배율이 곱해진다는 자명한 사실.
  • 전치 불변: det(A)=det(A)\det(A^\top) = \det(A).
  • 역행렬: det(A1)=1/det(A)\det(A^{-1}) = 1/\det(A).
  • 삼각행렬: 상삼각·하삼각 행렬의 행렬식은 그냥 대각원소의 곱이다. 이게 실용 계산의 핵심.
  • 행 연산: 두 행을 교환하면 부호가 바뀌고, 한 행에 상수 cc를 곱하면 전체가 cc배, 한 행의 배수를 다른 행에 더하면 값은 불변.
  • 고유값과의 관계: det(A)\det(A)는 모든 고유값의 곱과 같다. 그래서 고유값 중 하나라도 0이면 특이 행렬.

5. 실용적 계산: 왜 여인수 전개를 안 쓰는가[편집]

여인수 전개의 복잡도는 O(n!)O(n!)이다. n=20n = 20짜리 행렬이면 순열이 2.4×10182.4 \times 10^{18}개라, 초당 10억 번 계산해도 77년이 걸린다. 이건 공학이 아니라 고문이다.

그래서 실제로는 LU 분해를 쓴다. 행렬을 하삼각 LL과 상삼각 UU의 곱으로 분해하면(A=LUA = LU), 삼각행렬의 행렬식은 대각원소의 곱이므로:

det(A)=det(L)det(U)=(iii)(iuii)\det(A) = \det(L)\det(U) = \left(\prod_i \ell_{ii}\right)\left(\prod_i u_{ii}\right)

부분 피벗팅을 쓰면 행 교환이 일어나므로 교환 횟수만큼 부호 (1)교환수(-1)^{\text{교환수}}를 곱해주면 끝. 가우스 소거법과 본질적으로 같은 이 방법의 복잡도는 O(n3)O(n^3)이라, n!n!과 비교하면 천국이다. 대부분의 수치 라이브러리는 오버플로를 피하려고 값 대신 로그 행렬식(logdetA=iloguii\log|\det A| = \sum_i \log|u_{ii}|)을 반환한다.3

6. 특이성과 조건수[편집]

det(A)=0\det(A) = 0은 행렬이 특이하다는 정확한 수학적 판정 기준이다. 하지만 부동소수점 세계에서는 이 판정이 함정이다. 행렬식이 “정확히 0”인 경우는 반올림 오차 때문에 사실상 관측되지 않고, “0에 가깝다”는 것도 특이성의 좋은 척도가 못 된다. 예컨대 대각원소가 전부 0.1인 100×100100 \times 100 행렬은 멀쩡한데도 det=10100\det = 10^{-100}이라 컴퓨터 눈에는 “거의 특이”로 보인다.

그래서 수치해석에서는 특이성 근접도를 조건수(condition number)로 판단한다. 조건수는 특이값 분해에서 얻는 최대·최소 특이값의 비율로, 스케일에 둔감해 행렬식보다 훨씬 믿을 만하다. “det가 작다”가 아니라 “조건수가 크다”가 진짜 위험 신호라는 것 — 행렬식의 겸손을 배워야 하는 대목이다.

7. 관련 문서[편집]

8. Footnotes[편집]

  1. 30×3030 \times 30 무작위 행렬만 되어도 원소가 O(1)인데 행렬식은 쉽게 102010^{20}을 넘나든다. double 정밀도의 지수 범위를 우습게 벗어나므로, 라이브러리들은 값 대신 로그와 부호를 따로 반환하는 것을 기본으로 삼는다.

  2. “야코비언”이라 읽는 그 J가 바로 자코비안 행렬의 행렬식이다. 적분에서 변수 치환을 할 때 튀어나오는 그 값. 극좌표 변환에서 rr이 붙는 이유가 바로 자코비안 행렬식이 rr이기 때문이다.

  3. 여인수 전개를 실제 코드로 짜서 제출한 신입이 있었다는 전설이 있다. n=15n = 15 행렬 하나 계산하다 점심을 먹고 왔는데도 안 끝나 있더라는 후일담. 수렴은 신에게, 행렬식은 LU에게 맡기자.