EXCELSIOR

[코딩더매트릭스]Chap04 - 벡터공간 Vector Space 본문

Linear Algebra/Coding the Matrix

[코딩더매트릭스]Chap04 - 벡터공간 Vector Space

Excelsior-JH 2018. 2. 27. 17:39

해당 포스팅을 Nbviewer 에서 보는 것을 추천한다. Nbviewer로 보기

4.1 선형결합(일차결합) - Linear combination

4.1.1 선형결합의 정의

  • Definition 4.1.1 : 각각을 벡터라고 하면, 선형결합 을 다음과 같은 합이라고 정의하자.

    여기서, 은 스칼라이다. 이 선형결합에서 각각은 계수라고 한다. 의 계수이고, 의 계수이며, ..., 의 계수이다.

4.1.2 선형결합의 사용

Example 4.1.5 평균얼굴 - p.126 이미지의 평균을 선형결합으로 나타낼 수 있다.

  import numpy as np
import matplotlib.pyplot as plt
from PIL import Image

# 이미지 파일 불러오기
u = Image.open('./images/img01.PNG')
v = Image.open('./images/img02.PNG')
w = Image.open('./images/img03.PNG')
u = u.convert('L')
v = v.convert('L')
w = w.convert('L')
v = v.resize(u.size)  # 이미지 사이즈를 u의 사이즈와 같게 맞추기
w = w.resize(u.size)

# 이미지 파일을 np.asarray를 이용해 배열로 만들기
u = np.asarray(u, dtype='float32')
v = np.asarray(v, dtype='float32')
w = np.asarray(w, dtype='float32')

# 스칼라 (1/3)을 곱하여 선형결합 하기
lin_comb = (1/3) * (u + v + w)
plt.imshow(lin_comb, cmap='Greys_r')


4.1.3 계수에서 선형결합으로

길이가 인 벡터들의 리스트 에 대해, 길이가 인 계수들의 리스트 를 대응하는 선형결합 에 매핑하는 함수 가 있다. 이 함수는 주어진 정의역(domain)원소에 대해 함수의 상(image, 함수값)을 찾는 문제라고 볼 수 있다.

Quiz 4.1.7 lin_comb(vlist, clist)를 정의해 보자.

  
def lin_comb(vlist, clist):
   return sum([coeff * v for coeff, v in zip(vlist, clist)])

vlist = [1, 2, 3]
clist = [2, 2, 2]
lin_comb(vlist, clist)

4.2 생성(Span)

  • Definition : 벡터들 의 모든 선형결합으로 이루어진 집합을 이 벡터들의 생성(Span)이라 하고 라고 쓴다.

실수 또는 복소수와 같은 무한 필드 위의 벡터들에 대해, Span은 보통 무한집합이다. 유한필드인 상의 벡터들에 대한 Span은 유한하다.

Quiz 4.2.2 필드 상의 에 몇 개의 벡터가 있는가?

>>Answer :

Quiz 4.2.4 -벡터들로 구성되는 집합에서 공집합의 생성에는 몇 개의 벡터가 있는가?

>>Answer : 빈 할당(empty assignment)으로

Quiz 4.2.5 상의 -벡터 의 생성 즉, 에는 몇 개의 벡터가 있는가?

>>Answer : 이다. 즉 무한개가 있다. 원점과 을 지나는 직선 위의 점들을 구성한다.

Quiz 4.2.6 가 유한개의 벡터들로 구성되는 상의 2-벡터 는 무엇인가?

>>Answer : 영벡터 이다.

4.2.2 선형방정식들의 시스템이 암시하는 다른 방정식들 - 생략

4.2.3 생성자(Generator)

  • Definition : 을 벡터들의 집합이라 하고, 만약 을 만족하는 벡터들이면, 에 대한 생성집합(generating set)이라 하고 벡터 에 대한 생성자(generator) 들이라고 한다.

Example 4.2.11 에 대한 생성집합이라고 하기 위해서는 아래의 두 가지를 보여줘야 한다.

  1. 모든 선형결합은 내의 벡터이다.

  2. 내의 모든 벡터는 선형결합이다.

첫 번째 경우는 상의 모든 3-벡터들을 포함하므로 명백하다. 두 번째의 경우를 증명하기 위해서는 내의 임의의 벡터라고 하자. 는 선형결합으로 쓸 수 있음을 보여야한다.

4.2.4 선형결합의 선형결합

위의 Example 4.2.11에서 에 대한 또 다른 생성집합은 이라고 하면 이 집합의 생성(Span)이 의 모든 생성을 포함한다는 것을 증명해야 한다. 위의 벡터 각각을 선형결합으로 나타내면 된다.

