기본 콘텐츠로 건너뛰기

벡터와 행렬에 관련된 그림들

[Linear Algebra] 벡터 공간과 부분공간 (vector space & subspace)

벡터 공간(vector space)과 부분공간

벡터들의 식 1과 같은 집합 V의 벡터들 사이의 선형결합이 성립한다는 것은 선으로 표시되는 벡터들에 의해 n차원 등의 공간이 형성된다는 것을 의미합니다. 또한 선형결합의 성립은 그 결과 역시 피연산자인 벡터들에 의해 성립되는 공간에 포함되므로 집합 V에 포함됩니다. 이 집합 V를 벡터 공간(Vector space)라고 하며 그 공간내에 포함된 벡터들 사이에 다음의 연산이 성립됩니다.

V = {v1, v2, …,vn}(식 1)
표 1 벡터 공간에서의 연산 법칙
u, v ∈ Vector → u+v ∈ Vector
α ∈ scalar, u ∈ Vector → αu ∈ Vector
u + v = v + u (교환법칙)
u + (v + w) = ( u + v) + w (결합법칙)
모든 요소가 0인 0벡터(zero vector)가 존재
u + (-u) = 0
α, β ∈ scalar, u ∈ Vector → α(βu) = (αβ)
α ∈ scalar and u ∈ Vector → α(u + v) = αu + αv (분배법칙)
α, β ∈ scalar and u ∈ Vector → (α + β)u = α u + β u (분배법칙)
u ∈ V → 1·u = u

식 2는 두 벡터 u와 v의 선형결합을 나타낸 것입니다. 이 관계가 성립한다는 것은 두 벡터를 기본으로 하는 공간의 확대와 축소내에 선형결합의 결과가 존재함을 의미합니다. 벡터 u, v 그리고 그들의 선형결합 결과인 벡터들이 존재하는 벡터공간을 부분공간(subspace)이라 합니다. 이 관계에서 0에 의한 스칼라배는 0벡터를 생성하므로 모든 벡터공간의 부분공간이 됩니다.

\begin{align}u&=\begin{bmatrix} a_1\\a_2\\ \vdots \\a_n\end{bmatrix} \in W, \quad v=\begin{bmatrix} b_1\\b_2\\ \vdots \\b_n\end{bmatrix} \in W \\ \Rightarrow & \begin{cases}c_1\begin{bmatrix} a_1\\a_2\\ \vdots \\a_n\end{bmatrix} \in W, \quad c_2\begin{bmatrix} b_1\\b_2\\ \vdots \\b_n\end{bmatrix} \in W & \text{scalar product}\\ c_1\begin{bmatrix} a_1\\a_2\\ \vdots \\a_n\end{bmatrix}+ c_2\begin{bmatrix} b_1\\b_2\\ \vdots \\b_n\end{bmatrix} \in W & \text{sum}\end{cases}\\ & c_1, c_2:\; \text{scalar}\end{align}(식 2)

식 2의 선형결합이 성립한다면 벡터 u와 v의 차원과 결과의 차원은 모두 ℝn이 됩니다. 그러므로 이 선형결합은 Rn 차원의 벡터들 사이에서 이루어지는 것으로 그 차원의 모든 벡터들이 존재하는 부분이 벡터공간이 되며 선형결합의 각 구성요소들과 결과들이 포함된 W는 부분공간이 됩니다.

부분공간은 다음과 같이 정리할 수 있습니다.

부분공간

u, v ∈ ℝn의 두 벡터에 대해 부분공간은 다음이 성립합니다.

  1. 모든 벡터 공간(V)내의 0벡터는 부분 공간(W)이 됩니다.
  2. u, v ∈ W → u + v ∈ W
  3. v ∈ W → cv ∈ W

u와 v는 벡터(Vector)이고 c는 스칼라(Scalar)를 나타냅니다.

위 연산 1과 2가 성립하는 선형결합의 결과벡터는 벡터 공간인 ℝn의 부분공간이 됩니다. 결과적으로 실수 ℝn의 부분 공간은 다음 중 하나를 의미합니다.

  • 동차 선형 시스템의 모든 해(solution)집합
  • 특정한 벡터들의 모든 선형 결합의 집합

예 1)

다음 선형 결합의 성립 여부를 결정하여 봅니다.

$$\begin{aligned}x-3y&=0\\x-y&=0\\x&=0\\y&=0 \end{aligned} \Rightarrow \begin{bmatrix}1&-3\\1&-1\\1&0\\0&1 \end{bmatrix}\begin{bmatrix} x\\y\end{bmatrix}=\begin{bmatrix}0\\0\\0\\0 \end{bmatrix}$$

