본문으로 건너뛰기

절6.3정사영

목표
  1. 부분공간에 대한 벡터의 직교 분해를 이해합니다.
  2. 직교 분해와 정사영 사이의 관계를 이해합니다.
  3. 직교 분해와 부분공간 위의 가장 가까운 벡터 / 부분공간까지의 거리 사이의 관계를 이해합니다.
  4. 선형변환으로서, 그리고 행렬변환으로서 정사영이 갖는 기본 성질을 배웁니다.
  5. 방법: 직선 위로의 정사영, 연립방정식을 풀어 구하는 직교 분해, 복잡한 행렬 곱을 이용한 정사영.
  6. 그림: 직교 분해, 정사영.
  7. 용어: 직교 분해, 정사영.

W를 \R^n의 부분공간이라 하고 x를 \R^n의 벡터라 합시다. 이 절에서는 W에서 x에 가장 가까운 벡터 x_W를 계산하는 방법을 배웁니다. 벡터 x_W를 x의 W 위로의 정사영이라고 합니다. 이것이 바로 장 6의 도입부에서 논의한 대로, 행렬 방정식을 근사적으로 푸는 데 사용할 것입니다.

소절6.3.1직교 분해

먼저 몇 가지 표기법을 정합니다.

표기법

W를 \R^n의 부분공간이라 하고 x를 \R^n의 벡터라 합시다. W 위에서 x에 가장 가까운 벡터를 x_W로 나타냅니다.

x_W가 W 위에서 x에 가장 가까운 벡터라는 것은 차 x-x_W가 W의 벡터들과 직교한다는 뜻입니다.

\begin{tikzpicture}[myxyz, thin border nodes]
  \coordinate (u) at (0,1,0);
  \coordinate (v) at (1.1,0,-.2);
  \coordinate (uxv) at (.2,0,1.1);
  \coordinate (x) at ($-1.1*(u)+(v)+1.5*(uxv)$);
  \begin{scope}[x=(u),y=(v),transformxy]
    \fill[seq-violet!30] (-2,-2) rectangle (2,2);
    \draw[seq-violet, help lines] (-2,-2) grid (2,2);
    \node[seq-violet] at (2.6,1) {$W$};
  \end{scope}
  \point[seq-blue, "$x_W$" {below,text=seq-blue}] (y) at ($-1.1*(u)+1*(v)$);
  \coordinate (yu) at ($(y)+(u)$);
  \coordinate (yv) at ($(y)+(v)$);
  \pic[draw, right angle len=3mm] {right angle=(x)--(y)--(yu)};
  \pic[draw, right angle len=3mm] {right angle=(x)--(y)--(yv)};
  \point[seq-red, "$x$" {above,text=seq-red}] (xx) at (x);
  \draw[vector, thin] (y) -- node[auto] {$x-x_W$} (xx);
  \point at (0,0,0);
\end{tikzpicture}

다시 말해, x_{W^\perp} = x - x_W라 하면 x = x_W + x_{W^\perp}이며, 여기서 x_W는 W에 속하고 x_{W^\perp}는 W^\perp에 속합니다. 가장 먼저 할 일은 가장 가까운 벡터가 항상 존재함을 증명하는 것입니다.

증명
정의

W를 \R^n의 부분공간이라 하고 x를 \R^n의 벡터라 합시다. W에 속하는 x_W와 W^\perp에 속하는 x_{W^\perp}에 대한 표현

\begin{equation*}
x = x_W + x_{W^\perp}
\end{equation*}

을 W에 대한 x의 직교 분해라고 하며, 가장 가까운 벡터 x_W를 W 위로의 x의 정사영이라고 합니다.

x_W는 W 위에서 x에 가장 가까운 벡터이므로, x에서 부분공간 W까지의 거리는 x_W에서 x로 가는 벡터의 길이, 즉 x_{W^\perp}의 길이입니다. 다시 정리하면 다음과 같습니다.

가장 가까운 벡터와 거리

W를 \R^n의 부분공간이라 하고 x를 \R^n의 벡터라 합시다.

  • 정사영 x_W는 W에서 x에 가장 가까운 벡터입니다.
  • x에서 W까지의 거리는 \|x_{W^\perp}\|입니다.