4.2.5 표준 생성자 (Standard generator)

위의 Example 4.2.11에서 를 벡터 의 선형결합으로 표현하는 식을 보았다. 이 식은 세 개의 벡터들이 특수한 형태를 가지기 떄문이다. 만약 을 사용한다면 더욱 간단하게 표현할 수 있다.

위의 세 벡터를 에 대한 표준 생성자라 하고 로 나타낸다. 예를 들어, 에 대한 표준 생성자는 을 사용하고 을 의미한다. <br />

임의의 양의 정수 에 대해, 에 대한 표준 생성자는 아래와 같다.

Quiz 4.2.13 함수, standard(D, one)을 작성해보자. 이 함수는 주어진 정의역 D와 주어진 숫자 one에 대해 에 대한 표준 생성자들의 리스트를 리턴한다.

  
from vec import Vec

def standard(D, one):
   return [Vec(D, {k: one/one}) for k in D]

standard({'A', 'B', 'C'}, 2)


4.3 벡터들의 집합에 대한 기하학적 구조

4.3.1 상의 벡터들의 생성에 대한 기하학적 구조

하나의 영이 아닌 벡터 의 모든 선형결합에 대해 고려해 보자.

위의 집합은 원점과 점 를 지나는 직선을 형성한다. 직선은 1차원 객체이다. 공집합에 대한 Span은 영벡터이며, 이러한 생성(Span)은 0차원 객체로써 하나의 점으로 구성된다. <br />

Example 4.3.1 은 무엇일까? 이 벡터들은 에 대한 표준 생성자들이고 따라서, 모든 2-벡터는 생성(Span) 내에 있다. 즉, 유클리드 평면 의 모든 점을 표현한다. <br />

Example 4.3.4 모든 두 개의 서로 다른 벡터들은 평면을 생성할까? 은 평면을 생성할까? 이 집합의 선형결합은 다음과 같이 쓸 수 있다.

따라서, 이다. 즉, 평면이 아니라 직선을 형성한다. 위의 예들을 통해, 상의 두 벡터의 생성은 평면 또는 평면보다 차원이 낮은 객체(직선 또는 점)이다. 임의의 벡터들의 집합에 대한 생성은 원점을 포함해야 한다. 그이유는 모든 계수가 0인 경우 원점이기 때문이다. <br />

점, 직선, 또는 평면과 같은 기하적 객체는 플랫(flat) 라 한다.

  • Hypothesis : 상의 벡터들의 Span(생성)은 원점을 포함하는 -차원의 flat 또는 원점을 포함하는 더 낮은 차원의 flat을 형성한다.

    • 영벡터의 생성(Span)은 점, 즉 영차원 객체를 형성한다. 바로 원점이다.

    • 하나의 벡터의 생성은 원점을 지나는 직선, 즉 1차원의 객체, 또는 원점을 형성한다.

    • 두 벡터의 생성은 원점을 지나는 평면, 즉 2차원 객체, 또는 원점을 지나는 직선, 또는 원점을 형성한다.

4.3.2 동차 선형시스템의 해집합에 대한 기하학적 구조

평면을 표현하는 좀 더 익숙한 방법은 방정식이다. 예를 들어 이다. 원점이 방정식 를 만족하기 위해서는 이어야 한다. 앞으로의 예제나 개념들은 원점 을 포함하는 평면에 대해 설명한다.<br />

  • Definition : 우변이 인 선형방정식은 동차 선형방정식(homogeneous linear equation)이다.

Example 4.3.7 평면 은 다음과 같이 나타낼 수 있다.

위의 방정식을 도트곱을 이용하면 아래와 같이 쓸 수 있다.

위의 식을 matplotlib 모듈을 이용하여 코드로 나타내면 다음과 같다.

  
from mpl_toolkits.mplot3d import Axes3D

xx, yy = np.meshgrid(range(10), range(10))

zz = 1.65*xx + 1.0*yy  # 1.65x + 1y = 1z

ax = plt.subplot(projection='3d')
ax.plot_surface(xx, yy, zz)
plt.show()
  • Definition : 우변이 모두 인 선형시스템(선형방정식들의 컬렉션)은 동차 선형시스템 (homogeneous linear system)이라고 한다.

  • Hypothesis : 원점을 포함하는 flat은 동차 선형시스템의 해집합이다.

4.3.3 원점을 포함하는 flat의 두 가지 표현

위에서 원점을 포함하는 flat을 나타내는 두 가지 방법을 살펴보았다.

  • 어떤 벡터들의 (생성)을 이용

  • 동차 선형시스템의 해집합을 이용

  
