개발을 하는 과정에서 코드를 작성하게 되고 코드를 작성하는 툴 IDE를 사용하게 된다. Terminal, Eclipse, Visual studio등을 사용할때는 코드 외에는 주석 처리를 하게 된다. 하지만 주석이 너무 길어지면 코드의 흐름을 따라기가 어려워진다.
인공지능은 수식이 필요하기 때문에 맥락을 덧붙여주어야 한다.
Jupyter Notebook은 코드의 작성과 공유를 위한 개발도구이다.
Jupyter Notebook의 명령어
ESC로 명령모드 Enter로 입력모드를 전환
Y로 Code Cell, M으로 Markdown Cell
명령모드에서 A로 위에 Cell추가, B로 아래 Cell추가
명령모드에서 dd로 핸재 Cell 삭제
ctrl + Enter, shift + Enter로 Cell을 실행
Makrdown : 일반 텍스트로 서식이 있는 문서를 작성하는 방법
# str : header
*str* or _str _ : italic
**str** or __str__ : bold
~str~ : strikethrough
* str or - str : unordered list
1. str : ordered list
python의 list는 연산이 느리기 때문에 연산에 적합한 라이브러리인 numpy를 사용한다.
import numpy as np
#numpy의 연산 속도를 비교해보자.
#List의 경우 302us 1000 loops each
L = range(1000)
%timeit [i**2 for i in L]
#numpy.array의 경우 895ns 1000000 loops each
N = np.arange(1000)
%timeit N ** 2
#행렬식으로 표현이 가능하다.
arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
#array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
arr_2d.shape
#(3,3)
어떤 연립일차방정식, 즉 어떤 선형시스템linear system 문제라도 정형적인 방법으로 표현하고 해결하는 방법을 배우는 것이다.
선형방정식 linear equation
3x + y + z = 4
x - 2y - z = 1
x + y + z = 2
이 방정식들을 각각 선형방정식이라고 한다. 선형방정식에서 linear는 선의 형태라는 뜻이다. 평면과 같은 왜곡되지 않은 공간에서 올곧게 그려지는 식을 의미한다.
미지수 Unknowns
x, y, z를 각각 미지수 unknown or variable이라고 한다.
그리고 위와 같이 3개의 linear equations와 3개의 uknowns로 구성된 연립일차방정식을 3 x 3 linear system이라고 한다.
선형방정식의 예시
2 x 3 linear system
3x + y + z = 4
x - 2y - z = 1
1 x 2 lenear system
2x + y = 3
3 x 2 linear sytem
2x + y = 2
x -2y = 3
2x -4y = 6
미지수의 승수가 1승으로만 구성되어 있다면 그 방정식은 직선이나 평평한 형태로 그려진다.
sinx + y = 2
삼각함수의 형태는 곡선이 생기므로 반드시 비선형방정식이 된다.
3x + y^3 = 2
y미지수가 3승이므로 곡선과 관련하는 비선형방정식이 된다.
xy + z = 3
위와 같은 방정식은 미지수끼리 곱해져 있기 때문에 2승이 존재한다고 생각해야 한다.
3x + y = 2
x - 2y = 3
2x - 4y = 6를 Ax = b꼴로 표현하면
A x = b
[3 1] [x] [2]
[1 -2] [y] = [3]
[2 -4] [6]
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('something wrong')
2.a = 0이면 특이하다.
ax = b의 해가 곧장 나오지 않는다.
a의 역수(inverse)가 존재하지 않는 경우, a가 특이(singular)하다고 한다.
해가 있으면 선형시스템이 consistent하다고 한다.(해가 있거나 여러개이다.)
해가 없으면 선형시스템이 inconsistent하다고 한다.(해가 없다.)
3.예시
해가 하나인 경우
x + 3y = 2
-2x +y = 3
해가 없는 경우(평행하는 두 직선)(A의 역행렬이 존재하지 않음)
x + 3y = 2
2x + 6y = 5
해가 여러개인 경우(동일한 두 직선)(A의 역행렬이 존재하지 않음)
x + 3y = 2
2x + 6y = 4
Gauss elimination은 임의의 m x n 선형 시스템의 해를 구하는 가장 대표적인 방법이다. Gauss elimination은 다음의 두 단계로 수행된다.
Forward elimination(전방소거법) : 주어진 선형 시스템을 아래로 갈수록 더 단순한 형태의 선형방정식을 가지도록 변형한다.
back-substitution(후방 대입법) : 아래에서부터 위로 미지수를 실제값으로 대체한다.
x + 2y +z = 1
y + 3z = 5
z = 1
후방 대입법
위의 예시에서 볼수 있듯이 전방 소거법으로 정리가 된 선형 방정식은 후방 대입법으로 손쉽게 그 해를 구할 수 있게 된다.
소거법에 쓰이는 Elementry Row Operations
Replacement : j번째 행을 기준행인 i번째 향을 m배 곱한뒤 빼서 업데이트한다.
Interchange : j번째 행과 i번째 행의 위치를 서로 바꾼다.
Scaling : j번째 행을 s배 스케일링 한다.
Gauss elimination에서 forward elimination의 가치는 다음과 같다.