내용
영공간(Nullspace)과 열공간(Column space)
영공간과 열공간
행렬 A에 대해 Ax=0을 만족하는 관계를 선형 결합이라고 하며 이 선형 결합에는 선형 종속과 선형독립으로 구분합니다. 선형독립인 경우 이 식의 해는 자명한 해로 유일한 해 집합을, 선형종속인 경우 1개 이상의 다양한 해집합을 가집니다. 이러한 해집합의 기저(basis)를 영공간(Nullspace)과 열공간(Column space)이라 합니다. 영공간은 선형종속 관계의 다양한 해들 중의 기저 벡터, 열공간은 선형독립이 성립되는 기저 벡터들을 의미합니다. 이 관계에서 의하면 영공간 역시 다양한 해집합들로부터 유도되는 열공간이라 할 수 있습니다.
영공간(Null Space)
m×n 형태의 2차원 행렬 A의 영공간(Nul A)은 동차 선형 시스템(Ax=0)의 모든 해집합의 기저입니다. 그러므로 영공간은 기본적으로 0벡터를 포함합니다.
영공간은 동차 시스템의 해 집합의 기저입니다.
벡터 u가 행렬 A의 영 공간에 포함 여부를 결정한다는 것은 Ax=0의 동차 선형 시스템에서 변수 벡터 x를 벡터 u로 치환할 경우 성립하는지를 결정하는 것입니다.
import numpy as np import numpy.linalg as la import sympy as spM
A=np.array([[1,-3,-2],[-5, 9, 1]]); AM
array([[ 1, -3, -2], [-5, 9, 1]])
u=np.array([5,3,-2]).reshape(-1,1); uM
array([[ 5], [ 3], [-2]])
np.dot(A, u)M
array([[0], [0]])
위 결과에 의하면 벡터 u는 다음 식을 만족하는 해가 됩니다.
예)
다음 표준 행렬 A의 영공간을 계산해봅니다.
위 행렬 방정식을 일반 선형시스템으로 나타내면 다음과 같습니다.
$\begin{aligned} &3x_1 + 6x_2 - x_3 + x_4 - 7x_5 = 0\\ &x_1 - 2x_2 + 2x_3 + 3x_4 + x_5 = 0\\ &2x_1 - 4x_2 + 5x_3 + 8x_4 - 4x_5 = 0 \end{aligned}$A=np.array([[-3, 6, -1, 1, -7],[1,-2,2,3,-1],[2, -4, 5, 8, -4]]) c=np.zeros([3,1]) sp.Matrix(np.hstack([A,c])).rref()[0]M$\small\color{navy}{\left[\begin{matrix}1 & -2.0 & 0 & -1.0 & 3.0 & 0\\0 & 0 & 1 & 2.0 & -2.0 & 0\\0 & 0 & 0 & 0 & 0 & 0\end{matrix}\right]}$
결과는 변수 x1 및 x3가 나머지 변수에 의존한다는 것을 나타냅니다. 따라서 영공간은 다음과 같습니다.
$$\text{Nul} A= \begin{bmatrix}x_1\\x_2\\x_3\\x_4\\x_5 \end{bmatrix}=\begin{bmatrix} 2x_2+x_4-3x_5\\x_2\\-2x_4+2x_5\\x_4\\x_5\end{bmatrix}=\begin{bmatrix} 2&1&-3\\1&0&0\\0&-2&2\\0&1&0\\0&0&1\end{bmatrix}\begin{bmatrix}x_2\\x_4\\x_5 \end{bmatrix}$$위 영공간(Null space)의 각 열벡터들은 모두 A에 대한 선형결합의 해입니다. 즉, 위의 선형결합의 해 집합은 x2, x4, x5의 값에 따라 다양합니다.
Ns=np.array([[2, 1, -3],[1, 0, 0], [0, -2,2],[0,1,0],[0,0,1]]) sp.Matrix(Ns)M$\small\color{navy}{\left[\begin{matrix}2 & 1 & -3\\1 & 0 & 0\\0 & -2 & 2\\0 & 1 & 0\\0 & 0 & 1\end{matrix}\right]}$
위 결과에 의하면 x1과 x3는 임의의 x2,, x4, x5에 의해 결정됩니다. 이 세 변수의 기저는 다음의 동차선형결합으로 계산됩니다. 기저는 다음 코드에서 나타낸 rref로 부터 피벗 열로 확인할 수 있습니다.
sp.Matrix(Ns).rref()[0]M$\small\color{navy}{\left[\begin{matrix}1 & 0 & 0\\0 & 1 & 0\\0 & 0 & 1\\0 & 0 & 0\\0 & 0 & 0\end{matrix}\right]}$
위 결과에 의하면 모든 열이 피벗 열이며 자유변수가 없습니다. 그러므로 모두 기저벡터들입니다. 영공간의 스판은 다음과 같이 나타낼 수 있습니다.
$$\displaystyle \text{Nul} A = \text{Span} \left\{\begin{bmatrix}2\\1\\0\\0\\0 \end{bmatrix}, \quad \begin{bmatrix}1\\0\\-2\\1\\0 \end{bmatrix}, \quad \begin{bmatrix} -3\\0\\2\\0\\0 \end{bmatrix}\right\}$$영공간은 sympy 라이브러리의 nullspace()
함수를 사용하여 확인할 수 있습니다. 이 함수의 결과는 각 열벡터를 반환합니다. 다음 코드에서는 이 결과를 행렬 형태로 나타내었습니다.
nul_A=sp.Matrix(A).nullspace() nul_AM
[Matrix([ [2], [1], [0], [0], [0]]), Matrix([ [ 1], [ 0], [-2], [ 1], [ 0]]), Matrix([ [-3], [ 0], [ 2], [ 0], [ 1]])]
선형 시스템의 영공간의 수는 다음과 같의 정의할 수 있습니다.
dim Nul = 동차방정식에서 자유변수의 수
열공간 (Column space)
m×n 형태의 행렬 A와의 선형결합에서 선형독립인 벡터들의 집합을 열공간(column space)라고 하며 Col A로 나타냅니다.
위 예에서 행렬 A의 기약행사다리꼴에서 0, 2열이 피봇열(pivot column)입니다. 즉, 두 열벡터가 기저 벡터가 되며 이 기저 벡터들과 나머지 벡터들과의 선형 결합이 성립됩니다.
sp.Matrix(A).rref()[0]M$\small\color{navy}{\left[\begin{matrix}1 & -2 & 0 & -1 & 3\\0 & 0 & 1 & 2 & -2\\0 & 0 & 0 & 0 & 0\end{matrix}\right]}$
행렬 A의 피봇열들이 기저벡터가 되기 위해서는 나머지 벡터들과 선형독립이어야 합니다. 확인해보면 다음과 같습니다.
#기저벡터 Ab=A[:,[0, 2]] #Ab=A의 1열 AbA1=np.hstack([Ab, A[:,1].reshape(-1,1)]);AbA1M
array([[-3, -1, 6], [ 1, 2, -2], [ 2, 5, -4]])
sp.Matrix(AbA1).rref()M
(Matrix([ [1, 0, -2], [0, 1, 0], [0, 0, 0]]), (0, 1))
AbA3=np.hstack([Ab, A[:,3].reshape(-1,1)]) sp.Matrix(AbA3).rref()M
(Matrix([ [1, 0, -1], [0, 1, 2], [0, 0, 0]]), (0, 1))
AbA4=np.hstack([Ab, A[:,4].reshape(-1,1)]) sp.Matrix(AbA4).rref()M
(Matrix([ [1, 0, 3], [0, 1, -2], [0, 0, 0]]), (0, 1))
위의 모든 선형결합은 선형독립입니다. 즉, A1, A3, A4 벡터들은 모두 A0, A2 벡터를 스판으로 합니다. 이것은 A1, A3, A4 벡터들 모두 A0, A2에 의해 생성되는 벡터공간의 부분공간이 됩니다. 결과적으로 행렬 A에서 기저 벡터는 A0, A2이며 이들이 열공간(columnspace)이 됩니다.
행렬의 열공간은 sympy의 columnspace()
함수에 의해 확인할 수 있습니다.
col_A=sp.Matrix(A).columnspace() col_AM
[Matrix([ [-3], [ 1], [ 2]]), Matrix([ [-1], [ 2], [ 5]])]$$\text{Col A}\;=\; Span\; \left\{\begin{bmatrix} -3\\1\\2\end{bmatrix}, \quad \begin{bmatrix} -1\\2\\5\end{bmatrix} \right\}$$
위 결과는 다음과 같이 정의할 수 있습니다.
- 선형 독립인 기저 벡터들의 집합
- 표준 행렬의 기약행사다리꼴에서 피벗 열에 대응하는 열벡터들
예)
벡터 집합 W의 열공간을 계산해 봅니다.
W는 행렬 A와 같이 나타낼 수 있습니다.
$$\displaystyle A\;=\;\begin{bmatrix}6&-1\\1&1\\-7&0 \end{bmatrix}$$행렬 A의 모든 열 벡터들이 열공간이라면 그 동차선형결합은 선형독립입니다. 즉, 모든 열 벡터들은 기저벡터가 됩니다.
$$\displaystyle \begin{bmatrix}6&-1\\1&1\\-7&0 \end{bmatrix} \begin{bmatrix}a\\b \end{bmatrix}=\begin{bmatrix}0\\0\\0 \end{bmatrix}$$A=np.array([[6,-1],[1,1],[-7,0]]) c=np.zeros([3,1]) sp.Matrix(np.hstack([A,c])).rref()[0]M$\small\color{navy}{\left[\begin{matrix}1 & 0 & 0\\0 & 1 & 0\\0 & 0 & 0\end{matrix}\right]}$
위와 같이 선형결합 이 선형독립이므로 행렬 A의 모든 열 벡터들은 기저가 되고 열공간 Col A가 됩니다. Col A는 다음과 같이 두 개의 기저 벡터들로 구성된 스판으로 나타낼 수 있습니다.
$$\displaystyle \text{Col} A\;=\;Span\left\{\begin{bmatrix}6\\1\\-7\end{bmatrix}, \quad \begin{bmatrix}-1\\1\\0\end{bmatrix} \right\}$$col_A=sp.Matrix(A).columnspace(); col_AM
[Matrix([ [ 6], [ 1], [-7]]), Matrix([ [-1], [ 1], [ 0]])]
행렬을 전치시키면 원래 행렬의 열벡터는 행벡터가 된다. 이러한 경우 전치시키기 전의 열공간은 전치시킨 후의 행공간이 됩니다. 행렬 A의 행공간은 Row A로 나타냅니다.
예)
다음 행렬 M의 열공간을 결정해 봅니다.
M=np.array([[-2,-5, 8, 0, -17], [1, 3, -5, 1, 5], [3, 11, -19, 7, 1], [1, 7, -13, 5, -3]]); MM
array([[ -2, -5, 8, 0, -17], [ 1, 3, -5, 1, 5], [ 3, 11, -19, 7, 1], [ 1, 7, -13, 5, -3]])
c=np.zeros([4, 1]) au=np.hstack([M, c]) sp.Matrix(au).rref()[0]M$\small\color{navy}{ \left[\begin{matrix}1 & 0 & 1.0 & 0 & 1.0 & 0\\0 & 1 & -2.0 & 0 & 3.0 & 0\\0 & 0 & 0 & 1 & -5.0 & 0\\0 & 0 & 0 & 0 & 0 & 0\end{matrix}\right]}$
위 결과에서 0, 1, 3열 벡터가 피벗 열이므로 이들에 대응하는 벡터들이 열공간이 됩니다.
col_M=sp.Matrix(M).columnspace(); col_MM
[Matrix([ [-2], [ 1], [ 3], [ 1]]), Matrix([ [-5], [ 3], [11], [ 7]]), Matrix([ [0], [1], [7], [5]])]
행렬 M에 대한 선형결합의 변수 x0, x1, x3는 x2 및 x4에 의존하며 다음과 같이 표현 될 수 있습니다.
$$\begin{bmatrix} x_1\\x_2\\x_3\\x_4\\x_5\end{bmatrix} = \begin{bmatrix} -x_3 - x_5\\ 2x_3-3x_5\\ x_3\\ 5x_4\\ x_5 \end{bmatrix} =x_3 \begin{bmatrix}-1\\2\\1\\0\\5 \end{bmatrix} +x_5 \begin{bmatrix}-1\\-3\\0\\5\\1 \end{bmatrix}$$위 식의 마지막 오른쪽 식의 두 벡터들이 영공간입니다.
nul_M=sp.Matrix(M).nullspace(); nul_MM
[Matrix([ [-1], [ 2], [ 1], [ 0], [ 0]]), Matrix([ [-1], [-3], [ 0], [ 5], [ 1]])]
예)
다음 행렬 A의 열공간에 p가 포함 여부를 결정해 봅니다.
A=np.array([[-3,-2, 0], [0, 2, -6],[6, 3, 3]]) p=np.array([[1], [14], [9]]) Ap=np.hstack([A, p]) ApM
array([[-3, -2, 0, 1], [ 0, 2, -6, 14], [ 6, 3, 3, 9]])
sp.Matrix(Ap).rref()[0]M$\small\color{navy}{\left[\begin{matrix}1 & 0 & 2 & 0\\0 & 1 & -3 & 0\\0 & 0 & 0 & 1\end{matrix}\right]}$
위 결과는 A의 기저벡터로 구성된 열공간은 0, 1열벡터임을 나타내고 있습니다. 그 열공간과 벡터 p와의 선형결합이 성립한다는 것은 그 열공간내에 벡터 p가 포함됨을 의미합니다. 그러므로 열공간과 p의 선형 독립 여부를 결정합니다.
au=np.hstack([A[:,:2], p]) sp.Matrix(au).rref()[0]M$\small\color{navy}{\left[\begin{matrix}1 & 0 & 0\\0 & 1 & 0\\0 & 0 & 1\end{matrix}\right]}$
위 결과는 A의 기저 벡터와 p와의 선형 결합 은 독립임을 나타냅니다. 그러므로 벡터 p는 A의 열공간에 포함됩니다.
예)
다음 행렬 A의 영공간과 열공간은 각각 $\mathbb{R}^p$와 $\mathbb{R}^q$의 부분 공간입니다. p와 q를 결정해 봅니다.
A=sp.Matrix([[3,2, 1, -5], [-9, -4, 1, 7], [9, 2, -5, 1]]) A.rref()[0]M$\small\color{navy}{\left[\begin{matrix}1 & 0 & -1 & 1\\0 & 1 & 2 & -4\\0 & 0 & 0 & 0\end{matrix}\right]}$
A.columnspace()M
[Matrix([ [ 3], [-9], [ 9]]), Matrix([ [ 2], [-4], [ 2]])]
A.nullspace()M
[Matrix([ [ 1], [-2], [ 1], [ 0]]), Matrix([ [-1], [ 4], [ 0], [ 1]])]
Col $A \subset \mathbb{R}^3$, Nul $A \subset \mathbb{R}^4$이므로 P=4, q=3
예)
x2 = x3인 ℝ4의 부분 공간의 기저를 결정합니다.
다음과 같이 표현할 수 있습니다.
$$\begin{bmatrix}x_1\\x_2\\x_3\\x_4 \end{bmatrix}=\begin{bmatrix}x_1\\x_2\\x_2\\x_4 \end{bmatrix} \quad \text{또는}\quad \begin{bmatrix}x_1\\x_3\\x_3\\x_4 \end{bmatrix}$$위 식 우항의 표준 행렬을 S라고 하면 다음과 같이 나타낼 수 있습니다.
$$\displaystyle S=\begin{bmatrix}1&0&0&0\\0&1&0&0\\0&1&0&0\\0&0&0&1\end{bmatrix} \quad \text{또는}\quad \begin{bmatrix}1&0&0&0\\0&0&1&0\\0&0&1&0\\0&0&0&1\end{bmatrix}$$각 행렬의 피벗열이 기저 벡터가 됩니다. 위 식의 우항의 첫번째와 두번째 행렬을 각각 S1, S2라고 하면 각각의 기약 행 사다리꼴로 부터 피벗열을 결정하면 다음과 같습니다.
S1=np.array([[1, 0, 0, 0], [0, 1,0, 0], [0,1,0,0],[0,0,0,1]]) Matrix(S1).rref()
(Matrix([ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 0, 0]]), (0, 1, 3))
S2=np.array([[1, 0, 0, 0], [0, 0, 1, 0], [0, 0, 1,0],[0,0,0,1]]) Matrix(S2).rref()
(Matrix([ [1, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1], [0, 0, 0, 0]]), (0, 2, 3))
위 결과로 S는 3개의 기저벡터를 가지므로 이들이 S의 span이 됩니다.
$$\displaystyle S\;=\; \text{Span} \left\{ \begin{bmatrix}1\\0\\0\\0 \end{bmatrix}, \quad \begin{bmatrix}0\\1\\1\\0\end{bmatrix}, \quad \begin{bmatrix}0\\0\\0\\1 \end{bmatrix}\right\} $$이 결과는 예제의 계수행렬의 영공간(nullspace)이 됩니다.
A=np.array([[0, 1, -1, 0]]) for i in Matrix(A).nullspace(): print(i)
Matrix([[2], [1], [0], [0], [0]]) Matrix([[1], [0], [-2], [1], [0]]) Matrix([[-3], [0], [2], [0], [1]])
예)
3×5 형태의 행렬 A는 3개의 피벗열을 가집니다. 이 경우 열공간의 차원과 영공간을 차원을 결정합니다.
행렬 A의 피벗열은 그 행렬의 기저 벡터가 되고 열공간이 됩니다. 그러므로 $\mathbb{R}^3$이 됩니다. 영공간은 행렬 A의 모든 해집합의 기저입니다. 이 행렬의 해집합의 차원은 $\mathbb{R}^5$이므로 영공간의 차원 역시 $\mathbb{R}^5$가 됩니다.
댓글
댓글 쓰기