Search

행렬의 성질 with python

Created at
2018/11/16
Updated at
Tags
Keywords
3 more properties

행렬의 부호

1) 행렬의 양-정부호(positive definite) 특성

영벡터가 아닌 모든 벡터 xx에 대해 다음 부등식이 성립하면 행렬 AA가 양-정부호(positive definite)이라고 함
xTAx>0x^TAx>0
식이 등호를 포함하는 경우 양-준정부호(positive semi-definite)
xTAx0x^TAx \geq 0
단위 행렬은 양-정부호

행렬의 크기

1) 놈(norm)

행렬 AA에 대해 다음처럼 정의되는 숫자로, 보통 AL\Vert A \Vert_L로 표기 (LL은 1, 2, 또는 무한대를 많이 사용)
벡터의 길이
AL=(i=1Nj=1MaijL)1/L\Vert A \Vert_L = \left( \sum_{i=1}^N \sum_{j=1}^M |a_{ij}|^L \right)^{1/L}
L=2L=2L2L2놈이 많이 쓰이며, 프로베니우스 놈(Frobenius norm)이라고 불리기도 함 ($\Vert A \Vert_F$로 표기)
A=A2=AF=i=1Nj=1Maij2\Vert A \Vert = \Vert A \Vert_2 = \Vert A \Vert_F = \sqrt{\sum_{i=1}^N \sum_{j=1}^M a_{ij}^2}
행렬과 벡터의 놈은 항상 0과 같거나 0보다 큰 값을 가짐
numpy에서는 linalg 서브패키지의 norm 명령으로 계산
A = (np.arange(9) - 4).reshape((3,3)) A
Python
복사
array([[-4, -3, -2], [-1, 0, 1], [ 2, 3, 4]])
np.linalg.norm(A)
Python
복사
7.745966692414834

2) 대각합(trace)

정방행렬의 대각 원소들의 합
tr(A)=a11+a22++aNN=i=1Naiitr(A) = a_{11} + a_{22} + \cdots + a_{NN} = \sum_{i=1}^N a_{ii}
대각합의 성질
스칼라를 곱하면 대각합은 스칼라와 원래의 대각합의 곱이다.
tr(cA)=c  tr(A)\text{tr} (cA) = c\;\text{tr} (A)
전치연산을 해도 대각합이 달라지지 않는다.
tr(AT)=tr(A)\text{tr} (A^T) = \text{tr} (A)
두 행렬의 합의 대각합은 두 행렬의 대각합의 합이다.
tr(A+B)=tr(A)+tr(B)\text{tr} (A + B) = \text{tr} (A) + \text{tr} (B)
두 행렬의 곱의 대각합은 행렬의 순서를 바꾸어도 달라지지 않는다.
tr(AB)=tr(BA)\text{tr} (AB) = \text{tr} (BA)
세 행렬의 곱의 대각합은 다음과 같이 순서를 순환시켜도 달라지지 않는다.
tr(ABC)=tr(BCA)=tr(CAB)\text{tr} (ABC) = \text{tr} (BCA) = \text{tr} (CAB)
마지막 두 성질은 trace trick이라고 하여 이차 형식(quadratic form)의 미분을 구하는데 유용하게 사용됨
이 두 수식에서는 A,B,CA, B, C가 각각 정방행렬일 필요는 없고 대각합을 구하는 행렬이 정방 행렬이면 됨
이차형식의 trace trick 공식 (이차형식은 스칼라 값이기 때문에 대각합을 취해도 원래의 값과 같음)
xTAx=tr(xTAx)=tr(AxxT)=tr(xxTA)x^TAx = \text{tr}(x^TAx) = \text{tr}(Axx^T) = \text{tr}(xx^TA)
numpy에서는 linalg 서브패키지의 trace 명령으로 계산
np.trace(np.eye(3))
Python
복사
3.0

3) 행렬식(determinant)

정방행렬의 행렬식은 det(A),Adet(A), |A|로 표기
코팩터 전개(cofactor expansion)라고 불리는 재귀적인 방법으로 정의
(이 복잡한 수식과 계산 방법을 외우는 것 보다는 이해하고 넘어가는 것이 좋다고 생각된다. 어차피 손계산으로 행렬식을 구할 일은 거의 없을 것이니)
det(A)=i=1N{(1)i+j0Mi,j0}ai,j0또는det(A)=j=1N{(1)i0+jMi0,j}ai0,j\det(A) = \sum_{i=1}^N \left\{(-1)^{i+j_0} M_{i,j_0} \right\} a_{i,j_0} \\ \text{또는} \\ \det(A) = \sum_{j=1}^N \left\{(-1)^{i_0+j} M_{i_0,j} \right\} a_{i_0,j}
2차, 3차 정방행렬의 행렬식 공식 (특히 2×2의 행렬식 정도는 기억해두어야 한다.)
2×2 행렬의 행렬식
det([ab cd])=adbc\det \left( \begin{bmatrix} a&b \\\ c&d \end{bmatrix} \right) = ad-bc
3×3 행렬의 행렬식
det([abc def ghi])=aei+bfg+cdhcegbdiafh\det \left( \begin{bmatrix}a&b&c \\\ d&e&f \\\ g&h&i\end{bmatrix} \right) = aei+bfg+cdh-ceg-bdi-afh
행렬식의 기하학적 의미
기하학적으로 2x2 행렬의 행렬식은 평행사변형의 넓이, 3x3 행렬의 행렬식은 육면체의 부피와 관련을 가짐
행렬식의 성질
전치 행렬의 행렬식은 원래의 행렬의 행렬식과 같다.
det(AT)=det(A)\det(A^{T}) = \det(A)
단위 행렬의 행렬식은 1이다.
det(I)=1\det(I) = 1
두 행렬의 곱의 행렬식은 각 행렬의 행렬식의 곱과 같다.
det(AB)=det(A)det(B)\det(AB) = \det(A)\det(B)
역행렬의 행렬식은 원래의 행렬의 행렬식의 역수와 같다.
det(A1)=1det(A)\det(A^{-1}) = \dfrac{1}{\det(A)}
numpy에서는 linalg 서브패키지의 det 명령으로 계산
A = np.array([[1,2], [3,4]]) A
Python
복사
array([[1, 2], [3, 4]])
np.linalg.det(A)
Python
복사
-2.0000000000000004
참고 자료