$n \times n$정방행렬 A에 대해 다음의 방정식이 만족되는 경우를 생각할 수 있습니다.
$A \cdot v = \lambda \cdot v$ (1)
v : $n \times 1$인 벡터
$\lambda$ : 스칼라
위 방정식의 어떤 해(solution)인 $\lambda$를 고유값(eigenvalue)라고 하며 특성값(characteristic value)이라고도 합니다. 이 고유값에 해당하는 벡터 v를 고유벡터(eigenvector)라고 합니다. 위 방정식은 다음과 같이 나타낼 수 있지요.
$A \cdot v - \lambda \cdot v=0$ (2)
$A \cdot v - \lambda \cdot I \cdot v=0$ (3)
$(A - \lambda \cdot I )\cdot v=0$ (4)
v가 0이 아닌 벡터라면 위 식에서 다음이 만족되어야만 합니다.
$|A-\lambda \cdot I|=0$ (5)
이 식을 A의 특성방정식(character equation)이라고 하며 n개의 근을 가지는 n차 다항식이 됩니다. 이 근들은 A의 고유값이 됩니다.
다음의 2x2의 행렬을 예로 고유값과 고유벡터를 계산해 봅니다.
a=np.matrix('0,1;-2, -3')
a
Out[128]:
matrix([[ 0, 1],
[-2, -3]])
위 행렬의 특성 방정식은 다음과 같습니다.
$|A- \lambda \cdot I|=
\left | \left [\begin{array}{rr} 0&1\\-2&-3 \end{array}\right]
-\left[\begin{array}{rr}\lambda & 0 \\ 0 & \lambda \end{array} \right] \right |=0$
위 식은 다음과 같이 정리 할 수 있습니다.
$\left | \left[\begin{array}{rr} -\lambda &1 \\ -2 & -3-\lambda \end{array}\right] \right | =\lambda^2 +3 \lambda +2 =0$
그러므로 고유값은 다음과 같습니다.
$\lambda_1 = -1, \quad \lambda_2=-2$
이 고유값들을 식(4)에 대입하여 풀면
$\lambda_1 = -1$
$\left [\begin{array}{rr} 1 & 1 \\ -2 & -2 \end{array} \right] \left [\begin{array}{rr} v_{11} \\ v_{21} \end{array} \right]=0$
$v_{11} =- v_{21}$
위 결과로 부터 벡터 v1은 서로 각 원소가 크기는 같지만 반대 방향인 벡터로 간주할 수 있습니다. 즉, 다음과 같이 간주할 수 있지요.
$v_1 = k \left[\\begin{array}{rr} a \\ -a \end{array} \right]$
위 결과에서 k, a는 임의의 상수입니다. 즉, (0,0)을 기점으로 반대 방향으로 동일한 크기의 벡터라고 할 수 있지요. 위에서 알 수 있듯이 k, a에 따라 고유 벡터는 매우 다양합니다. 단지 중요한 것은 각 원소들의 비율입니다.
같은 방식으로 $\lambda_2$에 대해 풀어보면 다음과 같습니다.
$v_2 = k \left[\\begin{array}{rr} a \\ -2a \end{array} \right]$
이 과정은 np.linalg.eig()에 의해 진행됩니다.
value, vector=np.linalg.eig(a)
value
Out[138]: array([-1., -2.])
vector
Out[139]:
matrix([[ 0.70710678, -0.4472136 ],
[-0.70710678, 0.89442719]])
위의 계산 진행에서 나타내듯이 고유벡터는 매우 다양할 수 있다. 위의 두번째 고유벡터에대해 그래프를 작성해 보면 k 값에 따라 단지 크기만 달라질 뿐 동일한 방향을 보인다.
다음 그래프는 행렬 A와 계산한 고유벡터에 대한 k 값을 달리하여 함께 작성한 것입니다.
plt.plot([vector[0,0], vector[0,1]], [vector[1,0], vector[1,1]], color="blue")
plt.plot([a[0,0], a[0, 1]], [a[1,0], a[1,1]], color="red")
plt.axvline(x=0, linestyle="--")
plt.axhline(y=0, linestyle="--")
plt.subplot(1,2,2)
plt.plot([2*vector[0,0], 2*vector[0,1]], [2*vector[1,0], 2*vector[1,1]], color="blue")
plt.plot([2*a[0,0], 2*a[0, 1]], [2*a[1,0], 2*a[1,1]], color="red")
plt.axvline(x=0, linestyle="--")
plt.axhline(y=0, linestyle="--")
그림 4의 결과는 같은 배수를 할 경우 행렬과 그 고유벡터는 같은 방향으로 움직인다는 것을 보여줍니다. 즉, 행렬을 특정한 각도로 투영시킨다면 고유벡터에 겹쳐질 수 있습니다. 이러한 점은 매우 큰 스케일의 행렬을 축소시키는 경우 변함없는 지점을 확보할 수 있다는 것이지요.
위의 np.linalg.eig()함수에 의해 제시된 고유벡터의 각 원소의 제곱합이 1이 되는 값들을 나타냅니다. 즉, 다음과 같은 지점을 설정한 것입니다.
np.sum(vector[0,0]**2+vector[1,0]**2)
Out[174]: 0.99999999999999978
np.sum(vector[0,1]**2+vector[1,1]**2)
Out[175]: 0.99999999999999989
결과적으로 행렬 A는 고유벡터 두개로 분해 될 수 있는 것입니다.
$A \cdot v = \lambda \cdot v$ (1)
v : $n \times 1$인 벡터
$\lambda$ : 스칼라
위 방정식의 어떤 해(solution)인 $\lambda$를 고유값(eigenvalue)라고 하며 특성값(characteristic value)이라고도 합니다. 이 고유값에 해당하는 벡터 v를 고유벡터(eigenvector)라고 합니다. 위 방정식은 다음과 같이 나타낼 수 있지요.
$A \cdot v - \lambda \cdot v=0$ (2)
$A \cdot v - \lambda \cdot I \cdot v=0$ (3)
$(A - \lambda \cdot I )\cdot v=0$ (4)
v가 0이 아닌 벡터라면 위 식에서 다음이 만족되어야만 합니다.
$|A-\lambda \cdot I|=0$ (5)
이 식을 A의 특성방정식(character equation)이라고 하며 n개의 근을 가지는 n차 다항식이 됩니다. 이 근들은 A의 고유값이 됩니다.
다음의 2x2의 행렬을 예로 고유값과 고유벡터를 계산해 봅니다.
a=np.matrix('0,1;-2, -3')
a
Out[128]:
matrix([[ 0, 1],
[-2, -3]])
위 행렬의 특성 방정식은 다음과 같습니다.
$|A- \lambda \cdot I|=
\left | \left [\begin{array}{rr} 0&1\\-2&-3 \end{array}\right]
-\left[\begin{array}{rr}\lambda & 0 \\ 0 & \lambda \end{array} \right] \right |=0$
위 식은 다음과 같이 정리 할 수 있습니다.
$\left | \left[\begin{array}{rr} -\lambda &1 \\ -2 & -3-\lambda \end{array}\right] \right | =\lambda^2 +3 \lambda +2 =0$
그러므로 고유값은 다음과 같습니다.
$\lambda_1 = -1, \quad \lambda_2=-2$
이 고유값들을 식(4)에 대입하여 풀면
$\lambda_1 = -1$
$\left [\begin{array}{rr} 1 & 1 \\ -2 & -2 \end{array} \right] \left [\begin{array}{rr} v_{11} \\ v_{21} \end{array} \right]=0$
$v_{11} =- v_{21}$
위 결과로 부터 벡터 v1은 서로 각 원소가 크기는 같지만 반대 방향인 벡터로 간주할 수 있습니다. 즉, 다음과 같이 간주할 수 있지요.
$v_1 = k \left[\\begin{array}{rr} a \\ -a \end{array} \right]$
위 결과에서 k, a는 임의의 상수입니다. 즉, (0,0)을 기점으로 반대 방향으로 동일한 크기의 벡터라고 할 수 있지요. 위에서 알 수 있듯이 k, a에 따라 고유 벡터는 매우 다양합니다. 단지 중요한 것은 각 원소들의 비율입니다.
같은 방식으로 $\lambda_2$에 대해 풀어보면 다음과 같습니다.
$v_2 = k \left[\\begin{array}{rr} a \\ -2a \end{array} \right]$
이 과정은 np.linalg.eig()에 의해 진행됩니다.
value, vector=np.linalg.eig(a)
value
Out[138]: array([-1., -2.])
vector
Out[139]:
matrix([[ 0.70710678, -0.4472136 ],
[-0.70710678, 0.89442719]])
위의 계산 진행에서 나타내듯이 고유벡터는 매우 다양할 수 있다. 위의 두번째 고유벡터에대해 그래프를 작성해 보면 k 값에 따라 단지 크기만 달라질 뿐 동일한 방향을 보인다.
다음 그래프는 행렬 A와 계산한 고유벡터에 대한 k 값을 달리하여 함께 작성한 것입니다.
그림 4. 행렬 A와 고유벡터들의 관계
plt.subplot(1,2,1)plt.plot([vector[0,0], vector[0,1]], [vector[1,0], vector[1,1]], color="blue")
plt.plot([a[0,0], a[0, 1]], [a[1,0], a[1,1]], color="red")
plt.axvline(x=0, linestyle="--")
plt.axhline(y=0, linestyle="--")
plt.subplot(1,2,2)
plt.plot([2*vector[0,0], 2*vector[0,1]], [2*vector[1,0], 2*vector[1,1]], color="blue")
plt.plot([2*a[0,0], 2*a[0, 1]], [2*a[1,0], 2*a[1,1]], color="red")
plt.axvline(x=0, linestyle="--")
plt.axhline(y=0, linestyle="--")
그림 4의 결과는 같은 배수를 할 경우 행렬과 그 고유벡터는 같은 방향으로 움직인다는 것을 보여줍니다. 즉, 행렬을 특정한 각도로 투영시킨다면 고유벡터에 겹쳐질 수 있습니다. 이러한 점은 매우 큰 스케일의 행렬을 축소시키는 경우 변함없는 지점을 확보할 수 있다는 것이지요.
위의 np.linalg.eig()함수에 의해 제시된 고유벡터의 각 원소의 제곱합이 1이 되는 값들을 나타냅니다. 즉, 다음과 같은 지점을 설정한 것입니다.
np.sum(vector[0,0]**2+vector[1,0]**2)
Out[174]: 0.99999999999999978
np.sum(vector[0,1]**2+vector[1,1]**2)
Out[175]: 0.99999999999999989
결과적으로 행렬 A는 고유벡터 두개로 분해 될 수 있는 것입니다.
댓글
댓글 쓰기