기본 콘텐츠로 건너뛰기

라벨이 선형독립인 게시물 표시

[matplotlib]quiver()함수

[Linear Algebra] QR 분해(Decomposition)

QR 분해(Decomposition) 임의의 벡터와 관련된 직교 벡터를 계산하기 위해 Gram-Schmidt 과정을 적용하였습니다. 이 과정을 사용하여 식 1과 같이 행렬을 구성하는 벡터들의 직교벡터들로 구성된 직교행렬과 그에 대응하는 행렬로 분해될 수 있습니다. 이러한 분해를 QR 분해(Decomposition) 라고 합니다. 즉, m × n 형태의 행렬 A가 선형독립이라면 식 1과 같이 분해할 수 있습니다. $$\begin{align}\tag{식 1} \text{A} = \text{QR} \end{align}$$ Q: 열공간 A에 정규직교인 m×n 차원의 행렬 (Col A) R: n×n 차원의 상삼각 역행렬, 대각원소는 양수입니다. 예 1) 다음 행렬 A의 QR 분해를 계산합니다. $$A=\begin{bmatrix} 1& 0 & 0 \\1& 1& 0\\1& 1& 1\\1& 1 & 1 \end{bmatrix}$$ 행렬 A를 구성하는 열 벡터들이 기저벡터인지를 확인합니다. 즉, 선형독립인지를 확인합니다. rref() 메서드를 적용합니다. import numpy as np import numpy.linalg as la from sympy import * A=np.array([[1,0,0],[1,1,0],[1,1,1], [1,1,1]]) Matrix(A).rref() (Matrix([ [1, 0, 0], [0, 1, 0], [0, 0, 1], [0, 0, 0]]), (0, 1, 2)) 위 결과에 의하면 A의 모든 열벡터들이 기저 벡터 입니다. 각 벡터들에 직교 기저는 Gram-Schmidt 과정 을 적용하여 계산할 수 있습니다. a1, a2, a3=A[:,0], A[:,1], A[:,2] v1=a1 v2=a2-(a2@v1)/(v1@v1)*v1 print(v1) print(v2) [1 1 1 1] [-0.75 0.2...

[Linear Algebra] 정규직교(Orthonormal)

정규직교(Orthonormal) 서로 직교하는 단위 벡터들을 정규 직교(orthonormal) 라고 하며 기저 벡터가 됩니다. 정규직교 집합 {u 1 , u 2 , …, u p }은 직교 벡터들의 선형결합으로 생성된 부분공간(W)의 스판 이 됩니다. 식 1과 같이 나타낼 수 있습니다. $$\tag{식 1} W=\text{span}\{u_1,\, u_2,\, \cdots,\, u_p\}$$ 이 벡터들의 선형 결합은 선형 독립이므로 자명한(trivial) 해를 가집니다. 결과적으로 정규직교 집합은 W의 정규직교 기저(orthonormal basis)가 됩니다. 정규직교 집합은 정규직교기저가 됩니다. 예 1) 다음 세 벡터들은 ℝ 3 의 정규직교 기저인지를 결정합니다. $$v_1=\begin{bmatrix}\frac{3}{\sqrt{11}}\\\frac{1}{\sqrt{11}}\\\frac{1}{\sqrt{11}} \end{bmatrix} \quad v_2=\begin{bmatrix}-\frac{1}{\sqrt{6}}\\\frac{2}{\sqrt{6}}\\\frac{1}{\sqrt{6}} \end{bmatrix} \quad v_3=\begin{bmatrix} -\frac{1}{\sqrt{66}}\\ -\frac{4}{\sqrt{66}}\\-\frac{7}{\sqrt{66}}\end{bmatrix}$$ v1=np.array([3/11**0.5, 1/11**0.5, 1/11**0.5]).reshape(3,1) v2=np.array([-1/6**0.5, 2/6**0.5, 1/6**0.5]).reshape(3,1) v3=np.array([-1/66**0.5, -4/66**0.5, 7/66**0.5]).reshape(3,1) for i, j in enumerate([v1, v2, v3 ]): print(F" v{i+1}의 norm: {np.around(la.norm(j),1)}") v1의 norm: 1.0 v2의 nor...

