Posts [프로그래머스 인공지능스쿨] Week2-1 인공지능 수학 : 선형대수
Post
Cancel

[프로그래머스 인공지능스쿨] Week2-1 인공지능 수학 : 선형대수

강의


선형시스템

아래와 같은 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 은 미지수의 개수이다.
  • Am x n 행렬이다.
  • \(x\) 는 n-벡터이다.
  • b 는 m-벡터이다.
\[3x + y + z = 4\] \[x - 2y - z = 1\] \[x + y + z = 2\]

위의 수식을 아래의 행렬 형식으로 나타낼 수 있다.

\[\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")
This post is licensed under CC BY 4.0 by the author.