이제 x_W와 x_{W^\perp}를 계산하는 문제로 넘어갑시다. 물론 x_{W^\perp} = x - x_W이므로, 실제로 필요한 것은 x_W를 계산하는 것뿐입니다. 다음 정리는 열공간 위로의 정사영을 계산하는 방법을 제공합니다. 일반적인 부분공간 위로의 정사영을 계산하려면, 보통 이 중요 in 절 2.6에서처럼 그 부분공간을 어떤 행렬의 열공간으로 다시 쓰는 것이 가장 좋습니다.

증명

x = x_W + x_{W^\perp}를 W에 대한 직교 분해라 합시다. 정의에 의해 x_W는 W=\Col(A)에 속하므로, Ac = x_W를 만족하는 벡터 c가 \R^n에 존재합니다. 그러한 벡터 c를 아무것이나 하나 택하십시오. x-x_W=x-Ac는 W^\perp에 속하며, 이 중요 in 절 6.2에 의해 W^\perp는 \Nul(A^T)와 같다는 것을 알고 있습니다. 따라서

\begin{equation*}
0=A^T(x-Ac) = A^Tx-A^TAc
\end{equation*}

이고, 그러므로

\begin{equation*}
A^TAc = A^Tx.
\end{equation*}

이는 정확히 A^TAc = A^Tx가 해를 가진다는 뜻입니다. c가 A^TAc=A^Tx의 임의의 해라면, 위의 논리를 거꾸로 따라가서 x_W = Ac라는 결론을 얻습니다.

예제(직선 위로의 정사영)

L = \Span\{u\}를 \R^n의 직선이라 하고, x를 \R^n의 벡터라 합시다. 정리에 의해 x_L을 구하려면 행렬 방정식 u^Tuc = u^Tx를 풀어야 하며, 여기서 u는 n\times 1 행렬로 간주합니다(이 행렬의 열공간은 정확히 L입니다!). 그런데 u^Tu = u\cdot u이고 u^Tx = u\cdot x이므로, c = (u\cdot x)/(u\cdot u)는 u^Tuc = u^Tx의 해이며, 따라서 x_L = uc = (u\cdot x)/(u\cdot u)\,u.

\begin{tikzpicture}[thin border nodes]
  \draw[seq-violet] (-3,-2) -- node[below right, very near start] {$L$} (3,2);
  \draw[vector] (0,0) --  node[below right] {$u$} (1.5,1);
  \point[seq-red] (x) at (-3,2);
  \point (o) at (0,0);
  \draw[vector,seq-red] (o) -- node[auto,swap] {$x$} (x);
  \point[seq-blue, "$x_L = \dfrac{u\cdot x}{u\cdot u}\,u$" {below right,seq-blue}]
    (p) at (${-2.5/(1.5*1.5+1)}*(1.5,1)$);
  \draw[vector, seq-green] (p) -- node[below left] {$x_{L^\perp}$} (x);
  \pic[draw] {right angle=(x)--(p)--(o)};
\end{tikzpicture}

다시 정리하면 다음과 같습니다.

계산 절차: 직선 위로의 정사영

L = \Span\{u\}가 직선이면, 임의의 벡터 x에 대해

\begin{equation*}
x_L = \frac{u\cdot x}{u\cdot u}\,u
\sptxt{and}
x_{L^\perp} = x - x_L
\end{equation*}

A가 열이 둘 이상인 행렬일 때, x를 W = \Col(A) 위로 정사영한 것을 계산한다는 것은 행렬 방정식 A^TAc = A^Tx를 푸는 것을 의미합니다. 다시 말해, 연립일차방정식을 풀어서 가장 가까운 벡터를 계산할 수 있습니다. 명확히 하기 위해, 정리를 계산 절차로 정리합니다:

계산 절차: 직교 분해 계산하기