[Linear Algebra] 직교집합(Orthogonal Set)과 선형결합

직교집합(Orthogonal Set)과 선형결합 ℝ n 차원에서 식 1과 같이 내적이 0인 모든 벡터들의 집합 u 1 , u 2 , …, u p 를 직교집합(orthogonal set) 이라고 합니다( 직교벡터(Orthogonal vectors) 참조 ). $$u_i\cdot u_j=0,\quad i \ne j$$ (식 1) 예 1) 다음 벡터 집합이 직교 집합인지를 결정해봅니다. $$u_1=\begin{bmatrix}3\\1\\1\end{bmatrix}\quad u_2=\begin{bmatrix}-1\\2\\1\end{bmatrix} \quad u_3=\begin{bmatrix}-\frac{1}{2}\\-2\\\frac{7}{2}\end{bmatrix}$$ u1=np.array([3.,1.,1.]).reshape(3,1) u2=np.array([-1.,2.,1.]).reshape(3,1) u3=np.array([-1/2,-2,7/2]).reshape(3,1) u=[u1,u2, u3] for i, j in itertools.combinations([0,1,2], 2): print(np.dot(u[i].T,u[j])) [[0.]] [[0.]] [[0.]] 위 결과에 의하면 벡터들 간의 내적이 모두 0이므로 세 벡터들은 모두 직교 상태입니다. 그 결과는 세 벡터를 나타낸 그림 1에서 확인할 수 있습니다. 그림 1. 직교관계인 세개의 벡터. 위 벡터들로 이루어진 동차선형결합 성립여부를 결정합니다. U=np.hstack([u1,u2,u3]) c=np.zeros([3,1]) au=np.hstack([U,c]) Matrix(au).rref() (Matrix([ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0]]), (0, 1, 2)) 확대 행렬(au)의 rref는 모든 열이 피벗 열 임을 나타내며 이 시스템의 모든 변수는 선도변수(leading variable)입니다( 기약행 사다리꼴 ...

[Linear Algebra] 급수(Rank)

급수(Rank) 선형결합에 의해 생성되는 부분 공간 W의 차원 은 그 공간을 구성하는 기저(Basis) 벡터 의 수 입니다. 그 기저 벡터의 수를 급수(rank) 라고 합니다. 예 1) 다음 동차 방정식의 급수(rank)를 결정해 봅니다. 3x 1 + 6x 2 - x 3 + x 4 + 7x 5 = 0 x 1 - 2x 2 + 2x 3 + 3x 4 - x 5 = 0 2x 1 - x 2 + 5x 3 + 8x 4 - 4x 5 = 0 v1=np.array([3, 1, 2]) v2=np.array([6, -2, -1]) v3=np.array([-1, 2, 5]) v4=np.array([1, 3, 8]) v5=np.array([7, -1, -4]) c=np.zeros(3) aug=np.c_[v1, v2, v3, v4, v5, c] print(aug) [[ 3 6 -1 1 7 0] [ 1 -2 2 3 -1 0] [ 2 -1 5 8 -4 0]] print(np.array(Matrix(aug).rref()[0], dtype=float).round(2)) [[ 1. 0. 0. 0.45 2.03 0. ] [ 0. 1. 0. 0.18 -0.12 0. ] [ 0. 0. 1. 1.45 -1.64 0. ]] 위 결과에 의하면 피벗열은 0, 1, 2열이므로 이 열에 대응되는 열벡터들은 기저벡터가 됩니다. 그러므로 식 1과 같이 나타낼 수 있는 선형 시스템들은 모두 선형 독립 관계가 성립합니다. \begin{align}&\text{system 1}:\; \begin{bmatrix}3&6&-1\\1&-2&2\\2&-1&5\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}=\begin{bmatrix}1\\3\\8\end{bmatrix}\\ ...