A=np.array([[ 1, -3], [-1, 1], [ 1, 0], [0, 1]])
c=np.zeros([4,1])
au=np.hstack([A, c])
print(au)
[[ 1. -3.  0.]
 [-1.  1.  0.]
 [ 1.  0.  0.]
 [ 0.  1.  0.]]
Matrix(au).rref()
(Matrix([
 [1, 0, 0],
 [0, 1, 0],
 [0, 0, 0],
 [0, 0, 0]]),
 (0, 1))

기약행사다리꼴에서 자유변수가 없으므로 자명한 해가 존재합니다. 즉, 행렬 A에 의한 동차선형결합이 성립합니다.

A를 구성하는 각 벡터 u, v와 그들의 선형결합 결과는 R4의 부분공간(W)이 됩니다. 즉, 그 부분공간 W는 벡터 u와 v를 기본으로 그들의 확대 또는 수축의 결과이므로 그 벡터들은 W의 스판(span)이 됩니다(식 3).

W = span{u, v} (식 3)

위의 결과는 다음과 같이 정리할 수 있습니다.

부분공간의 스판

벡터공간 V를 구성하는 벡터들에 의한 선형 결합의 결과 W는 V의 부분공간이 됩니다. 그러므로 식 4에서 나타낸 것과 같이 V에 포함되고 선형결합을 구성하는 벡터들은 W의 span이 됩니다.

v1, v2, …, vp ⊂ V (벡터공간)(식 4)
W = Span {v1, v2, …, vp}

예 2)

세 개의 벡터 v1, v2, v3는 벡터 공간 R3에 존재합니다. 다음 벡터 y 역시 이 공간에 존재하기 위한 h값을 결정합시다.

$$v_1=\begin{bmatrix}1\\-2\\-2\end{bmatrix}\quad v_2=\begin{bmatrix} 15\\-4\\-7\end{bmatrix}\quad v_3=\begin{bmatrix} -3\\1\\0\end{bmatrix}\quad y=\begin{bmatrix} -4\\3\\h\end{bmatrix}$$

벡터들 사이에 선형 결합이 성립하는지를 결정하는 것입니다. 그러나 벡터 y에 미지수 h가 포함되어 있습니다. 미지수가 포함된 연산은 sympy 라이브러리의 symbols() 함수를 사용합니다. 이 함수는 기호를 연산할 수 있는 미지수로 변환하기 때문에 미지수를 포함하는 다양한 연산이 가능합니다.

v1=np.array([1,-2,-2]).reshape(-1,1)
v2=np.array([5,-4, -7]).reshape(-1,1)
v3=np.array([-3, 1, 0]).reshape(-1,1)
V=np.hstack([v1,v2,v3])
print(V)
[[ 1  5 -3]
[-2 -4  1]
[-2 -7  0]]
h=symbols("h")
y=Matrix([[-4], [3], [h]])
y

$\left[\begin{matrix}-4\\3\\h\end{matrix}\right]$

다음은 rref() 함수를 적용하기 의해 확대행렬(augment matrix)을 생성한 것입니다. 이 결과는 출력 형태의 조정을 위해 sympy 객체를 array 객체로 변환하였습니다.

au=Matrix(V).row_join(y)
au

$\left[\begin{matrix}1 & 5 & -3 & -4\\-2 & -4 & 1 & 3\\-2 & -7 & 0 & h\end{matrix}\right]$

au.rref()
(Matrix([
 [1, 0, 0,      h/3 - 5/3],
 [0, 1, 0, 10/21 - 5*h/21],
 [0, 0, 1,   11/7 - 2*h/7]]),
 (0, 1, 2))

위 결과에 의하면 자유 변수가 존재하지 않으므로 h 값에 관계없이 벡터들의 선형 관계는 성립합니다. 결과적으로 벡터 v1, v2, v3은 y의 span이고 y는 ℝ3 차원의 벡터공간의 부분공간이 됩니다(식 5).

y = Span{v1, v2, v3}(식 5)
v1, v2, v3 ⊂ ℝ3 → y ∈ ℝ3

댓글

이 블로그의 인기 게시물

[Linear Algebra] 유사변환(Similarity transformation)

