본문 바로가기

선형대수학

[Lecture 1] MIT Linear Algebra - Gilbert Strang

MIT에서 아주 유명한 교수님이신 Gilbert strang 교수님의 선형대수학을 다시 공부하고 있다.

 

먼저 개념 세개가 등장한다.

Row picture

☆Column picture

Matrix picture

 

 

우리가 중, 고등학교때 풀었던 연립방정식을 선형대수로 다시 나타내면

2x - y = 0

-x + 2y = 3

 

이 될 것이고, 이때 2x2 행렬이 matrix, 나머지는 vector들이다.

이를 Row Picture로 나타내면 다음과 같다.

그림에서 알 수 있듯이 row vector는 우리가 흔히  연립방정식을 생각하는 것 처럼, row를 하나의 식으로 생각하여 m*n 의 행렬에서 m개의 식의 교점을 찾는다고 해석하면 된다.

즉, 위의 A matrix에서의 solution인 (1,2)가 위의 figure1에서의 교점이 된다.

 

 

Column picture 관점으로 보면 다음과 같다.

 

이름에서 알 수 있듯이, column picture는 해당 matrix를 column 기준으로 해석한다.

column기준으로는 matrixA 는 [2; -1], [-1; 2]라는 columns 이고 vectorB [0; 3]이라는 column으로 해석 가능하다.

즉, 여기서의 solution x,y는 matrix A의 두 column에 어떤 계수 x,y를 곱해야지 vector B가 나오냐는 뜻이다.

따라서 solution [1,2]는 1 * [2; -1] + 2  * [-1; 2] = [0; 3] 이라는 column 식을 완성해준다.

 

 

이제 3차원 형식을 알아보자.

2차원 형식에서는 선과 2-dim 벡터로 matrix를 설명할 수 있었다.

3차원에서는 면과 3-dim 벡터가 matrix를 설명한다.

 

먼저 Row Picture를 보자.

앞서 2d row picture에서 2개의 선이 우리에게 점을 주었던 것 처럼, 3d row picture에서 2개의 면은 우리에게 선을 준다.

또, 3개의 면은 우리에게 점을 준다. 그리고 그것이 우리가 바라는 solution일 것이다. (물론 점을 항상 주지는 않는다.)

마치 정육면체의 세개의 면이 하나의 꼭짓점을 만드는 것처럼 말이다.

3차원 matrix를 Column space 관점으로 살펴보자.

matrix는  3차원 공간에서 3개의 벡터로 나타날 것이다.

2차원에서와 마찬가지로 3개의 벡터들의 조합으로 b 벡터를 나타날 수 있도록 하는 조합, 즉 x,y,z가 matrix의 솔루션이다.

 

 

그렇다면 b에대해 항상 Ax = b를 풀 수 있을까?

다시 말하면, A가 3개의 Column, 즉 3개의 벡터일 때 그 조합의 계수인 x,y,z만 다르게 한다고 해서 모든 b인 3차원을 전부 채울 수 있을까?

정답은 "아니다" 다.

앞선 예제 에서는 그것이 가능했다. 하지만 언제나 bad example은 있는 법

 

예를들어, 3차원에서 3개의 벡터가 모두 xy 평면에만 있는 상황을 생각해보자.

아무리 x,y,z에 대한 조합을 잘 설계한다 하더라도 3개의 벡터가 모두 z 성분이 0 (즉 xy 성분만 있음) 이라면 도저히 z성분을 표현하지 못할 것이다.

이런 경우라면 당연히 A matrix가 모든 b를 표현할 수 없을 것이다.

이같은 경우를 singular case라고 한다.

singular matrix는 inverse가 불가능, 즉 invertible하며 다른 말로는 "solution이 없다."

 

사용한 코드

import matplotlib.pyplot as plt
import numpy as np

# Ax= B 에서 x를 계산해준다.
A = np.array([[2,-1],[-1,2]])
B = np.array([0,3])
x = np.linalg.solve(A,B)
print(x)

# 2d Ax=b를 row picture로 해석
x = [x for x in range(-5,5)]
y1 = [2*y for y in range(-5,5)]
y2 = [y/2 + 3/2 for y in range(-5,5)]
plt.plot(x, y1, x, y2, 'r-')
plt.show()

# 2d Ax=b를 column picture로 해석
A = np.array([[2,-1],[-1,2],[0,3]])
origin = [0], [0]
plt.quiver(*origin, A[:,0], A[:,1], color=['r','b','g'], angles ='xy', scale_units='xy', scale=1)
plt.xlim(-5,5)
plt.ylim(-5,5)
plt.show()