이 성립한다. 그리고 이 값은 제곱의 합으로 이루어졌으므로 x가 영벡터인 경우(x1=x2=x3=0)를 제외하고는 항상 0보다 크다.
x12+(x1−x2)2+(x2−x3)2+x32>0(2.3.6)
연습 문제 2.3.1
다음 행렬이 양의 정부호인지 양의 준정부호인지 혹은 어떤 것에도 해당되지 않는지 판단하라.
[1111](2.3.7)
✒️
[ab][1111][ab]=a(a+b)+b(a+b)
=a2+2ab+b2=(a+b)2>0
∴ 양의 정부호
행렬의 부호와 마찬가지로 행렬 크기를 정의하는 것도 어려운 일이다. 하나의 행렬에 대해 실수 하나를 대응시키는 개념의 놈(norm), 대각합(trace), 행렬식(determinant) 이란 연산은 크기와 유사한 개념이다.
행렬 놈
행렬의 놈(norm) 은 행렬 A에 대해 다음 식으로 정의되는 숫자다. 보통 ∥A∥p로 표기한다. 이 식에서 aij는 행렬 A의 i번째 행, j번째 열의 원소다. 행렬의 놈에도 여러 정의가 있는데 여기에서는 요소별 행렬 놈(entrywise matrix norm)의 정의 를 따른다.
∥A∥p=(i=1∑Nj=1∑M∣aij∣p)1/p(2.3.8)
p는 보통 1, 2 또는 무한대(∞)가 사용되는데 이 중 p=2인 경우가 가장 많이 쓰이므로 p값 표시가 없는 경우는 p=2인 놈이라고 생각하면 된다.
p=2인 놈은 프로베니우스 놈(Frobenius norm) 이라고 불리며 ∥A∥F이라고 표기하기도 한다.
∥A∥=∥A∥2=∥A∥F=i=1∑Nj=1∑Maij2(2.3.9)
놈의 정의에서 놈은 항상 0보다 같거나 크다는 것을 알 수 있다.
놈은 모든 크기의 행렬에 대해서 정의할 수 있으므로 벡터에 대해서도 정의할 수 있다.
벡터의 놈에서 중요한 성질은 벡터의 놈의 제곱이 벡터의 제곱합과 같다는 것이다.
∥x∥2=i=1∑Nxi2=xTx(2.3.10)
놈은 0 또는 양수이므로 놈의 제곱이 가장 작을 때 놈도 가장 작아진다. 따라서 놈을 최소화하는 것은 벡터의 제곱합을 최소화하는 것과 같다.
넘파이에서는 linalg 서브패키지의 norm() 명령으로 행렬의 놈을 계산할 수 있다.
import numpy as np
A =(np.arange(9)-4).reshape((3,3))
A
array([[-4, -3, -2],
[-1, 0, 1],
[ 2, 3, 4]])
np.linalg.norm(A)
7.745966692414834
연습 문제 2.3.2
행렬 A, (A∈RN×M)의 놈의 제곱 ∥A∥2이 그 행렬을 이루는 행 벡터 ri의 놈의 제곱의 합 또는 열 벡터 ci의 놈의 제곱의 합과 같음을 증명하라.
∥A∥2=i=1∑N∥ri∥2=j=1∑M∥cj∥2(2.3.11)
✒️
∥A2∥=i=1∑Nj=1∑Maij2=i=1∑N∥ri∥2
=j=1∑Mi=1∑Naij2=j=1∑M∥cj∥2
사실 위에서 쓴 놈의 공식은 공식적인 정의가 아니다. 정확한 놈의 정의는 다음 4가지 성질이 성립하는 행렬 연산을 말한다. 이러한 연산이 여러 개 존재하기 때문에 놈의 정의도 다양하다.
놈의 값은 0이상이다. 영행렬일 때만 놈의 값이 0이 된다.
∥A∥≥0(2.3.12)
행렬에 스칼라를 곱하면 놈의 값도 그 스칼라의 절대값을 곱한 것과 같다.
∥αA∥=∣α∣∥A∥(2.3.13)
행렬의 합의 놈은 각 행렬의 놈의 합보다 작거나 같다.
∥A+B∥≤∥A∥+∥B∥(2.3.14)
정방행렬의 곱의 놈은 각 정방행렬의 놈의 곱보다 작거나 같다.
∥AB∥≤∥A∥∥B∥(2.3.15)
대각합
대각합(trace) 은 정방행렬에 대해서만 정의되며 다음처럼 대각원소의 합으로 계산된다.
tr(A)=a11+a22+⋯+aNN=i=1∑Naii(2.3.16)
예를 들어 N차원 항등행렬(identity matrix)의 대각합은 N이다.
tr(IN)=N(2.3.17)
대각합을 구할 때는 절댓값을 취하거나 제곱을 하지 않기 때문에 대각합의 값은 놈과 달리 음수가 될 수도 있다.
대각합은 다음과 같은 성질이 있다. 아래의 식에서 c는 스칼라이고 A,B,C는 행렬이다.
스칼라를 곱하면 대각합은 스칼라와 원래의 대각합의 곱이다.
tr(cA)=ctr(A)(2.3.18)
전치연산을 해도 대각합이 달라지지 않는다.
tr(AT)=tr(A)(2.3.19)
두 행렬의 합의 대각합은 두 행렬의 대각합의 합이다.
tr(A+B)=tr(A)+tr(B)(2.3.20)
두 행렬의 곱의 대각합은 행렬의 순서를 바꾸어도 달라지지 않는다.
tr(AB)=tr(BA)(2.3.21)
세 행렬의 곱의 대각합은 다음과 같이 순서를 순환시켜도 달라지지 않는다.
tr(ABC)=tr(BCA)=tr(CAB)(2.3.22)
마지막 식은 곱셈에서 순서가 바뀌어도 대각합이 같다는 것을 이용하여 증명할 수 있다.
tr((AB)C)=tr(C(AB))=tr((CA)B)=tr(B(CA))(2.3.23)
특히 마지막 식은 트레이스 트릭(trace trick) 이라고 하여 이차 형식(quadratic form)의 미분을 구하는 데 유용하게 사용된다. 이 두 식에서는 A,B,C가 각각 정방행렬일 필요는 없다. 최종적으로 대각합을 구하는 행렬만 정방행렬이기만 하면 된다.
이차 형식의 트레이스 트릭 공식은 다음과 같다.
xTAx=tr(xTAx)=tr(AxxT)=tr(xxTA)(2.3.24)
이 식은 원래의 트레이스 트릭 식의 A, B, C 에 각각 xT, A, x를 대입한 것이다. 이차 형식은 스칼라값이기 때문에 대각합을 취해도 원래의 값과 같다.
넘파이에서는 trace() 명령으로 대각합을 계산할 수 있다.
np.trace(np.eye(3))
3.0
연습 문제 2.3.3
x, A가 각각 크기가 2 인 벡터, 크기가 2x2 인 정방행렬일 때 이차 형식의 트레이스 트릭이 성립함을 보인다.
✒️ xTAx=tr(xTAx)=tr(AxxT)=tr(xxTA)
xTAx=[ab][cedf][ab]=[ac+bead+bf][ab]
=a2c+abe+abd+b2f
xxTA=[ab][ab][cedf]=[a2ababb2][cedf]
tr(xxTA)=a2c+abe+abd+b2f
연습 문제 2.3.4
N×M 행렬 X에 대해 다음 식을 증명하라.
tr(X(XTX)−1XT)=M(2.3.25)
✒️ tr(ABC)=tr(BCA) 와 역핵렬의 정의에 의해
tr((XTX)−1XTX)=tr(IM)=M(2.3.25)
위 식에서 (XTX)−1은 XTX의 역행렬(inverse matrix)로 XTX와 곱하면 항등행렬이 되는 행렬이다. 역행렬에 대해서는 나중에 자세히 공부한다.
(XTX)−1XTX=XTX(XTX)−1=I(2.3.26)
연습 문제 2.3.5
행렬 A(A∈R2×2)의 놈의 제곱 ∥A∥2이 다음과 같음을 증명하라.
∥A∥2=tr(ATA)(2.3.27)
✒️ A=[cedf] 라 하면 ∥A∥2=c2+d2+e2+f2
ATA=[cdef][cedf] 이므로
tr(ATA)=c2+d2+e2+f2
행렬식
정방행렬 A의 행렬식(determinant) 은 det(A), detA, 또는 ∣A∣라는 기호로 표기한다.
행렬식은 다음처럼 재귀적인 방법으로 정의된다.
우선 행렬 A가 1×1 즉 스칼라인 경우에는 행렬식이 자기 자신의 값이 된다.
det([a])=a(2.3.28)
행렬 A가 스칼라가 아니면 여인수 전개(cofactor expansion) 라고 불리는 다음 식을 이용하여 계산한다. 이 식에서 ai,j는 A의 i행, j열 원소이고 i0(또는 j0)는 계산하는 사람이 임의로 선택한 행번호(또는 열번호)이다.
det(A)=i=1∑N{(−1)i+j0Mi,j0}ai,j0(2.3.29)
또는
det(A)=j=1∑N{(−1)i0+jMi0,j}ai0,j(2.3.30)
위에서 '또는'이라고 한 이유는 두 식 중 아무거나 써도 같은 결과가 나오기 때문이다.
즉, 행렬에서 임의의 행 i0 하나를 선택하거나 임의의 열 j0 하나를 선택한 다음 이 값에 가중치 (−1)i+j0Mi,j0 또는 (−1)i0+jMi0,j를 곱하여 더한 것이다.
가중치로 사용된 Mi,j는 마이너(minor, 소행렬식) 라고 하며 정방행렬 A 에서 i행과 j열을 지워서 얻어진 (원래의 행렬보다 크기가 1만큼 작은) 행렬의 행렬식이다.
마이너값도 행렬식이므로 마찬가지로 위의 정의를 이용하여 계산한다. 이처럼 점점 크기가 작은 행렬의 행렬식을 구하다 보면 스칼라인 행렬이 나오게 되는데 행렬식의 값이 자기 자신이 된다. 따라서 행렬식을 구하는 방법은 재귀적(recursive) 이다.
마이너에 (−1)i+j를 곱한 값 (−1)i+jMi,j을 여인수(cofactor) 라고 하며 Ci,j로 표기한다.
=2a2+2b2+2c2−2ab−2bc =(a−b+c)2+a2+b2+c2−2ca =(a−b+c)2+(a−c)2+b2>0 이므로
양의 정부호
대각합) 6
행렬식) 6 - 2 = 4
(2)
[1324](2.3.54)
✒️
행렬의 부호) a(a+3b)+b(2a+4b)=a2+5ab+4b2
a=-2, b=1 일 때 이차형식의 계산값이 -2이므로 두가지 중 어느것도 아니다.
대각합) 5
행렬식) -2
✒️
파이썬으로 대각합, 행렬식 검증
import numpy as np
a = np.array([[2,-1,0],[-1,2,-1],[0,-1,2]])
b = np.array([[1,2],[3,4]])print(np.linalg.det(a), np.trace(a))print(np.linalg.det(b), np.trace(b))