부분공간의 차원
관련된 내용
예 1)
H가 4차원의 좌표(a, b, c, d)에서 다음 식들을 만족하는 모든 벡터들의 집합이라고 한다면 H가 4차원의 부분 공간인지를 확인합니다.
\begin{align} a - 2b + 5c - d& = 0\\-a - b + c& = 0\end{align} |
위 식은 식 1과 같이 행렬시스템으로 나타낼 수 있습니다.
$$\begin{bmatrix} 1&-2&5&1\\-1&-1&1&0\end{bmatrix}\begin{bmatrix} a\\b\\c\\d\end{bmatrix} = \begin{bmatrix} 0\\0\end{bmatrix}$$ | (식 1) |
A=np.array([[1,-2,5,-1],[-1, -1, 1, 0]]) c=np.zeros([2,1]) aug=np.hstack([A, c]) print(aug)
[[ 1. -2. 5. -1. 0.] [-1. -1. 1. 0. 0.]]
print(np.array(Matrix(aug).rref()[0], dtype=float).round(3))
[[ 1. 0. 1. -0.333 0. ] [ 0. 1. -2. 0.333 0. ]]
선형결합은 2개의 자유 변수 c, d를 포함하므로 자명하지 않은(non trivial) 해를 갖습니다. 즉, 선형 종속으로 선형 결합이 성립하므로 벡터 [[a], [b], [c], [d]]는 4차원의 부분 공간으로 간주할 수 있습니다. 그러나 변수 a, b는 c와 d에 의존적입니다. 이 경우 그 벡터의 차원을 차원을 4차원으로 고정할 수 있을까요?
표준 행렬 A의 각 열벡터 A1, A2, A3, A4라고 하면 위 rref의 결과로 A1, A2가 기저벡터로 나머지 벡터들인 A3, A4와 각각 선형결합이 성립될 것입니다(식 2).
\begin{align}\begin{bmatrix}1&-2\\-1&-1 \end{bmatrix} \begin{bmatrix}a\\b \end{bmatrix} &=\begin{bmatrix}5\\1 \end{bmatrix} \\ \begin{bmatrix}1&-2\\-1&-1 \end{bmatrix} \begin{bmatrix}a\\b \end{bmatrix} &=\begin{bmatrix}-1\\0\end{bmatrix}\end{align} | (식 2) |
식 2의 두 식에서 좌항의 행렬의 행렬식은 0이 아닙니다. 즉, 역행렬이 존재하므로 위 각식의 유일한 해를 가집니다.
A12=A[:,[0,1]] print(A12)
[[ 1 -2] [-1 -1]]
la.det(A12).round(3)
-3.0
A3=A[:, 2].reshape(-1,1) A4=A[:, 3].reshape(-1,1) sol1=la.solve(A12, A3) print(sol1)
[[ 1.] [-2.]]
sol2=la.solve(A12, A4) print(sol2.round(3))
[[-0.333] [ 0.333]]
식 2의 선형결합은 모두 선형독립입니다. 다시말하면 A1, A2 두 벡터를 기저로 하여 부분공간 A3과 A4을 생성할 수 있음을 나타냅니다. 이 부분공간을 H로 한다면 식 3과 같이 나타낼 수 있습니다.
\begin{align}H& = \text{Span}\{A_1,\; A_2\} \\& = \text{Span}\left\{ \begin{bmatrix}1\\-1 \end{bmatrix},\; \begin{bmatrix}-2\\-1 \end{bmatrix}\right\}\end{align} | (식 3) |
벡터 A1, A2는 부분공간 H의 기저 벡터입니다.
그림 1은 A1, A2를 기저로하여 생성되는 선형결합의 결과인 A3과 A4을 나타낸 것입니다. 이 그림에 의하면 두 기저들에 의해 생성되는 다양한 벡터공간내에 A3과 A4가 존재함을 알 수 있습니다.
그림 1과 같이 두 개의 기저로 생성되는 부분공간은 평면입니다. 그러므로 2차원입니다. 이것은 기저벡터의 수와 같습니다. 다음과 같이 정리할 수 있습니다.
[부분공간의 차원]
- 피벗열(pivot column)이 기저 벡터가 됩니다.
- 스판(Span)은 기저 벡터로 구성되며 기저 벡터의 수가 부분 공간의 차원이 됩니다.
예 2)
다음 벡터들에 의한 기저와 그 부분 공간의 차원을 계산합니다.
$$\begin{bmatrix}1\\-3\\2\\-4 \end{bmatrix}, \quad \begin{bmatrix}-3\\9\\-6\\12\end{bmatrix}, \quad \begin{bmatrix}2\\-1\\4\\2 \end{bmatrix}, \quad \begin{bmatrix} -4\\5\\-3\\7\end{bmatrix}$$
위 각 벡터들의 결합에 의한 행렬 A는 다음과 같습니다. 그 행렬의 기약행사다리꼴의 피벗열이 기저가 되며 그 기저의 수가 부분공간의 차원이 됩니다.
A=np.array([[1,-3, 2, -4],[-3, 9, -1, 5], [2, -6, 4, -3],[-4, 12, 2, 7]]) print(A)
[[ 1 -3 2 -4] [-3 9 -1 5] [ 2 -6 4 -3] [-4 12 2 7]]
Matrix(A).rref()
(Matrix([ [1, -3, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1], [0, 0, 0, 0]]), (0, 2, 3))
결과에 의하면 0, 2, 3열이 피벗열이며 식 4와 같이 선형결합이 가능합니다.
$$\begin{bmatrix}1&2&-4\\-3&-1&5\\2&4&-3\\-4&2&7\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}=\begin{bmatrix}-3\\9\\-6\\12\end{bmatrix}$$ | (식 4) |
위 결합의 결과인 우항은 ℝ4 벡터공간의 부분공간이 되며 좌항의 기저벡터들이 스판이 됩니다(식 5).
$$H=\left\{\begin{bmatrix}1\\-3\\2\\-4\end{bmatrix},\;\begin{bmatrix}2\\-1\\4\\2\end{bmatrix},\;\begin{bmatrix}-4\\5\\-3\\7\end{bmatrix}\right\}$$ | (식 5) |
그러므로 부분공간은 1차원인 벡터 3개로 구성된 공간이 되므로 3차원입니다.
예 3)
스칼라 a, b, c로 구성된 벡터와 집합 S = {t2 + 1, t − 1, 2t + 2}에 의한 다음의 선형결합에서 기저와 부분공간의 차원을 결정합니다.
$$\begin{bmatrix}t^2+1& t-1& 2t+2\end{bmatrix}\begin{bmatrix}a\\b\\c\end{bmatrix}=0$$
식의 좌항 즉, 두 벡터의 내적을 계산해 보면 식 6과 같습니다.
(t2 + 1)a + (t - 1)b + 2(t + 2)c = 0 | (식 6) |
위 식을 변수 t2과 t 그리고 상수항으로 정리할 수 있습니다(식 7).
at2 + (b + 2c)t + (a - b + 4c) = 0 | (식 7) |
위 식은 스칼라 a, b, c 사이의 연산에 의해 생성되는 각 계수가 0일때만 성립합니다(식 8).
a = 0, b + 2c = 0, a -b + 4c = 0 | (식 8) |
식 8은 식 9와 같이 행렬과 벡터로 구성된 선형시스템으로 나타낼 수 있습니다.
$$\begin{bmatrix}1&0&0\\0&1&2\\1&-1&4 \end{bmatrix}\begin{bmatrix}a\\b\\c \end{bmatrix}=\begin{bmatrix}0\\0\\0 \end{bmatrix}$$ | (식 9) |
식 9가 성립한다면 표준행렬의 rref로 확인할 수 있는 피벗열의 수로 부분공간의 차원을 결정할 수 있습니다.
위 과정을 코드화하기 위해 sympy 패키지의 symbols() 함수를 적용합니다.
a, b, c, t=symbols('a b c t') A=Matrix([t**2+1,t-1,2*t+2]).T A
[t2 + 1, t - 1, 2t + 2]
B=Matrix([[a],[b],[c]]) AB=A*B AB
[a(t2 + 1) + b(t - 1) + c(2t + 2)]
위 식을 t에 따라 정리한 식의 각 계수를 나타내기 위해 sympy 패키지의 expand(), collect() 함수와 coeff() 메소드를 적용합니다. 이 들은 각각 식을 전개하고 차수를 기준으로 식을 정리하며 각 차수에 대응하는 계수를 반환합니다.
AB2=collect(expand(AB[0]), t) AB2
[at2 + a - b + 2c + t(b + 2c)]
coef2=AB2.coeff(t, 2) coef1=AB2.coeff(t,1) coef0=AB2.coeff(t,0) print(f'2차 계수:{coef2}\n1차 계수:{coef1}\n0차 계수:{coef0}')
2차 계수:a 1차 계수:b + 2*c 0차 계수:a - b + 2*c
위 식의 선형 독립 여부를 결정하는 것으로 기저임을 판단할 수 있습니다. 다음 객체 coefMat는 정방행렬로 행렬식으로 역행렬의 존재를 확인할 수 있습니다. 즉, 행렬식 ≠ 0인 경우 역행렬이 존재하므로 numpy.linalg.solve()
함수로 식 9의 해를 결정할 수 있습니다.
coefMat=np.array([[1, 0,0],[0,1,2], [1, -1, 2]]) c=np.zeros((3,1)) la.det(coefMat)
4.0
sol=la.solve(coefMat, c) print(sol)
[[0.] [0.] [0.]]
식 9는 유일한 해를 가지므로 선형독립입니다. 즉, 이 선형결합의 표준행렬의 모든 열벡터가 기저가 됩니다. 이는 다음과 같이 확대행렬에 대한 rref으로 확인할 수 있습니다.
aug=np.c_[coefMat, c] Matrix(aug).rref()
(Matrix([ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0]]), (0, 1, 2))
위 결과들과 같이 위 선형결합의 기저는 표준행렬을 구성하는 3개의 열벡터가 됩니다. 즉, 이 결합으로 생성되는 부분공간은 3개의 기저위에 형성되므로 3차원입니다.
댓글
댓글 쓰기