from mpl_toolkits.mplot3d import Axes3D

xx, yy = np.meshgrid(range(10), range(10))

z1 = -4*xx + yy
z2 = -1*yy
ax = plt.subplot(projection='3d')
ax.plot_surface(xx, yy, z1, color='blue', alpha=.5, linewidth=0, zorder=-1)
ax.plot_surface(xx, yy, z2, color='red', alpha=.5, linewidth=0, zorder=1)
plt.show()



4.4 벡터공간

4.4.1 두 표현의 공통점은 무엇인가?

4.4.3에서 설명한 두 가지 표현법에 대한 연관성을 알아보자. 의 부분집합 상의 어떠 -벡터들의 생성(Span)이거나 선형시스템의 해가 되거나에 상관없이 아래의 세 가지 성질을 가진다.

  • Property : 는 영벡터를 포함한다.

  • Property : 모든 벡터 에 대해, 만약 를 포함하면 는 모든 스칼라 에 대해 를 포함하고 ''스칼라-벡터 곱에대해 닫혀있다''라고 한다.

  • Property : 모든 벡터들의 쌍 에 대해, 만약 를 포함하면 를 포함하고 는 벡터 덧셈에 대해 닫혀 있다.

이라고 하면, 는 다음을 만족한다.

이제, 는 해집합 이라고 하면, 는 다음을 만족한다.


4.4.2 벡터공간의 정의와 예

  • Definition : 벡터들의 집합 Property 을 만족하면 벡터공간 이라고 한다.

    • 따라서, 어떤 벡터들의 생성(Span)은 벡터공간이다.

    • 또한, 동차 선형시스템(homogeneous linear system)의 해집합은 벡터공간이다.

    • 원점을 포함하는 (직선 or 평면) flat은 어떤 벡터들의 생성(Span) 또는 선형시스템의 해집합으로 표현할 수 있으므로 벡터공간이다.

    • 임의의 필드 와 임의의 유한 정의역 에 대해, 상의 -벡터들의 집합 는 벡터공간이다. <br /> 는 영벡터를 포함하고 스칼라-벡터 곱과 벡터 덧셈에 대해 닫혀있다. 예를 들어, 는 벡터공간이다.

    • 임의의 필드 와 임의의 유한 정의역 에 대해, 영벡터로 구성되는 한 원소 집합 는 벡터공간이다.


4.4.3 부분공간(Subspace)

  • Definition : 만약 는 벡터공간이고 의 부분집합이면, 부분공간 이라고 한다.

Example 4.4.11 : 집합 의 부분공간이고, 의 부분공간이다.

Example 4.4.12 : 집합 에 포함되지 않기 때문에 의 부분공간이 아니다.

Example 4.4.13 : 에 포함된 벡터공간은 무엇인가?

  • 가장 작은 벡터공간은 이다.

  • 가장 큰 벡터공간은 이다.

  • 임의의 영이 아닌 벡터 에 대해, 원점과 를 지나는 직선 는 벡터공간이다.

<br />

가 임의의 다른 부분공간을 가질까? 의 부분공간이라 하자. 는 영(0)이 아닌 어떤 벡터 를 가지고 또한 에 속하지 않는 어떤 다른 벡터 를 가진다고 가정하고, 이 경우 임을 증명해보자.

  • Lemma 4.4.14 :

    • Proof <br /> 이므로 또는 이거나 둘다 이 아니다. <br />Case 1 : 일 경우, 라고 하면, 내에 있지 않으므로, 이어야 한다. 앞의 가정에서 이라고 했으므로, 이다. 따라서, 어야 한다. 를 대입하면 이다. 따라서, <br /> Case 2 : 일 경우, 라고 하면, 위의 Case 1과 마찬가지로 이고, 이다.

    • 이제, 임을 증명 하기 위해 의 모든 벡터는 내의 두 벡터 즉, 의 선형결합으로 나타낼 수 있음을 보여준다. <br /> 내 임의의 벡터라고 하고, 라고 하면, 아래와 같이 쓸 수 있다. < 의 임의의 원소이므로, 이다. 를 포함하고 스칼라-벡터 곱셈과 벡터 덧셈에 대해 닫혀 있으므로, 임을 증명한다.


4.4.4 *추상(Abstract) 벡터공간 - 생략


4.5 아핀(Affine) 공간

4.5.1 원점을 지나지 않는 flat

3장 벡터 - 3.6.1 원점을 지나지 않는 선분과 직선에서 선분을 평행이동하여, 즉, 과 같은 함수를 적용하여 얻을 수 있다는 것을 알아보았다. 이제 이것을 벡터공간 로 생각해보면 아래와 같이 표현할 수 있다.

