작성자: admin 작성일시: 2016-09-30 21:27:00 조회수: 263 다운로드: 53
카테고리: 기초 수학 태그목록:

선형대수와 해석기하

벡터의 기하학적 의미

길이가 $K$인 벡터(vector) $a$는 $K$차원의 공간에서 원점과 벡터 $a$의 값으로 표시되는 점을 연결한 화살표(arrow)로 간주할 수 있다.

$$ a = \begin{bmatrix}1 \\ 2 \end{bmatrix} $$
In:
a = c(1, 2)

plot(NULL, NULL, xlab="x", ylab="y", xlim=c(-1, 4), ylim=c(-1, 4))
grid(lwd = 2)
points(0, 0, lwd=30, col="red")
points(a[[1]], a[[2]], lwd=30, col="red")
arrows(0, 0, a[[1]], a[[2]], length=0.2, angle=20, lwd=10)
text(0.2, 1.3, labels="a", cex=3)

벡터의 길이

벡터 $a$ 의 길이를 놈(norm) $\| a \|$ 이라고 하며 다음과 같이 계산할 수 있다.

$$ \| a \| = \sqrt{a^T a } = \sqrt{a_1^2 + \cdots + a_K^2} $$

norm(type="2") 명령으로 벡터의 길이를 계산할 수 있다.

In:
a = c(1, 1)
norm(a, type="2")
1.4142135623731

단위 벡터

길이가 1인 벡터를 단위 벡터(unit vector)라고 한다. 예를 들어 다음과 같은 벡터들은 모두 단위 벡터이다.

$$ a = \begin{bmatrix}1 \\ 0\end{bmatrix} ,\;\; b = \begin{bmatrix}0 \\ 1\end{bmatrix} ,\;\; c = \begin{bmatrix} \dfrac{1}{\sqrt{2}} \\ \dfrac{1}{\sqrt{2}} \end{bmatrix} $$

임의의 벡터 $x$에 대해 다음은 벡터는 단위 벡터가 된다.

$$ \dfrac{x}{\| x \|} $$
In:
a <- c(1, 0)
b <- c(0, 1)
c <- c(1/sqrt(2), 1/sqrt(2))
c(norm(a, type="2"), norm(b, type="2"), norm(c, type="2"))
  1. 1
  2. 1
  3. 1

벡터의 합

벡터와 벡터의 합은 벡터가 된다.

$$ a = \begin{bmatrix}1 \\ 2\end{bmatrix} ,\;\; b = \begin{bmatrix}2 \\ 1\end{bmatrix} \;\;\; \rightarrow \;\;\; c = a + b = \begin{bmatrix}3 \\ 3\end{bmatrix} \;\; $$
In:
a <- c(1, 2)
b <- c(2, 1)
c <- a + b

plot(NULL, NULL, xlab="x", ylab="y", xlim=c(-1, 4), ylim=c(-1, 4))
grid(lwd = 2)
points(0, 0, lwd=10, col="red")
points(a[[1]], a[[2]], lwd=10, col="red")
points(b[[1]], b[[2]], lwd=10, col="red")
points(c[[1]], c[[2]], lwd=10, col="red")
lines(c(a[[1]], c[[1]]), c(a[[2]], c[[2]]), lwd=4, col="darkgray", lty=3)
lines(c(b[[1]], c[[1]]), c(b[[2]], c[[2]]), lwd=4, col="darkgray", lty=3)
arrows(0, 0, a[[1]], a[[2]], length=0.15, angle=20, lwd=5, col="darkgray")
arrows(0, 0, b[[1]], b[[2]], length=0.15, angle=20, lwd=5, col="darkgray")
arrows(0, 0, c[[1]], c[[2]], length=0.15, angle=20, lwd=5, col="black")
text(0.4, 1.3, labels="a", cex=2)
text(1.4, 0.3, labels="b", cex=2)
text(1.3, 1.7, labels="c", cex=2)

벡터의 집합 중에서 집합의 원소인 두 벡터의 선형 조합(스칼라 곱의 합)이 그 집합의 원소이면 벡터 공간이라고 한다.

