기본 콘텐츠로 건너뛰기

pandas_ta를 적용한 통계적 인덱스 지표

[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() 함수의 알고리즘은 식에서 공통사항을 찾아 정리하...

유리함수 그래프와 점근선 그리기

내용 유리함수(Rational Function) 점근선(asymptote) 유리함수 그래프와 점근선 그리기 유리함수(Rational Function) 유리함수는 분수형태의 함수를 의미합니다. 예를들어 다음 함수는 분수형태의 유리함수입니다. $$f(x)=\frac{x^{2} - 1}{x^{2} + x - 6}$$ 분수의 경우 분모가 0인 경우 정의할 수 없습니다. 이와 마찬가지로 유리함수 f(x)의 정의역은 분모가 0이 아닌 부분이어야 합니다. 그러므로 위함수의 정의역은 분모가 0인 부분을 제외한 부분들로 구성됩니다. sympt=solve(denom(f), a); asympt [-3, 2] $$-\infty \lt x \lt -3, \quad -3 \lt x \lt 2, \quad 2 \lt x \lt \infty$$ 이 정의역을 고려해 그래프를 작성을 위한 사용자 정의함수는 다음과 같습니다. def validX(x, f, symbol): ① a=[] b=[] for i in x: try: b.append(float(f.subs(symbol, i))) a.append(i) except: pass return(a, b) #x는 임의로 지정한 정의역으로 불연속선점을 기준으로 구분된 몇개의 구간으로 전달할 수 있습니다. #그러므로 인수 x는 2차원이어야 합니다. def RationalPlot(x, f, sym, dp=100): fig, ax=plt.subplots(dpi=dp) # ② for k in x: #③ x4, y4=validX(k, f, sym) ax.plot(x4, y4) ax.spines['left'].set_position(('data', 0)) ax.spines['right...