[Linear Algebra] 열공간(Column Space)과 행공간(row space)

열공간(Column Space)과 행공간(row space) m×n 형태의 행렬 A의 기저(Basis) 벡터 들의 집합을 열공간(column space) 라고 하며 Col A 로 나타냅니다. 예 1) 다음 표준 행렬 A의 열공간을 계산해봅니다. $$\begin{bmatrix} -3&6&-1&1&-7\\1&-2&2&3&1\\2&-4&5&8&-4\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\\x_4\\x_5 \end{bmatrix}=\begin{bmatrix} 0\\0\\0\end{bmatrix}$$ 위 식을 일반 선형시스템으로 나타내면 식 1과 같습니다. \begin{align}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{align} (식 1) A=np.array([[-3, 6, -1, 1, -7],[1,-2,2,3,-1],[2, -4, 5, 8, -4]]) c=np.zeros([3,1]) Matrix(np.hstack([A,c])).rref() (Matrix([ [1, -2.0, 0, -1.0, 3.0, 0], [0, 0, 1, 2.0, -2.0, 0], [0, 0, 0, 0, 0, 0]]), (0, 2)) 행렬 A의 기약행사다리꼴에서 0과 2열이 피봇열(pivot column) 입니다. 즉, 두 열벡터가 기저 벡터가 되며 이 기저 벡터들과 나머지 벡터들과의 선형 독립이 성립됩니다. 이 관계를 확인해 봅니다. 먼저 2열의 벡터와의 선형결합을 조사합니다. #기저벡터 A_b=A[:,[0, 2]] #Ab=A의 1열 A_bA1=np.hstack([A_b, A[:,1].reshape(-1,1)]) M...

[Linear Algebra] 기저(Basis) 벡터

기저(Basis) 벡터 부분공간이 되는 벡터들은 스판인 벡터들의 확대 또는 축소의 결과입니다. 즉, 스판인 벡터들은 그 벡터 공간을 형성하는 기본이 되는 벡터(들)입니다. 이러한 벡터들을 기저(Basis) 또는 기저벡터라고 합니다. 기저벡터들의 선형결합은 선형독립입니다. 즉, 기저 벡터들은 다음 조건을 만족해야 합니다. 기저 벡터(Basis vector) 벡터 W가 벡터 공간 B(b 1 , b 2 , … , b p )의 부분공간인 경우 B가 W의 기저(basis)가 되는 것은 다음과 동치입니다. ⇔ 다음의 W와 B의 선형결합은 독립입니다. $$\begin{bmatrix}b_{11}&b_{12}&\cdots&b_{1p}\\\vdots&\vdots&\ddots&\vdots\\b_{n1}&b_{n2}&\cdots&b_{np}\end{bmatrix}\begin{bmatrix}x_1\\x_2\\\vdots\\x_p\end{bmatrix}=\begin{bmatrix}w_1\\\vdots\\w_n\end{bmatrix}$$ 벡터 공간에서 기저는 선형 독립인 벡터들입니다. ⇔ W = Span{b 1 , b 2 , … , b p } 즉, W는 집합 B로 구성된 벡터공간의 부분 공간이며 그 벡터들의 선형결합의 결과입니다. 기약행사다리꼴 형태에서 피벗 열(pivot column) 에 해당하는 벡터와 같습니다. 결과적으로 벡터 B 집합은 W(부분공간)의 스판이 되며 B의 선형 결합에 의한 결과 벡터가 W가 된다는 것을 의미합니다. 또한 B와 W의 선형결합은 독립이어야 하므로 자명한 해(유일해) 를 가져야 합니다. 표준기저(Standard basis) 항등행렬을 표준행렬로 가진 선형결합의 경우 선형독립입니다. 그러므로 항등행렬을 구성하는 각 열벡터들은 기저벡터의 가장 기본형으로 표준기저라고 합니다. import numpy as np import numpy.linalg as la ...

