[Week/Day3] 선형대수 - 벡터와 직교분해

승준·2021년 4월 29일
0

선형대수 - 벡터와 직교분해

들어가며

좌표계로 표현한 벡터 성질

  • v=(v1,v2,,vn)v = (v_1, v_2, \dots, v_n)
  • v의 크기: V=v12+v22++vn2||V|| = \sqrt{v_1^2 + v_2^2 + \dots + v_n^2}
  • 1vV\frac{1}{\|\mathbf{v}\|} \mathbf{V}

좌표계로 표현한 벡터의 내적

u=(u1,u2,,un),v=(v1,v2,,vn)\mathbf{u}=\left(u_{1}, u_{2}, \cdots, u_{n}\right), \mathbf{v}=\left(v_{1}, v_{2}, \cdots, v_{n}\right) 의 좌표값을 통해 다음과 같이 계산 된다.

uv=u1v1+u2v2++unvn\mathbf{u} \cdot \mathbf{v}=u_{1} v_{1}+u_{2} v_{2}+\cdots+u_{n} v_{n}

직교

두 벡터간 u,v 간의 내적이 0이면 두벡터는 직교(orthogonal)이다.

uv=0uv\mathbf{u} \cdot \mathbf{v}=0 \quad \Longleftrightarrow \quad \mathbf{u} \perp \mathbf{v}

직교의 물리적 의미

uuvv가 직교일때, uu방향으로의 전진은 vv방향에서 전형 측정되지 않는다. 그 반대도 마찬가지 이다. 즉, 서로의 전진 방향을 고려하지 않는다 \rightarrow 서로 독립이다. (* 고교과정에서 배운 xyxy-좌표계나 xyzxyz-좌표계는 직교 좌표계임을 상기 하자.)


투영

두 벡터 uu,aa가 있을 때, 벡터 u를 a위에 투영한 벡터projauproj_au라 하고 다음과 같이 구한다.

projau=(u1aa)(1aa)=(uaa2)a( 길이 )( 방향 )( 기저 a 에 대한 좌표값) a\begin{aligned} \operatorname{proj}_{\mathbf{a}} \mathbf{u}=\left(\mathbf{u} \cdot \frac{1}{\|\mathbf{a}\|}\|\mathbf{a}\|\right) &\left(\frac{1}{\|\mathbf{a}\|}\|\mathbf{a}\|\right)=&\left(\frac{\mathbf{u} \cdot \mathbf{a}}{\|\mathbf{a}\|^{2}}\right) \mathbf{a} \\ (\text { 길이 }) &(\text { 방향 }) &(\text { 기저 } \mathbf{a} \text { 에 대한 좌표값) } \mathbf{a} \end{aligned}

벡터 uuaa위에 투영하고 남은 보완 벡터(complement vector)는 uprojauu - proj_au 이다.

즉, uprojau × projau=0u - proj_au \ \times \ proj_au = 0 이 성립한다. 즉 직교 한다.

a를 u로 표기하면 ucosθ||u|| cos\theta 로 표기 할 수 있다. 그리고 u와 a의 내적을 생각하면 다음과 같다. $u \cdot a = \lVert u \rVert \lVert a \rVert \ cos\theta $ 이다. 이 식을 활용하면 다음과 같이 나타낼 수 있다.

a=ucosθua=ua cosθa=ucosθ=uaaa=ucosθua=ua cosθa=ucosθ=uaaa = ||u|| cos\theta \\ u \cdot a = \lVert u \rVert \lVert a \rVert \ cos\theta\\ a = ||u|| cos\theta = \frac{u \cdot a}{\lVert a \rVert}a = ||u|| cos\theta \\ u \cdot a = \lVert u \rVert \lVert a \rVert \ cos\theta\\ a = ||u|| cos\theta = \frac{u \cdot a}{\lVert a \rVert}

결국, uaa\frac{u \cdot a}{\lVert a \rVert} 이 성분은 길이 성분이 된다. 방향의 경우 벡터 a에서 크기(길이)만 제거 해주면 방향만 남게 된다. 이렇게 구한 길이(크기)와 방향을 통해 projauproj_au를 구할 수 있게 된다.

(uaa2)a\left(\frac{\mathbf{u} \cdot \mathbf{a}}{\|\mathbf{a}\|^{2}}\right) \mathbf{a} 를 생각해 보면 다음과 같다. aa는 벡터가 되고 aa벡터에서 (uaa2)\left(\frac{\mathbf{u} \cdot \mathbf{a}}{\|\mathbf{a}\|^{2}}\right) 만큼 스칼라배 한 것이라고 생각 해 볼 수 있다. 즉, 기저 aa에 대한 좌표값이라고 생각 할 수 있다.

