본문 바로가기
  • 공부, 여행 리뷰해요~~!!
공부/C++

선형 대수 - 8. 벡터의 정의 및 연산

by 하나리나 2023. 9. 26.
반응형

이제까지는 행렬 및 행렬 연산에 대해서 공부했습니다.

이제는 "벡터"에 대해서 배워보도록 하겠습니다.

 

벡터, Vector

 - Vector를 이제부터는 행렬의 형태로 표현하도록 하겠습니다.

 ※ Vector의 정의

    - 방향(Direction)을 가진다.

    - 크기(Magnitude) 혹은 길이(Length)를 가진다.

 

예를 들어, 다음과 같이 벡터 a, 즉, [3,4]가 있다고 생각해 보겠습니다.

위 식은 열벡터(Column vector)로 표현한 것이지만, a = [3 4]와 같이 행벡터(Row vector)로도 표현할 수 있습니다.

이 벡터는 원점에서 [3,4]를 향하는 방향과 크기가 있습니다. 아래 그림과 같이 표현할 수 있겠습니다.

 

커다란 행렬을 통하여 열벡터(혹은 행벡터의 모음으로도 나타낼 수 있습니다. 

가령, 

K는 Column vectors의 집합이라면, 각 벡터는 두 개의 원소를 가집니다. (2차원 공간)

 

K가 만약, 행벡터의 집합이라면, K는 3차원 공간입니다.

따라서, K1 = [1, 0, 3], K2 = [-2, 1, 4]입니다.

 

벡터 모음과 관련된 부분은 크게 중요한 부분은 아니니 이해만 빠르게 하시고 넘어가셔도 좋을 것 같습니다.

 

벡터의 연산, Vector Operation

벡터 연산에서 다룰 내용은 

 '더하기, 빼기, 곱하기' 입니다.

 

1) 더하기 Addition

벡터 덧셈을 그래프로 표현해 보겠습니다.

먼저, a(-1,2) 끝 점에서 b의 크기와 방향인 (3,4)만큼 이동한것이 a+b의 끝점이 되겠습니다.

그래프로 나타내면 아래와 같습니다.

2) 빼기 Subtraction

빼기는 어떨까요?

a는 그대로 입니다. b의 경우 -b를 취합니다. 그리고, a와 -b를 더한 것과 같이 그래프의 끝을 이어주면 아래와 같이 나타낼 수 있습니다.

 

직접 그려보시면 아주 큰 도움이 되실 겁니다.

 

마지막으로,

3) 곱섹, Multiply

행렬의 곱셈에서는 내적(Dot Product)를 다루도록 하겠습니다.

결과적으로, 행렬 내적의 결과는 Scalar입니다.

위 연산은 행렬로 표현하면 아래와 같이 표현할 수 있습니다.

물론, b를 행벡터, a를 열벡터로 해도 결과는 같습니다.

 

 

추가.

이번 시간에는 3가지 그래프가 나왔죠. 파이썬 코드로 어떻게 구현했는지 공유 드리며 글을 마치도록 하겠습니다. 감사합니다.

 

1. Vector Graph

import matplotlib.pyplot as plt

# 원점에서 (3,4)를 향하는 벡터의 시작점과 끝점 좌표
start = (0, 0)
end = (3, 4)

# 벡터를 표현하기 위한 X, Y 좌표
X = [start[0], end[0]]
Y = [start[1], end[1]]

# 좌표 평면 그리기
fig, ax = plt.subplots(figsize=(6, 6))

# x축과 y축 그리기
ax.axhline(0, color='black',linewidth=0.5)
ax.axvline(0, color='black',linewidth=0.5)

# 원점에서 (3,4)를 향하는 벡터 그리기
ax.quiver(*start, *end, angles='xy', scale_units='xy', scale=1, color='b')

# X, Y 축 레이블 추가
ax.set_xlabel('X')
ax.set_ylabel('Y')

# 그래프 범위 설정
ax.set_xlim(-1, 4)
ax.set_ylim(-1, 5)

plt.grid()  # 격자 표시 
plt.title('Vector a')  # 그래프 제목 
plt.show()

2. 벡터의 덧셈

import matplotlib.pyplot as plt
import numpy as np

# 벡터 a와 벡터 b의 값
a = np.array([-1, 2])
b = np.array([3, 4])

# 벡터 a와 벡터 b의 시작점은 모두 원점 (0, 0)
start = np.array([0, 0])

# 벡터 a와 벡터 b의 끝점 계산
end_a = start + a
end_b = start + b

# 벡터 a와 벡터 b를 좌표 평면에 그리기
plt.figure(figsize=(6, 6))

# x축과 y축 그리기
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)

# 벡터 a와 벡터 b 그리기
plt.quiver(*start, *a, angles='xy', scale_units='xy', scale=1, color='k', label='vector a')
plt.quiver(*start, *b, angles='xy', scale_units='xy', scale=1, color='k', label='vector b')

# 벡터 a의 끝점에서 시작하고 크기가 벡터 b와 같은 벡터 그리기
plt.quiver(*end_a, *b, angles='xy', scale_units='xy', scale=1, color='g', label='vector b')

plt.quiver(*start, *c, angles='xy', scale_units='xy', scale=1, color='r', label='a+b')



# 그래프 범위 설정
plt.xlim(-2, 4)
plt.ylim(-1, 6)

# 벡터 레이블 추가
plt.xlabel('X')
plt.ylabel('Y')

# 벡터 레이블 표시
plt.legend()

# 그래프 보여주기
plt.grid()
plt.title('Vector addition')
plt.show()

 

3. 벡터의 뺄셈

import matplotlib.pyplot as plt
import numpy as np

# 벡터 a와 벡터 b의 값
a = np.array([-1, 2])
b = np.array([3, 4])

# 벡터 a, 벡터 b, -b, a-b의 값 계산
neg_b = -b
a_minus_b = a - b

# 벡터 a, 벡터 b, -b, a-b의 시작점은 모두 원점 (0, 0)
start = np.array([0, 0])

# 벡터 a, 벡터 b, -b, a-b의 끝점 계산
end_a = start + a
end_b = start + b
end_neg_b = start + neg_b
end_a_minus_b = start + a_minus_b

# 벡터들을 좌표 평면에 그리기
plt.figure(figsize=(8, 8))

# x축과 y축 그리기
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)

# 벡터 a, 벡터 b, -b, a-b 그리기
plt.quiver(*start, *a, angles='xy', scale_units='xy', scale=1, color='k', label='a')
plt.quiver(*start, *b, angles='xy', scale_units='xy', scale=1, color='k', label='b')
plt.quiver(*start, *neg_b, angles='xy', scale_units='xy', scale=1, color='r', label='-b')
plt.quiver(*start, *a_minus_b, angles='xy', scale_units='xy', scale=1, color='b', label='a-b [-4, -2]')

# 그래프 범위 설정
plt.xlim(-5, 5)
plt.ylim(-5, 5)

# 벡터 레이블 추가
plt.xlabel('X')
plt.ylabel('Y')

# 벡터 레이블 표시
plt.legend()

# 그래프 보여주기
plt.grid()
plt.title('Vector Subtraction')
plt.show()
반응형