[Programmers] 28. 인공지능 수학 기초 (1): 선형대수 (Linear Algebra) (1): 선형 시스템 (Linear System)기초

illstandtall·2021년 5월 1일
0

Programmers dev course

목록 보기
28/34
post-thumbnail

오류에 대한 지적이나 질문, 토의 환영합니다. 자유롭게 댓글 남겨주세요!.!


선형대수 (Linear Algebra) (1): 선형시스템 기초

선형시스템 (Linear System)

선형시스템 복습: 초/중등 교과과정

  • 일차 방정식

    ex) 3x=63x = 6

  • 연립 일차 방정식 -> 가우스 소거법
    ex1) 미지수가 2개인 연립 일차 방정식

    3x+y=23x + y = 2
    x2y=3x - 2y = 3

  • ex2) 미지수가 3개인 연립 일차 방정식

    3x+y+z=43x + y + z = 4
    x2yz=1x - 2y - z = 1
    x+y+z=2x + y + z = 2

선형대수(Linear Algebra)의 목표

  • 어떠한 연립 일차방정식(선형 시스템: Linear System) 문제라도
    정형적인 방법으로 표현하고 해결하는 방법을 배우는 것이 목표입니다.

    Ax=bAx = b
    <=> A1Ax=A1bA^{-1} Ax = A^{-1} b
    <=> x=A1bx = A^{-1} b

선형 시스템의 구성 요소

  • 3개의 선형방정식, 3개의 미지수으로 구성된 연립일차방정식을 3(식) X 3(미지수) 선형시스템이라고 합니다.
    • 3x+y+z=43x + y + z = 4 ~ E1E1
    • x2yz=1x - 2y - z = 1 ~ E2E2
    • x+y+z=2x + y + z = 2 ~ E3E3
      => 이 방정식들을 각각 선형방정식 (Linear Equation) 이라고 합니다.
      위 식을 모두 만족하는 미지수(unknown, variable) x, y, z를 구하는 것이 목표입니다.

선형시스템: Ax=bAx = b, 연립일차방정식의 대수적 표현

선형시스템을 Ax=bAx = b 로 표현하기

  1. 미지수를 열벡터로 xx로 표현한다.
  2. 선형시스템의 선형방정식에 대해 다음을 수행한다.
    2.1 계수를 모아 AA의 행벡터로 표현한다.
    2.2 상수를 모아 bb에 표현한다.
  • Ex 1)Ex\ 1)

    3x1+x2=43x_{1} + x_{2} = 4
    x12x2=1x_{1} - 2x_{2} = 1

    1. 미지수를 열벡터로 표현한다. x=[x1x2]x = \left[\begin{matrix}x_{1} \\x_{2} \\\end{matrix}\right]
      2.1 계수를 모아 A의 행벡터로 표현한다. A=[3    112]A = \left[\begin{matrix}3\ \ \ \ 1 \\1 -2 \end{matrix}\right]
      2.2 상수를 모아 b에 표현한다. b=[41]b = \left[\begin{matrix}4 \\1 \\\end{matrix}\right]
      최종: Ax=bAx = b <=> [3    112][x1x2]=[41]\left[\begin{matrix}3\ \ \ \ 1 \\1 -2 \end{matrix}\right]\left[\begin{matrix}x_{1} \\x_{2} \\\end{matrix}\right] = \left[\begin{matrix}4 \\1 \\\end{matrix}\right]
  • Ex 2)Ex\ 2)

    x1+2x2x3=3x1 + 2x2 - x3 = 3
    x2+2x3x4=2x2 + 2x3 - x4 = 2
    x3+2x4x5=5x3 + 2x4 - x5 = 5

    • x=[x1x2x3x4x5]x = \left[\begin{matrix}x_{1} \\x_{2} \\x_{3} \\x_{4} \\x_{5} \\\end{matrix}\right]
    • A=[1   2 3   0   0 0   1   2 1   0 0   0   1    2 1 ]A = \left[\begin{matrix}1\ \ \ 2\ -3\ \ \ 0\ \ \ 0\ \\0\ \ \ 1\ \ \ 2\ -1\ \ \ 0\ \\0\ \ \ 0\ \ \ 1\ \ \ \ 2\ -1\ \end{matrix}\right]
    • b=[325]b = \left[\begin{matrix}3 \\2 \\ 5\end{matrix}\right]
      => Ax=bAx = b <=> [1   2 3   0   0 0   1   2 1   0 0   0   1    2 1 ][x1x2x3x4x5]=[325]\left[\begin{matrix}1\ \ \ 2\ -3\ \ \ 0\ \ \ 0\ \\0\ \ \ 1\ \ \ 2\ -1\ \ \ 0\ \\0\ \ \ 0\ \ \ 1\ \ \ \ 2\ -1\ \end{matrix}\right] \left[\begin{matrix}x_{1} \\x_{2} \\x_{3} \\x_{4} \\x_{5} \\\end{matrix}\right] = \left[\begin{matrix}3 \\2 \\ 5\end{matrix}\right]

정리

  • m×nm \times n의 선형시스템 Ax=bAx = b

  • 식은 행이고, 행은 식이다. (선형방정식 - row)

  • mm은 선형방정식의 개수이다

  • nn은 미지수의 개수이다.

  • AAm×nm \times n 행렬이다.

  • xxnn-벡터이다

  • bbmm-벡터이다.

실습: 행렬과 벡터의 코딩 및 연산

행렬 코딩

import numpy as np

A = np.array([[3, 1, 1], [1, -2, -1], [1, 1, 1]])

print(A)
print(np.shape(A))
[[ 3  1  1]
 [ 1 -2 -1]
 [ 1  1  1]]
(3, 3)

벡터 코딩

b = np.array([4, 1, 2])

print(b)
print(np.shape(b))
[4 1 2]
(3,)

역행렬 구하기

A_inv = np.linalg.inv(A)

print(A_inv)
print(np.shape(A_inv))
[[ 5.00000000e-01 -7.40148683e-17 -5.00000000e-01]
 [ 1.00000000e+00 -1.00000000e+00 -2.00000000e+00]
 [-1.50000000e+00  1.00000000e+00  3.50000000e+00]]
(3, 3)

역행렬을 이용한 선형시스템 Ax=bAx = b의 해 구하기

# x = np.matmul(A_inv, b)
x = A_inv @ b

print(x)
print(np.shape(x))
[ 1. -1.  2.]
(3,)

결과 검출

# bb = np.matmul(A, x)
bb = A @ x

print(np.shape(bb))
print(bb)

if np.linalg.norm(b - bb) < 1e-3: # norm: 크기, 1e-3 = 10^-3
    print('Ok')
else:
    print('something wrong') 
(3,)
[4. 1. 2.]
Ok

이 글은 프로그래머스 스쿨 인공지능 데브코스 과정에서 공부한 내용을 바탕으로 정리한 글입니다.

profile
주니어

0개의 댓글