정리

두 벡터 u,a가 있을 때, 투영과 보완의 개념을 이용해 직교 분할 할 수 있다.

projau(uprojau)u=projau+(uprojau)\begin{array}{l} \operatorname{proj}_{\mathbf{a}} \mathbf{u} \perp\left(\mathbf{u}-\operatorname{proj}_{\mathbf{a}} \mathbf{u}\right) \\ \mathbf{u}=\operatorname{proj}_{\mathbf{a}} \mathbf{u}+\left(\mathbf{u}-\operatorname{proj}_{\mathbf{a}} \mathbf{u}\right) \end{array}


직교 행렬(Orthogonal Matrix)

직교 행렬(orthogonal matrix)

주어진 행렬의 모든 열벡터가 서로 직교한다면, 이 행렬을 직교 행렬이라고 한다. 직교 행렬은 직교 좌표계를 의미한다.

[1422][224217611]\left[\begin{array}{rl} 1 & 4 \\ -2 & 2 \end{array}\right]\left[\begin{array}{rrr} 2 & 2 & -4 \\ 2 & 1 & 7 \\ 6 & -1 & -1 \end{array}\right]

정규직교행렬(orthonormal matrix)

주어진 행렬이 직교행렬이고 모든 열벡터의 크기가 1(=normal) 이라면 이 행렬을 정규직교행렬이라고 한다. 정규직교행렬은 정규직교좌표계를 의미한다.

v1=[3/111/111/11]v2=[1/62/61/6]v3=[1/664/667/66]\mathbf{v}_{1}=\left[\begin{array}{c} 3 / \sqrt{11} \\ 1 / \sqrt{11} \\ 1 / \sqrt{11} \end{array}\right] \quad \mathbf{v}_{2}=\left[\begin{array}{c} -1 / \sqrt{6} \\ 2 / \sqrt{6} \\ 1 / \sqrt{6} \end{array}\right] \quad \mathbf{v}_{3}=\left[\begin{array}{c} -1 / \sqrt{66} \\ -4 / \sqrt{66} \\ 7 / \sqrt{66} \end{array}\right]

직교행렬을 이용한 선형시스템

선형 시스템 Ax=bAx=b에서 행렬 AA가 직교행렬이면, 해 xx역행렬 A1A^{-1}의 계산 없이 다음과 같이 구할 수 있다.

  • xxii-번째 요소는 투영(projection)으로 계산 할 수 있다. 즉, 벡터 bb를 행렬 A의 각 열벡터 aja_j에 투영한 연산 projaibproj_{a_i}b로 부터 x=baiai2x = \frac{\mathbf{b} \cdot \mathbf{a}_{i}}{\left\|\mathbf{a}_{i}\right\|^{2}} 임을 계산 할 수 있다.
  • xxii-번째 요소와 jj-번째 요소의 계산을 독립적이다. 즉, xx의 계산은 병렬 처리 가능하다.

예제

다음과 같이 예제가 주어 졌다.

[1422][x1x2]=[62]\left[\begin{array}{rr} 1 & 4 \\ -2 & 2 \end{array}\right]\left[\begin{array}{l} x_{1} \\ x_{2} \end{array}\right]=\left[\begin{array}{r} 6 \\ -2 \end{array}\right]

위 식을 그림으로 표현하면 다음과 같다. 위 식의 해는 [2, 1]을 쉽게 할 수 있다. 즉, 바꿔 발하면 [1,4] 벡터를 2 스칼라배 만클 이동하고, [4,2] 벡터를 1 스칼라배 이동한다는 것이다. 위 선형시스템의 해는 곧 행렬 A의 스칼라배를 안다는 것이다.

표준 좌표계에서 [6,-2]의 의미는 x-축을 수선의 발을 내렸던이 6이 있었고, y-축으로 수선의 발을 내렸더니 -2가 있었다 라는 의미이다. 이러한 방식으로, 문제에 제시된 행렬 A라는 좌표계는 90°로 이루어져 있으므로 [6,2]에서 [4,2]로 수선의 발을 내린 것과 [6,2]에서 [1,-2]로 수선의 발을 내린 것을 따로 계산이 가능 하다는 것이다. 다음 그림을 보면 쉽게 이해 될 것이다.