유사변환(Similarity transformation) n×n 차원의 정방 행렬 A, B 그리고 가역 행렬 P 사이에 식 1의 관계가 성립하면 행렬 A와 B는 유사행렬(similarity matrix)이 되며 행렬 A를 가역행렬 P와 B로 분해하는 것을 유사 변환(similarity transformation) 이라고 합니다. $$\tag{1} A = PBP^{-1} \Leftrightarrow P^{-1}AP = B $$ 식 2는 식 1의 양변에 B의 고유값을 고려한 것입니다. \begin{align}\tag{식 2} B - \lambda I &= P^{-1}AP – \lambda P^{-1}P\\ &= P^{-1}(AP – \lambda P)\\ &= P^{-1}(A - \lambda I)P \end{align} 식 2의 행렬식은 식 3과 같이 정리됩니다. \begin{align} &\begin{aligned}\textsf{det}(B - \lambda I ) & = \textsf{det}(P^{-1}(AP – \lambda P))\\ &= \textsf{det}(P^{-1}) \textsf{det}((A – \lambda I)) \textsf{det}(P)\\ &= \textsf{det}(P^{-1}) \textsf{det}(P) \textsf{det}((A – \lambda I))\\ &= \textsf{det}(A – \lambda I)\end{aligned}\\ &\begin{aligned}\because \; \textsf{det}(P^{-1}) \textsf{det}(P) &= \textsf{det}(P^{-1}P)\\ &= \textsf{det}(I)\end{aligned}\end{align} 유사행렬의 특성 유사행렬인 두 정방행렬 A와 B는 'A ~ B' 와 같...

[sympy] Sympy객체의 표현을 위한 함수들

Sympy객체의 표현을 위한 함수들 General simplify(x): 식 x(sympy 객체)를 간단히 정리 합니다. import numpy as np from sympy import * x=symbols("x") a=sin(x)**2+cos(x)**2 a $\sin^{2}{\left(x \right)} + \cos^{2}{\left(x \right)}$ simplify(a) 1 simplify(b) $\frac{x^{3} + x^{2} - x - 1}{x^{2} + 2 x + 1}$ simplify(b) x - 1 c=gamma(x)/gamma(x-2) c $\frac{\Gamma\left(x\right)}{\Gamma\left(x - 2\right)}$ simplify(c) $\displaystyle \left(x - 2\right) \left(x - 1\right)$ 위의 예들 중 객체 c의 감마함수(gamma(x))는 확률분포 등 여러 부분에서 사용되는 표현식으로 다음과 같이 정의 됩니다. 감마함수는 음이 아닌 정수를 제외한 모든 수에서 정의됩니다. 식 1과 같이 자연수에서 감마함수는 factorial(!), 부동소수(양의 실수)인 경우 적분을 적용하여 계산합니다. $$\tag{식 1}\Gamma(n) =\begin{cases}(n-1)!& n:\text{자연수}\\\int^\infty_0x^{n-1}e^{-x}\,dx& n:\text{부동소수}\end{cases}$$ x=symbols('x') gamma(x).subs(x,4) $\displaystyle 6$ factorial 계산은 math.factorial() 함수를 사용할 수 있습니다. import math math.factorial(3) 6 a=gamma(x).subs(x,4.5) a.evalf(3) 11.6 simpilfy() 함수의 알고리즘은 식에서 공통사항을 찾아 정리하...

sympy.solvers로 방정식해 구하기

sympy.solvers로 방정식해 구하기 대수 방정식을 해를 계산하기 위해 다음 함수를 사용합니다. sympy.solvers.solve(f, *symbols, **flags) f=0, 즉 동차방정식에 대해 지정한 변수의 해를 계산 f : 식 또는 함수 symbols: 식의 해를 계산하기 위한 변수, 변수가 하나인 경우는 생략가능(자동으로 인식) flags: 계산 또는 결과의 방식을 지정하기 위한 인수들 dict=True: {x:3, y:1}같이 사전형식, 기본값 = False set=True :{(x,3),(y,1)}같이 집합형식, 기본값 = False ratioal=True : 실수를 유리수로 반환, 기본값 = False positive=True: 해들 중에 양수만을 반환, 기본값 = False 예 $x^2=1$의 해를 결정합니다. solve() 함수에 적용하기 위해서는 다음과 같이 식의 한쪽이 0이 되는 형태인 동차식으로 구성되어야 합니다. $$x^2-1=0$$ import numpy as np from sympy import * x = symbols('x') solve(x**2-1, x) [-1, 1] 위 식은 계산 과정은 다음과 같습니다. $$\begin{aligned}x^2-1=0 \rightarrow (x+1)(x-1)=0 \\ x=1 \; \text{or}\; -1\end{aligned}$$ 예 $x^4=1$의 해를 결정합니다. solve() 함수의 인수 set=True를 지정하였으므로 결과는 집합(set)형으로 반환됩니다. eq=x**4-1 solve(eq, set=True) ([x], {(-1,), (-I,), (1,), (I,)}) 위의 경우 I는 복소수입니다.즉 위 결과의 과정은 다음과 같습니다. $$x^4-1=(x^2+1)(x+1)(x-1)=0 \rightarrow x=\pm \sqrt{-1}, \; \pm 1=\pm i,\; \pm1$$ 실수...