[Linear Algebra] 선형독립과 선형종속

선형 독립과 선형 종속 ℝ 공간의 벡터들(v 1 , v 2 , …, v p )과 스칼라(c 1 , c 2 , …, c p )의 동차선형결합(Homogeneous Linear Combination) 은 식 1과 같이 행렬 방정식의 형태로 나타낼 수 있습니다. \begin{align}v_1c_1+v_2c_2+\cdots+v_pc_p &=0\\ \Rightarrow\begin{bmatrix}v_{11}& v_{12}& \cdots & v_{1p}\\ v_{21}& v_{22}& \cdots & v_{2p}\\ \vdots& \vdots& \ddots& \vdots\\ v_{n1}& v_{n2}& \cdots & v_{np}\end{bmatrix} \begin{bmatrix} c_1\\c_2\\\vdots\\c_p\end{bmatrix} &= \begin{bmatrix} 0\\0\\\vdots\\0\end{bmatrix}\end{align} (식 1) 동차 선형 결합이 자명한 해(trivial solution) 를 갖는다면 선형 독립(linear independent) 라고 하고 위 식을 만족시키기 위한 자명하지 않은 해(nontrivial solution)을 갖는다면 선형 종속(linear dependent) 이라고 합니다. 예 1) 다음시스템의 선형 독립성을 결정합니다. \begin{align}3x_1 + 5x_2 - 4x_3 &= 0\\ -3x_1 - 2x_2 + 4x_3 &= 0\\  6x_1 + x_2 - 8x_3 &= 0\end{align} 다음 코드에서 객체 aug 와 같이 각 식을 벡터로 전환하여 행기준으로 결합하면 확대행렬이 됩니다. aug 에서 상수항을 제외하면 표준행렬(A)이 됩니다. v1=np.array([1, 2, 3]) v2=np.array([4, 5, 6]) v3=np.array...

[Linear Algebra] 역행렬(Inverse matrix)

역행렬(Inverse matrix) 관련된 내용 기약행 사다리꼴 형태 (Reduced row echelon form, rref) 행렬식 식 1과 같이 두 행렬의 행렬곱 결과가 항등행렬 을 생성한다면 행렬 B는 행렬 A의 역행렬(inverse matrix) 이 되며 A -1 로 나타냅니다. 물론 역도 성립합니다. A · B = I → B = A -1 (식 1) 역행렬을 가지는 행렬을 가역행렬(reversible matrix) 이라고 하며 np.linalg.inv() 함수에 의해 계산할 수 있습니다. a=np.array([[1,3,-5], [-2,7,8], [4,0,6]]) print(a) [[ 1 3 -5] [-2 7 8] [ 4 0 6]] a_inv=la.inv(a) # a의 역행렬 print(a_inv.round(2)) [[ 0.134 -0.057 0.188] [ 0.14 0.083 0.006] [-0.089 0.038 0.041]] 위 코드의 결과 a_inv의 각 요소를 반올림을 실행하기 위해 .round() 메소드를 적용하였습니다. aa_inv=a.dot(a_inv) print(aa_inv.round(2)) [[ 1. 0. -0.] [ 0. 1. 0.] [ 0. -0. 1.]] 이 역행렬은 식 2와 같은 연립방정식의 해를 계산하기 위해 사용됩니다. $$\begin{aligned}x+y+2z&=9\\2x+4y-3z&=1\\3x+6y-5z&=0 \end{aligned} \Rightarrow \begin{bmatrix}1&1&2\\2&4&-3\\3&6&-5\end{bmatrix} \begin{bmatrix}x\\y\\z\end{bmatrix}=\begin{bmatrix} 9\\1\\0\end{bmatrix}$$ (식 2) 식 2의 우항은 식 3과 같이 방정식들...