본문 바로가기
C.W.K.
Stream
Lesson 06 of 08 · published

행렬식: 부피 변화와 특이성

~8 min · determinant, soul, invertibility

Level 0수학 초심자
0 XP0/59 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete

변환이 부피를 얼마나 바꾸나

정방행렬의 행렬식은 그 변환이 길이·넓이·부피를 몇 배로 바꾸는지 압축한 숫자야.

  • : 부피의 배율이야. 2면 두 배, 0.5면 절반이 돼.
  • 부호: 양수면 방향성을 보존하고 음수면 거울처럼 방향성을 뒤집어.
  • : 부피가 0으로 눌렸다는 뜻이야. 한 차원 이상을 잃었으므로 행렬은 특이하고 역행렬이 없어.

2×2 행렬 의 행렬식은 야. 공식은 작지만, 큰 행렬에서는 전개식으로 손계산하지 말고 검증된 선형대수 함수를 써.

이론 판정과 수치 계산은 다르다

정확한 수학에서는 와 가역성이 같은 조건이야. 하지만 부동소수점 코드에서 det(A) != 0로 가역성을 검사하는 건 좋지 않아. 반올림 때문에 0이어야 할 값이 아주 작게 나오거나, 차원과 스케일 때문에 행렬식이 넘치고 밑돌 수 있거든.

선형시스템은 먼저 solve로 풀고 오류를 처리해. 상태를 진단하려면 특이값이나 조건수 np.linalg.cond(A)를 보는 편이 낫고, 로그 행렬식이 필요하면 slogdet를 써. 행렬식의 절댓값이 작다는 사실만으로 수치 불안정을 단정할 수도 없어. 행렬 전체의 스케일에 따라 함께 작아질 수 있으니까.

어디에 쓰일까

  • 두 벡터가 만드는 평행사변형의 넓이와 세 벡터가 만드는 평행육면체의 부피
  • 좌표를 바꿀 때 밀도와 적분을 보정하는 야코비안 행렬식
  • 확률모형에서 공분산행렬의 부피와 로그밀도를 계산하는 항
행렬식은 부피 배율을 말해 주는 기하학적 지문이야. 이론을 이해하는 데는 강력하지만, 수치 코드의 가역성 검사 버튼으로 쓰진 마.

Code

세 행렬의 행렬식 비교하기·python
import numpy as np

A = np.array([[2, 0],
              [0, 3]])               # x축 2배, y축 3배
print(np.linalg.det(A))              # 6: 넓이가 6배

B = np.array([[1, 2],
              [2, 4]])               # 두 행이 선형종속
print(np.linalg.det(B))              # 0: 퇴화해 역행렬이 없어

# 두 벡터가 만드는 평행사변형의 넓이
u, v = np.array([3, 0]), np.array([1, 4])
area = abs(np.linalg.det(np.array([u, v])))
print(area)                          # 12

External links

Exercise

3×3 임의 행렬의 행렬식을 계산해. 이어서 한 행이 다른 행의 정확히 두 배인 3×3 행렬을 만들고 행렬식이 왜 0이 되는지 선형종속과 부피 변화로 설명해.
Hint
두 행이 선형종속이면 행렬의 랭크가 3보다 작아. 3차원 부피가 평면이나 그보다 낮은 차원으로 눌리므로 부피 배율인 행렬식은 0이 돼.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 2

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.
  1. Elechemist
    Elechemist

    한행이 다른행의 배수이면 singular 기 때문에 역행렬이 존재하지 않는다

    import numpy as np

    rng = np.random.default_rng(7) A = rng.standard_normal((3, 3)) print('A =') print(A) print('det(A) =', np.linalg.det(A))

    B = np.array([[1., 2., 3.], [2., 4., 6.], [0., 1., 5.]]) print('B =') print(B) print('det(B) =', np.linalg.det(B))

    💛 by 피파warm
    1. 피파
      피파· warmElechemistElechemist

      맞아요. 한 행이 다른 행의 배수이면 두 행이 독립이 아니어서 행렬식이 0이 되고, 그래서 역행렬도 존재하지 않아요. 이걸 “공간의 부피가 한 차원 아래로 눌린다”로 잡아두면 determinant 감각이 훨씬 오래 갑니다.