W를 \R^m의 부분공간이라 합시다. 벡터 x의 W에 대한 직교 분해를 계산하는 방법은 다음과 같습니다:

  1. W를 행렬 A의 열공간으로 다시 씁니다. 다시 말해, W의 생성 집합을 찾고, 그 벡터들을 열로 갖는 행렬을 A라 합니다.
  2. 행렬 A^TA와 벡터 A^Tx를 계산합니다.
  3. 미지 벡터 c에 대한 행렬 방정식 A^TAc = A^Tx의 첨가행렬을 만들고 행 축약합니다.
  4. 이 방정식은 항상 해를 가지므로, 해 c를 하나 고릅니다. 그러면
    \begin{equation*}
x_W = Ac \qquad x_{W^\perp} = x - x_W.
\end{equation*}

위의 계산 절차에서 W의 기저로부터 시작하면, 정사각행렬 A^TA가 자동으로 가역임이 밝혀집니다! (A^TA는 항상 정사각행렬이고 방정식 A^TAc = A^Tx는 항상 해를 가지지만, 일반적으로 A^TA가 가역일 필요는 없습니다.)

증명

\Nul(A^TA)=\{0\}임을 보이겠습니다. 이는 가역행렬 정리 in 절 5.1에 의해 가역성을 함의합니다. A^TAc = 0이라고 가정하십시오. 그러면 A^TAc = A^T0이므로, 정리에 의해 0_W = Ac입니다. 그런데 0_W = 0이므로(영벡터의 직교 분해는 단순히 0 = 0 + 0)\text{,} Ac = 0이고, 따라서 c는 \Nul(A)에 속합니다. A의 열들이 일차독립이므로 c=0이고, 따라서 원하던 대로 \Nul(A^TA)=0입니다.

x를 \R^n의 벡터라 하고 c를 A^TAc = A^Tx의 해라 하십시오. 그러면 c = (A^TA)\inv A^Tx이므로 x_W =Ac = A(A^TA)\inv A^Tx입니다.

이 따름정리는 특히 \R^m의 부분공간 W와 W의 기저 v_1,v_2,\ldots,v_n이 주어진 경우에 적용됩니다. 따름정리를 적용하려면, A를 열이 v_1,v_2,\ldots,v_n인 m\times n 행렬로 잡습니다.

소절6.3.2정사영

이 절에서는 관점을 바꾸어 정사영 x_W를 x의 함수로 생각합니다. 이 함수는 여러 좋은 성질을 가진 선형변환임이 밝혀지며, 원래 행렬 변환으로 정의되지 않은 선형변환의 좋은 예입니다.

정사영의 표준행렬은 다른 모든 선형변환의 경우와 같은 방법으로, 즉 표준 좌표 벡터에서의 값을 계산하여 구합니다. 이 경우 이는 표준 좌표 벡터를 부분공간 위로 사영하는 것을 의미합니다.

앞의 예제에서는

\begin{equation*}
\left\{\vec{1 0 -1},\;\vec{1 1 0}\right\}
\end{equation*}

가 W의 기저를 이룬다는 사실을 이용하여, 따름정리에 의해

\begin{equation*}
T(x) = x_W = \bigl[A(A^TA)\inv A^T\bigr]x
\sptxt{for}
A = \mat{1 1; 0 1; -1 0}
\end{equation*}

를 얻을 수도 있었습니다. 이 경우에는 이미 T를 행렬 A(A^TA)\inv A^T를 갖는 행렬 변환으로 나타냈습니다. 이 예제를 참고하십시오.

W를 기저 v_1,v_2,\ldots,v_m을 갖는 \R^n의 부분공간이라 하고, A를 열이 v_1,v_2,\ldots,v_m인 행렬이라 합시다. 그러면 T(x) = x_W의 표준행렬은

\begin{equation*}
A(A^TA)\inv A^T.
\end{equation*}

입니다.

위의 정사영의 성질을 그에 대응하는 표준행렬의 성질로 옮길 수 있습니다.

사영행렬의 성질은 행렬만으로 증명하기가 매우 어렵다는 점을 강조합니다. 모든 명제를 선형변환에 관한 명제로 옮기면 훨씬 더 명료해집니다. 예를 들어, 이 예제에서 구한 사영행렬을 생각해 봅시다. 행렬을 보는 것만으로는 그 행렬을 제곱했을 때 같은 행렬이 다시 나온다는 사실이 전혀 분명하지 않습니다.