y^=projau=(uaa2)a\hat{y}=proj_au = \left(\frac{\mathbf{u} \cdot \mathbf{a}}{\|\mathbf{a}\|^{2}}\right) \mathbf{a} 를 생각해 보면 다음과 같다. aa는 벡터가 되고 aa벡터에서 (uaa2)\left(\frac{\mathbf{u} \cdot \mathbf{a}}{\|\mathbf{a}\|^{2}}\right) 만큼 스칼라배 한 것이라고 설명했다. 즉 [1,-2]를 (uaa2)\left(\frac{\mathbf{u} \cdot \mathbf{a}}{\|\mathbf{a}\|^{2}}\right) 스칼라배 만큼 이동 했다는 것이다.

3차원일 경우

정규직교행렬을 이용한 선형시스템

선형 시스템 Ax=bAx=b에서 행렬 AA가 직교행렬이면, 해 xx역행렬 A1A^{-1}의 계산 없이 다음과 같이 구할 수 있다.

  • xxii-번째 요소는 내적(product)으로 계산 할 수 있다. 즉, 벡터 bb를 행렬 A의 각 열벡터 aja_j에 투영한 연산 projaibproj_{a_i}b로 부터 xi=baix_i = b \cdot a_i 임을 계산 할 수 있다.
  • xxii-번째 요소와 jj-번째 요소의 계산을 독립적이다. 즉, xx의 계산은 병렬 처리 가능하다.

예제

이미 norm 만큼 벡터의 크기가 나눠 져 있기 때문에 사영을 구할 때 norm으로 나누지 않아도 된다.



QR 분해

주어진 행렬에서 정교직교 행렬을 추출하기위 한 분해 방법입니다. 직교성을 갖게되면 해을 쉽게 구할 수 있기 때문입니다.

QR 분해 정의

원래의 행렬 A는 일반적으로 어떤 성격을 갖는지 알기 어렵다. QR 분해를 이용하면 Q 행렬에 직교 성분만 추출 해 낼수 있다. 그 나머지 성분은 행렬 R에 들어가게 된다.

  • Q: 정규 직교 행렬(orthogonal matrix)
  • R: upper triangluar matrix(상삼각 행렬)

QR 분해 장점

QR 분해의 장점은 다음과 같습니다.

Ax=b(QR)x=bQ(Rx)=bQy=b,( 단 ,Rx=y)\begin{aligned} A \mathbf{x}=\mathbf{b} & \Rightarrow(Q R) \mathbf{x}=\mathbf{b} \Rightarrow Q(R \mathbf{x})=\mathbf{b} \\ & \Rightarrow Q \mathbf{y}=\mathbf{b},(\text { 단 }, R \mathbf{x}=\mathbf{y}) \end{aligned}

이렇게 구한 위의 식을 통해 선형시스템을 두 단계로 간단하게 해결 할 수 있습니다.

1. 내적(inner product) : y 구하기

직교 벡터만 남기 때문에 내적으로 쉽게 y를 구할 수 있다.

Back-substitution(후방대치법): x구하기

상삼각 행렬을 이용해 x를 구할 수 있다.


그람-슈미트

QR분해는 그람 슈미트 과정을 행렬로 코드화 한 것입니다.

  • Q: 정규 직교 행렬(orthogonal matrix)을 추출한 행렬
  • R: 행렬 A에서 정규직교성 추출 후 남은 residual, 상삼각행렬

QRQR 분해의 활용

QR 분해는 다음의 이유로 활용 됩니다.

빠른계산

선형시스템 Ax=bAx=b의 해를 구할 때, 정규직교행렬(orthogonal matrix) QQ를 이용한 계산 부분은 병렬처리로 빨리 계산 할 수 있습니다. 그러나 RR을 이용한 계산 부분은 병렬 처리 할 수 없습니다.

b가 자주 업데이트 되는 경우:

선형시스템 Ax=bAx=b에서 행렬 A는 고정되어있고 b가 자주 변하는 문제가 종종 있습니다. 이런경우, 행렬 AA를 미리 QRQR로 분해해 둔다면 bb가 업데이트 될때마다 선형시스템의 해를 실시간으로 구할 수 있습니다.


QR분해 vs. LU 분해

  • LULU분해의 경우: 선형시스템을 풀 때 병렬처리 할 수 없습니다.
  • QRQR 분해의 경우: QQ행렬이 꽉찬 구조를 가진 행렬이므로 메모리 사용량이 많습니다.
profile
내일을 기록하기 위해서 오늘을 기록합니다 🤗

0개의 댓글