따라서, 위의 집합은 를 지나는 (원점을 지나지 않는) 직선이다.

  
X = np.linspace(-4, 10, num=50, endpoint=True)
# 원점을 지나는 직선
Y = (2/3) * X

# [X+0.5, y+1] 평행이동
Y2 = (2/3) * (X+0.5) + (2/3)

fig, ax = plt.subplots()

for spine in ['left', 'bottom']:
   ax.spines[spine].set_position('zero')

# Hide the other spines...  
for spine in ['right', 'top']:
   ax.spines[spine].set_color('none')


ax.plot(X, Y)
ax.plot(X, Y2)
ax.annotate('translation', xy=(3.5, 3), xycoords='data',
           xytext=(0.8, 0.95), textcoords='axes fraction',
           arrowprops=dict(facecolor='black', shrink=0.001),
           horizontalalignment='right', verticalalignment='top')
ax.axis([-4, 10, -4, 10])
ax.grid()

plt.show()


이제는 평면에 대해 적용해 보자.

Example 4.5.1을 지나는 평면이 있다. 이평면을 벡터공간의 평행이동으로 어떻게 나타낼 수 있을까? 라 하고, 는 벡터공간 라고 하자. 그러면 평면의 평행이동은 로 나타낼 수 있다. 따라서, 평면 는 점 을 포함하는 평면이다. matplotlib모듈을 이용하여 나타내면 아래와 같다.

  
xx, yy = np.meshgrid(range(10), range(10))

zz = 1.4*xx + 1.0*yy  ## 1.4 X + y - z = 0
zz2 = 1.4*xx + 1.0*yy + 3  # 1.4x + y - z + 3 = 0 즉, z축으로 +3만큼 평행이동

ax = plt.subplot(projection='3d')
ax.plot_surface(xx, yy, zz, alpha=.5, linewidth=0, zorder=-1, color='orange')
ax.plot_surface(xx, yy, zz2, alpha=.5, linewidth=0, zorder=-1)
ax.scatter([1, 0, 0], [0, 1, 0], [4.4, 4, 3], color='red')
plt.show()


4.5.2 아핀결합(Affine combinations)

3.6.4 에서 점 를 지나는 직선을 나타내는 방법을 살펴보았다.

  • Definition : 선형결합 에서 계수들의 합 즉, 이면 아핀결합(Affine combination)이라고 한다.

Example 4.5.4 : Example 4.5.1에서 을 지나는 평면을 다음과 같이 표현했다.

여기서, 이다. 에 있는 벡터들은 아래의 선형결합으로 나타낼 수 있다.

따라서, 내의 벡터들은 다음의 선형결합으로 표현할 수 있다.

라고 하면

내 벡터들은 의 모든 아핀결합들로 구성된 집합이다.


  • Definition : 어떤 벡터 컬렉션의 모든 아핀결합으로 구성된 집합은 그 컬렉션의 Affine hull이라고 한다.

Example 4.5.5 : 의 Affine hull은 무엇인가? 3.6.4 에서 보았듯이,

즉, 을 지나는 직선이다.

Example 4.5.6 :의 Affine hull은 무엇인가?

아핀결합으로 나타내면 이다. 계수는 하나 밖에 없으므로 이다. 따라서, Affine hull 은 하나의 벡터 으로 구성된다.

  • Proposition

    • -벡터 컬렉션의 Affine hull은 한 점(컬렉션 내의 하나의 벡터), 즉 -차원 객체이다.

    • -벡터 컬렉션의 Affine hull은 직선(두 벡터를 지나는 직선), 즉 -차원 객체이다.

    • -벡터 컬렉션의 Affine hull은 평면(세 벡터를 지나는 평면), 즉 -차원 객체이다.

Example 4.5.7 : 의 Affine hull은 무엇인가? <br />

위의 Proposition 대로라면 3-벡터 이므로 Affine hull 은 평면이라고 생각하겠지만, 실제로 코드를 작성해 보면 직선이다. 그 이유는 위의 세 벡터들이 한 직선 상에 놓여있기 때문이다.

  
X = np.linspace(-4, 10, num=50, endpoint=True)

Y = X + 1

fig, ax = plt.subplots()

for spine in ['left', 'bottom']:
   ax.spines[spine].set_position('zero')

# Hide the other spines...  
for spine in ['right', 'top']:
   ax.spines[spine].set_color('none')


