강의
선형시스템
아래와 같은 1차 방정식들을 선형시스템이라고 한다.
\[3x = 6\] \[x + y = 5\] \[2x + y = 3\]내가 이해한게 맞다면, 그래프 상에 표현했을 때 직선으로 표현되는 수식들을 선형시스템이라고 하는 것 같다.
선형대수의 목표
어떤 선형시스템의 문제라도 정형적인 방법으로 표현하고 해결하는 방법을 배우는 것이다.
예를 들어,
\[3x + y + z = 4 ... E_1\] \[x - 2y - z = 1 ... E_2\] \[x + y + z = 2 ... E_3\]이 방정식들은 각각 선형 방정식(Linear Equations)이라고 한다.
(식의 개수) x (미지수의 개수) linear system 으로 표현한다.
예시의 수식 경우, 3 x 3 linear system 이다.
\[3x + y + z = 4\] \[x - 2y - z = 1\]위의 수식은 2 x 3 linear system 이다.
그렇다면 수식이 선형방정식인지는 어떻게 판별할까?
선형방정식은 미지수의 승수가 1승으로만 구성되어 있다.
다음 수식의 경우에는 미지수들이 모두 1승으로 이루어져 있어 선형방정식이라고 착각할 수 있다.
\[xy + z = 3\]이 경우는 각 미지수들의 승수는 1이지만 xy가 곱해지며 2승이기 때문에 선형 방정식이 아니다.
선형시스템의 대수적 표현
위에서 배운 m x n 선형시스템을 \(Ax = b\) 형식의 행렬로 표현한다.
- m 은 선형방정식의 개수이다.
- n 은 미지수의 개수이다.
- A 는 m x n 행렬이다.
- \(x\) 는 n-벡터이다.
- b 는 m-벡터이다.
위의 수식을 아래의 행렬 형식으로 나타낼 수 있다.
\[\left[\begin{array}{rrr} 3&1&1\\ 1&-2&-1\\ 1&1&1 \end{array}\right] \left[\begin{array}{rrr} x\\ y\\ z \end{array}\right] = \left[\begin{array}{rrr} 4\\ 1\\ 2 \end{array}\right]\]가우스 소거법(Gauss elimination)
전방 소거법(Forward Elimination)
\(Ax = b\) 꼴에서 A의 형태를 위에서 아래로, 왼쪽에서 오른쪽으로 소거해나가며
아래와 같은 역삼각형 형태로 만들기
\(\left[\begin{array}{rrr} 1&2&1\\ 0&1&3\\ 0&0&1 \end{array}\right] \left[\begin{array}{rrr} x_1\\ x_2\\ x_3 \end{array}\right] = \left[\begin{array}{rrr} 1\\ 5\\ 1 \end{array}\right]\)후방 대입법(Back-substitution)
아래 식부터 대입을 통해 해찾기
Numpy를 이용한 행렬 연산
파이썬에서 numpy를 이용하여 행렬의 연산을 쉽게 진행할 수 있다.
행렬 연산에 사용되는 기본적인 문법은 다음과 같다.
A 행렬의 역행렬 구하기: A_inv = np.linalg.inv(A)
행렬간 연산하기(A_inv x b): x = A_inv @ b
1
2
3
4
5
6
7
8
9
10
11
import numpy as np
A = np.array([[3,1,1],[1,-2,-1],[1,1,1]])
b = np.array([4,1,2])
A_inv = np.linalg.inv(A)
x = A_inv @ b
bb = A @ x
# 결과 검증
if np.linalg.norm(b-bb) < 1e-3:
print("Ok")
else:
print("Wrong")