$$ a, b \in \mathbf{R} \;\; \text{ and } \;\; \alpha_1a + \alpha_2b \in \mathbf{R} $$

벡터의 분해

어떤 두 벡터 $a$, $b$의 합이 다른 벡터 $c$가 될 때 $c$가 두 벡터 성분(vector component) $a$, $b$으로 분해(decomposition)된다고 말할 수 있다.

두 벡터의 내적

두 벡터의 내적은 다음과 같이 벡터의 길이 $\|a\|$, $\|b\|$ 와 두 벡터 사이의 각도 $\theta$로 계산할 수도 있다.

$$ a^Tb = \|a\|\|b\| \cos\theta $$

(증명)

위 식은 2차원 벡터의 경우 다음과 같이 증명할 수 있다.

위 그림과 같은 삼각형에서 세 변은 다음과 같은 공식을 만족한다. (코사인 법칙)

$$ \|a−b\|^2=\|a\|^2+\|b\|^2−2\|a\|\|b\|\cos\theta $$$$ \begin{eqnarray} \|a−b\|^2 &=& (a−b)^T(a−b) \\ &=& a^Ta − 2 ( a^Tb ) + b^T b \\ &=& \|a\|^2+\|b\|^2 − 2 a^T b \end{eqnarray} $$

두 식이 같으므로

$$ a^Tb = \|a\|\|b\| \cos\theta $$

벡터의 직교

두 벡터 $a$와 $b$가 이루는 각이 90도이면 서로 직교(orthogonal)라고 하며 $ a \perp b $로 표시한다.

$\cos 90^{\circ} = 0$이므로 서로 직교인 두 벡터의 벡터 내적(inner product, dot product)는 0이된다.

$$ a^T b = b^T a = 0 \;\;\;\; \leftrightarrow \;\;\;\; a \perp b $$

예를 들어 다음 두 벡터는 서로 직교한다.

$$ a = \begin{bmatrix}1 \\ 1\end{bmatrix} ,\;\; b = \begin{bmatrix}-1 \\ 1\end{bmatrix} \;\;\;\; \rightarrow \;\;\;\; a^T b = \begin{bmatrix}1 & 1\end{bmatrix} \begin{bmatrix}-1 \\ 1\end{bmatrix} = -1 + 1 = 0 $$
In:
a = c(1, 1)
b = c(-1, 1)
drop(a %*% b)
0

투영

벡터 $a$를 다른 벡터 $b$에 직교하는 성분 $a_1$ 와 나머지 성분 $a_2 = a - a_1$로 분해할 수 있다. 이 때 $a_2$는 $b$와 평행하며 이 길이를 벡터 $a$의 벡터 $b$에 대한 투영(projection)이라고 한다.

벡터의 투영은 다음과 같이 내적을 사용하여 구할 수 있다.

$$ a = a_1 + a_2 $$$$ a_1 \perp b \;\; \text{ and } \;\; a_2 = a - a_1 $$

이면

$$ \| a_2 \| = a^T\dfrac{b}{\|b\|} = \dfrac{a^Tb}{\|b\|} = \dfrac{b^Ta}{\|b\|} $$

이다.

In:
a = c(1, 2)
b = c(2, 0)
a2 = (a %*% b)/norm(b, type="2") * c(1, 0)
a1 = a - a2

plot(NULL, NULL, xlab="x", ylab="y", xlim=c(-1, 4), ylim=c(-1, 4))
grid(lwd = 2)
points(0, 0, lwd=10, col="red")
points(a[[1]], a[[2]], lwd=10, col="red")
points(b[[1]], b[[2]], lwd=10, col="red")
arrows(0, 0, a[[1]], a[[2]], length=0.15, angle=20, lwd=5, col="darkgray")
arrows(0, 0, b[[1]], b[[2]], length=0.15, angle=20, lwd=5, col="darkgray")
arrows(0, 0, a1[[1]], a1[[2]], length=0.15, angle=20, lwd=5, col="lightgreen")
arrows(0, 0, a2[[1]], a2[[2]], length=0.15, angle=20, lwd=5, col="lightgreen")
text(0.4, 1.3, labels="a", cex=2)
text(1.4, 0.3, labels="b", cex=2)
text(-0.3, 1, labels="a1", cex=2)
text(0.5, -0.3, labels="a2", cex=2)