ax.plot(X, Y)
ax.scatter([2, 3, 4], [3, 4, 5])
ax.annotate('(2, 3)', xy=(2, 3))
ax.annotate('(3, 4)', xy=(3, 4))
ax.annotate('(4, 5)', xy=(4, 5))
ax.axis([-4, 10, -4, 10])
ax.grid()

plt.show()



4.5.3 아핀공간 (Affine Space)

  • Definition : 아핀공간 은 벡터공간을 평행이동한 결과이다. 즉, 집합 는 다음을 만족하는 벡터 와 벡터공간 가 있으면 아핀공간이다. 즉, 이다.

  • Lemma 4.5.10 : 임의의 벡터 에 대해 다음이 성립한다.즉, 의 Affine hull은 의 생성(Span)에 있는 각 벡터에 더함으로써 얻어지는 집합과 동일하다.

위의 내용에서 아핀공간을 아래의 두 가지 방법으로 표현할 수 있다는 것을 알 수 있다.

  • , 여기서 는 어떤 벡터들의 생성 즉, 벡터공간

  • 어떤 벡터들의 Affine hull

4.5.4 아핀공간을 선형시스템의 해집합으로 표현하기

4.3.2 에서 원점을 포함하는 flat이 동차 선형시스템(homogeneous linear system)으로 표현할 수 있는 예들을 보았다. 이번에는 원점을 포함하지 않는 flat을 비동차 선형시스템의 해집합으로 표현해보자.

Example 4.5.12 : Example 4.5.1 에서 보았듯이, 점 을 지나는 평면은 이 점들의 Affine hull 이다. 이 평면은 또한 방정식 의 해집합이며 다음과 같이 나타낼 수 있다. ( 에 대입하여 연립방정식을 풀면 된다.)

아래는 위의 예제에 대한 그래프를 matplotlib을 이용해 나타냈다.

  
xx, yy = np.meshgrid(range(10), range(10))

zz = 1.4*xx + 1.0*yy + 3  # 1.4x + y + -z + 3 = 0 즉, z축으로 +3만큼 평행이동

ax = plt.subplot(projection='3d')
ax.plot_surface(xx, yy, zz2, alpha=.5, linewidth=0, zorder=-1)
ax.scatter([1, 0, 0], [0, 1, 0], [4.4, 4, 3], color='red')
plt.show()


4.5.5 두 가지 표현법 - 다시 보기

4.3.3에서 원점을 포함하는 flat들에 대해 살펴 보았 듯이 두 가지 방법으로 표현할 수 있다. <br />한 가지 방법은 Span으로 표현하는 방법이 있고, 다른 하나는 해집합을 이용해 표현하는 방법이 있다.

  
xx, yy = np.meshgrid(range(30), range(30))

z1 = -4*xx + yy
z2 = -1*yy
ax = plt.subplot(projection='3d')
ax.plot([0, 4, 40], [0, -1, -10], [0, 1, 10])
ax.plot([0, 0, 0],[0, 1, 30],[0, 1, 30])
ax.plot([0 ,1, 10, 15],[0, 2, 20, 30],[0, -2, -20, -30], color='red')
ax.plot_surface(xx, yy, z1, color='cyan', alpha=.5, linewidth=0, zorder=-1)
ax.plot_surface(xx, yy, z2, color='yellow', alpha=.7, linewidth=0, zorder=1)
plt.show()


4.6 동차 혹은 비동차 선형시스템

4.4 에서 동차 선형시스템의 해집합이 벡터공간인 것을 알아 보았다.

4.6.1 일반적인 선형시스템에 대응하는 동차 선형시스템

  • Lemma : 을 선형방정식들의 시스템의 해라고 하면

    그리고, 또 다른 벡터 가 해가 될 필요충분조건은 이 대응하는 동차 방정식들의 시스템에 대한 해가 되는 것이다.

    • Proof

      에 대해, 이고, 이다. 따라서, 이고

동차 선형시스템에 대한 해집합을 벡터공간 라고 하면 Lemma 를 아래와 같이 나타낼 수 있다.

  • 가 original 선형시스템에 대한 해가 될 필요충분조건은 내에 있는 것이다.

이라 하면 () 다음과 같이 쓸 수 있다.

  • 가 original 선형시스템에 대한 해가 될 필요충분조건은 내에 있어야 한다.

즉,

우변의 집합은 아핀공간(Affine Space) 이다.

  • Theorem : 임의의 선형시스템에 대해, 해집합은 공집합이거나 또는 아핀공간이다.

4.6.2 해의 개수 - 다시보기

Corollary : 선형 시스템의 해가 유일(unique)하게 될 필요충분조건은 동차 선형시스템에 대한 유일한 해가 영벡터일 때 이다.

Comments