직선

벡터 공간에서 직선은 다음과 같은 함수로 표현할 수 있다.

$$ f(x) = w^T(x - w) = w^Tx - w^Tw = w^Tx - \| w \|^2 = w^Tx - w_0 = 0 $$

$x$는 직선 상의 점을 나타내는 벡터이고 $w$는 원점으로부터 직선까지 이어지는 수직선을 나타내는 벡터이다. $x-w$ 벡터가 $w$ 벡터와 수직이라는 것은 $x$가 가리키는 점과 $w$가 가리키는 점을 이은 선이 $w$와 수직이라는 뜻이다.

예를 들어

$$ w = \begin{bmatrix}1 \\ 2\end{bmatrix} ,\;\; w_0 = 5 $$

일 때

$$ \begin{bmatrix}1 & 2\end{bmatrix} \begin{bmatrix}x_1 \\ x_2 \end{bmatrix} - 5 = x_1 + 2x_2 - 5 = 0 $$

이면 벡터 $w$가 가리키는 점 (1, 2)를 지나면서 벡터 $w$에 수직인 선을 뜻한다.

In:
w = c(1, 2)
x1 = c(3, 1)
x2 = c(-1, 3)
w0 = 5

plot(NULL, NULL, xlab="x", ylab="y", xlim=c(-2, 4), ylim=c(-2, 4))
grid(lwd = 2)
arrows(-3, 4, 5, 0, length=0.15, angle=20, lwd=5, col="darkred")
points(x1[[1]], x1[[2]], lwd=10, col="red")
points(x2[[1]], x2[[2]], lwd=10, col="red")
points(w[[1]], w[[2]], lwd=10, col="red")
arrows(0, 0, x1[[1]], x1[[2]], length=0.15, angle=20, lwd=5, col="darkgray")
arrows(0, 0, x2[[1]], x2[[2]], length=0.15, angle=20, lwd=5, col="darkgray")
arrows(0, 0, w[[1]], w[[2]], length=0.15, angle=20, lwd=5, col="red")
points(0, 0, lwd=10, col="red")
text(-0.9, 1.5, labels="x1", cex=2)
text(1.5, 0.1, labels="x2", cex=2)
text(0.3, 1.1, labels="w", cex=2)

직선과 점의 거리

직선 $ w^Tx - w_0 = 0 $ 과 이 직선 위에 있지 않은 점 $x'$의 거리는 단위 벡터 $\dfrac{w}{\|w\|}$에 대한 $x'$의 투영에서 $\|w\|$를 뺀 값의 절대값이다. 따라서 다음과 같이 정리할 수 있다.

$$ \left| \dfrac{w^Tx'}{\|w\|} - \|w\| \right| = \dfrac{\left|w^Tx' - \|w\|^2 \right|}{\|w\|}= \dfrac{\left|w^Tx' - w_0 \right|}{\|w\|} $$

벡터의 선형 종속과 선형 독립

벡터들의 선형 조합이 0이 되는 모두 0이 아닌 스칼라값들이 존재하면 그 벡터들은 선형 종속(linearly dependent)이라고 한다.

$$ a = \begin{bmatrix}1 \\ 2\end{bmatrix} ,\;\; b = \begin{bmatrix}3 \\ 3\end{bmatrix} \;\; c = \begin{bmatrix}10 \\ 14\end{bmatrix} \;\; $$$$ 2a + b - \frac{1}{2}c = 0 $$
In:
a = c(1, 2)
b = c(3, 3)
c = c(10, 14)
2 * a + b - 0.5 * c
  1. 0
  2. 0

벡터들의 선형 조합이 0이 되는 모두 0이 아닌 스칼라값들이 존재하지 않으면 그 벡터들은 선형 독립(linearly independent)이라고 한다.

$$ \alpha_1 a_1 + \cdots + \alpha_K a_K = 0 \;\;\;\; \leftrightarrow \;\;\;\; \alpha_1 = \cdots = \alpha_K = 0 $$

기저 벡터

벡터 공간에 속하는 벡터의 집합이 선형 독립이고 다른 모든 벡터 공간의 벡터들이 그 벡터 집합의 선형 조합으로 나타나면 그 벡터 집합을 벡터 공간의 기저 벡터(basis vector)라고 한다.

예를 들어 다음과 같은 두 벡터는 2차원 벡터 공간의 기저 벡터이다. $$ a = \begin{bmatrix}1 \\ 0\end{bmatrix} ,\;\; b = \begin{bmatrix}0 \\ 1\end{bmatrix} \;\; $$ 또는 $$ a = \begin{bmatrix}1 \\ 1\end{bmatrix} ,\;\; b = \begin{bmatrix}2 \\ 3\end{bmatrix} \;\; $$

다음과 같은 두 벡터는 2차원 벡터 공간의 기저 벡터가 될 수 없다. $$ a = \begin{bmatrix}1 \\ 2\end{bmatrix} ,\;\; b = \begin{bmatrix}2 \\ 4\end{bmatrix} \;\; $$

열 공간

행렬은 열 벡터의 집합으로 볼 수 있다. 이 때 열 벡터들의 조합으로 생성되는 벡터 공간을 열 공간(column space)이라고 한다.

$$ A = \begin{bmatrix} 1 & 5 & 6 \\ 2 & 6 & 8 \\ 7 & 1 & 8 \end{bmatrix} \;\;\;\; \rightarrow \;\;\;\; \alpha_1 \begin{bmatrix} 1 \\ 2 \\ 7 \end{bmatrix} + \alpha_2 \begin{bmatrix} 5 \\ 6 \\ 1 \end{bmatrix} + \alpha_3 \begin{bmatrix} 6 \\ 8 \\ 8 \end{bmatrix} \; \in \; \text{column space} $$

열 랭크

행렬의 열 벡터 중 서로 독립인 열 벡터의 최대 갯수를 열 랭크(column rank) 혹은 랭크(rank)라고 한다.

예를 들어 다음 행렬의 랭크는 2이다.

$$ A = \begin{bmatrix} 1 & 5 & 6 \\ 2 & 6 & 8 \\ 3 & 11 & 14 \end{bmatrix} $$

qr 명령의 결과값 중 rank 속성으로 랭크를 계산할 수 있다.

In:
A = matrix(c(1, 5, 6, 2, 6, 8, 3, 11, 14), nrow=3, byrow=T)
qr(A)$rank
2

좌표

벡터의 성분, 즉 좌표(coordinate)는 표준 기저 벡터들에 대한 해당 벡터의 투영(projection)으로 볼 수 있다.

In:
e1 = c(1, 0)
e2 = c(0, 1)
a = c(2, 2)

plot(NULL, NULL, xlab="x", ylab="y", xlim=c(-1, 3), ylim=c(-1, 3))
grid(lwd = 2)
points(e1[[1]], e1[[2]], lwd=10, col="red")
points(e2[[1]], e2[[2]], lwd=10, col="red")
points(a[[1]], a[[2]], lwd=10, col="red")
arrows(0, 0, e1[[1]], e1[[2]], length=0.15, angle=20, lwd=5, col="darkgreen")
arrows(0, 0, e2[[1]], e2[[2]], length=0.15, angle=20, lwd=5, col="darkgreen")
arrows(0, 0, a[[1]], a[[2]], length=0.15, angle=20, lwd=5, col="darkgray")
points(0, 0, lwd=10, col="red")
text(-0.2, 0.5, labels="e1", cex=2)
text(1.5, 0, labels="e2", cex=2)
text(1, 1.3, labels="a", cex=2)

좌표 변환

새로운 기저 벡터를에 대해 벡터 투영을 계산하는 것을 좌표 변환(coordinate transform)이라고 한다.

좌표 변환은 새로운 기저 벡터로 이루어진 변환 행렬(transform matrix) $A$ 와의 내적으로 계산한다.

$$ Aa' = a $$$$ a' = A^{-1}a $$

예를 들어, 기존의 기저 벡터가

$$ e_1 = \begin{bmatrix}1 \\ 0\end{bmatrix} ,\;\; e_2 = \begin{bmatrix}0 \\ 1\end{bmatrix} \;\; $$

이면 벡터 $a$는 사실

$$ a = \begin{bmatrix}2 \\ 2\end{bmatrix} = 2 \begin{bmatrix}1 \\ 0\end{bmatrix} + 2 \begin{bmatrix}0 \\ 1 \end{bmatrix} = 2 e_1 + 2 e_2 $$

새로운 기저 벡터가

$$ g_1 = \begin{bmatrix} \dfrac{1}{\sqrt{2}} \\ \dfrac{1}{\sqrt{2}} \end{bmatrix} ,\;\; g_2 = \begin{bmatrix} -\dfrac{1}{\sqrt{2}} \\ \dfrac{1}{\sqrt{2}} \end{bmatrix} ,\;\; $$

이면 벡터 $a$의 좌표는 다음과 같이 바뀐다.

$$ a = \begin{bmatrix}2 \\ 2\end{bmatrix} \;\;\;\; \rightarrow \;\;\;\; a' = A^{-1}a = \begin{bmatrix} e'_1 & e'_2 \end{bmatrix} a = \begin{bmatrix} \dfrac{1}{\sqrt{2}} & -\dfrac{1}{\sqrt{2}} \\ \dfrac{1}{\sqrt{2}} & \dfrac{1}{\sqrt{2}} \end{bmatrix}^{-1} \begin{bmatrix}2 \\ 2\end{bmatrix} = \begin{bmatrix} \dfrac{1}{\sqrt{2}} & \dfrac{1}{\sqrt{2}} \\ -\dfrac{1}{\sqrt{2}} & \dfrac{1}{\sqrt{2}} \end{bmatrix} \begin{bmatrix}2 \\ 2\end{bmatrix} = \begin{bmatrix}2\sqrt{2}\\0\end{bmatrix} $$
In:
e1 = c(1, 0)
e2 = c(0, 1)
a = c(2, 2)
g1 = c(1, 1)/sqrt(2)
g2 = c(-1, 1)/sqrt(2)

e1 = c(1, 0)
e2 = c(0, 1)
a = c(2, 2)

plot(NULL, NULL, xlab="x", ylab="y", xlim=c(-1, 3), ylim=c(-1, 3))
grid(lwd = 2)
points(e1[[1]], e1[[2]], lwd=10, col="darkred")
points(e2[[1]], e2[[2]], lwd=10, col="darkred")
points(a[[1]], a[[2]], lwd=10, col="darkred")

arrows(0, 0, a[[1]], a[[2]], length=0.15, angle=20, lwd=5, col="darkgray")
arrows(0, 0, e1[[1]], e1[[2]], length=0.15, angle=20, lwd=5, col="darkgreen")
arrows(0, 0, e2[[1]], e2[[2]], length=0.15, angle=20, lwd=5, col="darkgreen")
arrows(0, 0, g1[[1]], g1[[2]], length=0.15, angle=20, lwd=5, col="darkred")
arrows(0, 0, g2[[1]], g2[[2]], length=0.15, angle=20, lwd=5, col="darkred")

points(0, 0, lwd=10, col="red")
text(-0.2, 0.5, labels="e1", cex=2)
text(1.5, 0, labels="e2", cex=2)
text(1, 1.3, labels="a", cex=2)
text(-0.6, 0.1, labels="g1", cex=2)
text(0.3, 0.6, labels="g2", cex=2)
In:
A <- cbind(g1, g2)
colnames(A) <- NULL
A
0.7071068 -0.7071068
0.7071068 0.7071068
In:
Ainv = solve(A)
Ainv
0.70710680.7071068
-0.70710680.7071068
In:
Ainv %*% a
2.828427
0.000000

질문/덧글

아직 질문이나 덧글이 없습니다. 첫번째 글을 남겨주세요!