3강: LU분해
행렬분해(matrix decomposition)
대표적인 행렬분해
LU 분해(LU Decomposition)
- QR 분해(QR Decomposition)
- 특이값 분해(SVD; Singular Value Decomposition)
LU 분해 → 가우스 소거법을 행렬의 형태로 나타낸 것
LU 분해
주어진 행렬을 아래의 형태를 가지는 두 행렬의 곱으로 나누는 행렬분해
A⎣⎢⎢⎡∗∗∗∗∗∗∗∗∗⎦⎥⎥⎤=L⎣⎢⎢⎡∗∗∗0∗∗00∗⎦⎥⎥⎤U⎣⎢⎢⎡∗00∗∗0∗∗∗⎦⎥⎥⎤
- L: lower triangular matrix(하삼각행렬)
- U: upper triangular matrix(상삼각행렬)
LU 분해
를 이용해 Ax = b 문제를 아래와 같이 나타내면
Ax=b⇒(LU)x=b⇒L(Ux)=b
⇒Ly=b,(단,y=Ux)
선형시스템을 다음과 같이 두 단계로 간단히 해결할 수 있다.
1) 전방대치법(Forward-substitution)
y 구하기
Ly=b
⎣⎢⎢⎡∗∗∗0∗∗00∗⎦⎥⎥⎤L⎣⎢⎢⎢⎡y1⋮yn⎦⎥⎥⎥⎤y=⎣⎢⎢⎡∗∗∗⎦⎥⎥⎤b
2) 후방대치법(Back-substitution)
이전에 구한 y 이용하여 x 구하기
Ux=y
⎣⎢⎢⎡∗00∗∗0∗∗∗⎦⎥⎥⎤U⎣⎢⎢⎢⎡x1⋮xn⎦⎥⎥⎥⎤x=⎣⎢⎢⎢⎡y1⋮yn⎦⎥⎥⎥⎤y
LU 분해
는 가우스 소거법의 전방소거법을 행렬로 코드화 한것!
A=PLU
-
L: 행렬 A를 전방소거하는데 쓰인 치환(replacement)과 스케일링(scailing)에 대한 EROs를 기록해 둔 행렬
-
P: 행렬 A를 전방소거하는데 쓰인 교환(interchange)에 대한 EROs를 기록해 둔 행렬 (옵션)
-
U: 행렬 A를 전방소거한 후 남은 상삼각행렬(upper triangular matrix)
EROs: elementary row operations; 기본행연산
LU 분해
의 활용
-
수치적 안정성
: 선형시스템 Ax=b의 해를 역행렬 A−1 를 이용해 직접 구하는 것 보다 PLU 분해를 이용하는 것이 좀 더 수치적으로 안정적
-
⚡b가 자주 업데이트 되는 경우
: 선형시스템 Ax=b에서 행렬 A는 고정되어 있고 b가 자주 변하는 문제가 종종 있음. 이런 경우, 행렬 A를 미리 PLU로 분해해두면 b가 업데이트될 때마다 선형시스템의 해 x를 실시간으로 구할 수 있음
4강: 행렬연산과 선형조합
행렬 표기법과 관련 용어
행렬(matrix): 직사각형 구조에 숫자들을 담아 놓은 구조이다. 각 숫자들은 행렬의 요소(Entry)라고 한다.
⎣⎢⎡3121−2−4⎦⎥⎤
백터(vector): 하나의 행 혹은 하나의 열을 가지는 행렬, 행벡터(row vector)와 열벡터(column vector)가 있다.
[2103][13]
스칼라(scalar): 행과 열 모두 하나인 1 x 1 행렬
[ 4 ]
📌주요 표기법
A=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡a11a21⋮ai1⋮am1a11a22⋮ai2⋮am2…………a1ja2j⋮aij⋮amj…………a1na2n⋮ain⋮amn⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
- 행렬 A의 각 (i,j) 요소는 aij로 나타낸다.
- 행렬 A를 간략히 표기할 때는 A=[ aij ] 로 나타낸다.
- 행렬 A의 크기가 중요할 경우는 A=[ aij ]m×n 로 나타낸다.
벡터(Vector)
벡터는 아래의 x와 같이 볼드체 소문자로 표기한다.
📌주요 표기법
x=⎣⎢⎢⎢⎢⎡x1x2⋮xn⎦⎥⎥⎥⎥⎤
- 벡터라고 하면 일반적으로 열벡터(column vector)를 말한다.
- n-벡터는 n개의 스칼라(scalar)로 구성된 벡터를 말한다.
전치행렬(Transpose Matrix)
m×n 행렬 A에 대한 전치행렬 AT는 A의 행을 열로, A의 열을 행으로 가지는 m×n 행렬이다.
즉, (AT)ij=(A)ji 를 만족한다.
예)
A=⎣⎢⎡135246⎦⎥⎤AT=[123456]
영행렬(Zero matrix)
행렬의 모든 요소가 0이면, 해당 행렬을 영행렬(Zero matrix)라 하고 O으로 표현한다.
A+O=O+A=A
영행렬은 숫자의 0과 같은 존재로 행렬의 합에 대한 항등원 역할을 한다.
행렬의 합: 행과 열의 개수가 모두 같은 두 행렬 A와 B에 대해서, 각 (i,j) 요소의 합으로 정의된다.
정방행렬(Square matrix)
행과 열의 개수가 모두 n인 정사각형(Square) 모양의 행렬을 n차 정방행렬(square matrix)이라 한다.
A=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡a11a21⋮ai1⋮am1a11a22⋮ai2⋮am2…………a1ja2j⋮aij⋮amj…………a1na2n⋮ain⋮amn⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
특히, aii(i=1,2,…,n)를 행렬 An의 주대각선(main diagonal)이라 한다.
항등행렬(Identity matrix)
주대각선이 1이고 나머지 요소는 모두 0인 n차 정방행렬을 항등행렬(Identity matrix)이라 한다.
In=⎣⎢⎢⎢⎢⎡10⋮001⋮0………00⋮1⎦⎥⎥⎥⎥⎤
항등행렬은 숫자의 1과 같은 존재로 행렬의 곱에 대한 항등원 역할을 한다.
⭐행렬의 곱
m×r 행렬 A=[aij] 와 r×n 행렬 B=[bij] 가 있을 때, 두 행렬의 곱 AB는 아래와 같은
m×n 행렬 C=[cij] 를 정의한다.
m×rr×nm×n⎣⎢⎢⎢⎢⎢⎢⎢⎡∗⋮ai1⋮∗∗⋮ai2⋮∗………∗⋮air⋮∗⎦⎥⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎡∗∗⋮∗………b1jb2j⋮brj………∗∗⋮∗⎦⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎡∗⋮∗⋮∗………∗⋮cij⋮∗………∗⋮∗⋮∗⎦⎥⎥⎥⎥⎥⎥⎥⎤ABC
cij=ai1b1j+ai2b2j+⋯+airbrj
🔥행렬의 곱에서 반드시 숙지해야할 사항
-
행렬 C의 각 요소 cij는 '곱의 왼쪽 행렬 A의 i번째 행벡터'와 '곱의 오른쪽 행렬 B의 j번째 열벡터'의 내적(inner product)이다.
- 따라서, 두 행렬의 곱 AB에 대해 A의 열 개수와 B의 행 개수는 일치해야 한다. (Am×r,Br×n)
- 일반적으로 AB=BA이다. 왜냐하면 행과 열을 뽑아오는 방법이 다르기 때문이다.
-
행렬의 곱은 병렬처리(parallel processing)로 가속할 수 있다!
(행렬 A의 각 행과 행렬 B의 각 열은 연산에 독립적이다)
계층적 구조 이해하기 - 텐서
스칼라 → 백터 → 행렬
스칼라는 숫자 하나로 구성되어 있다.
이 스칼라를 백터로 표현하면 1개의 구성요소로 이루어진 1-벡터가 된다.
[7]
이 스칼라를 행렬로 표현하면 1개의 구성요소로 이루어진 1 x 1 행렬이 왼다.
[7]1×1
벡터 → 행렬
벡터는 여러 숫자가 일열로 늘어선 구조이다.
⎣⎢⎢⎢⎡1234⎦⎥⎥⎥⎤
이 벡터를 행렬로 표현하면 여러 모양의 행렬로 표현할 수 있다.
⎣⎢⎢⎢⎡1234⎦⎥⎥⎥⎤4×1[1324]2×2[1234]2×2[1234]1×4
👉표현하고자 하는 행렬의 모양은 응용문제에 따라 결정한다.
행렬 → 벡터
행렬은 사각형 구조에 여러 숫자가 행과 열로 늘어선 구조이다.
[142536]2×3
이 행렬을 벡터로 표현하면 6-벡터로 표현할 수 있다.
⎣⎢⎢⎢⎢⎢⎢⎢⎡123456⎦⎥⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎢⎡142536⎦⎥⎥⎥⎥⎥⎥⎥⎤
👉행렬을 벡터로 변환할 때, 행부터 혹은 열부터 읽을 것인지는 응용문제에 따라 결정한다.
텐서
텐서(tensor)는 스칼라, 벡터, 행렬을 아우르는 개념이다.
숫자가 늘어설 수 있는 방향이 k개면 k-텐서로 부른다.
- 0-텐서: 스칼라
- 1-텐서: 벡터 # 행 또는 열
- 2-텐서: 행렬 # 행과 열
만일 아래의 T의 각 요소 P(i,j)가 벡터라면, T는 3-텐서로 볼 수 있다.
T=⎣⎢⎢⎢⎡P(1,1)P(2,1)P(3,1)P(4,1)P(1,2)P(2,2)P(3,2)P(4,2)P(1,3)P(2,3)P(3,3)P(4,3)P(1,4)P(2,4)P(3,4)P(4,4)⎦⎥⎥⎥⎤
3-텐서의 대표적인 예는 컬러영상이다. P(i,j)가 3-벡터이면 RGB 영상을, 4-벡터이면 RGBA 영상을 나타낸다고 볼 수 있다.
🤔4-텐서는?
P(i,j) 가 행렬일 경우 4-텐서?
→ 컬러영상이 시간을 가지는 경우 (동영상)
분할행렬(Partitioned Matrix)
행렬을 조각(partition) 단위로 분할하여 생각해도 무방하다.
이런 관점에서 본다면, 행렬은 부분행렬(submatrix)로 이루어진 직사각형 구조로 확장해서 생각할 수 있다.
![https://velog.velcdn.com/images%2Fleeyongjoo%2Fpost%2F44743eba-dc78-43cf-b300-6bf1d0d0b4c2%2Fimage.png%5D(https%3A%2F%2Fimages.velog.io%2Fimages%2Fleeyongjoo%2Fpost%2F44743eba-dc78-43cf-b300-6bf1d0d0b4c2%2Fimage.png)
두 가지 관점
- 행렬은 행백터로 이루어진 열벡터이다.
- 행렬은 열벡터로 이루어진 행벡터이다.
(2번째 관점이 일반적!)
이렇게 행렬을 구조적으로 보는 방법은 분할행렬(partitioned matrix) 또는 블록행렬(block matrix)이라 한다.
분할행렬로 행렬의 곱 이해하기
선형조합(Linear Combination)
행렬 * 벡터 ⇒ 선형조합
행렬을 구조적으로 바라보는 가장 효과적인 방법은
행렬을 열벡터의 리스트로 보는 것이다.
A=⎣⎢⎢⎢⎢⎢⎢⎢⎡a11a21⋮⋮am1a11a22⋮⋮am2………a1na2n⋮⋮amn⎦⎥⎥⎥⎥⎥⎥⎥⎤=[a1a2…an]
여기서 ai는 행렬 A의 i-번째 열벡터이다.
특히 각 열벡터는 m-벡터이기 때문에, ∗∗m×n 행렬은 m-벡터가 n개 있다**고 해석하면 된다.
Ax=b 에서
∗∗Ax는 행렬 A가 가지고 있는 열벡터의 선형조합**이다.
선형대수에서는 이처럼 벡터들에 대한 가중치 합을 특히 선형조합(linear combination)이라 부른다.
👉Ax의 결과는 행렬 A가 가지고 있는 열벡터의 선형조합으로만 한계가 지어진다!
가중치 합을 했는데 우항을 절대로 만들어낼 수 없다?
→ 그것을 만족하는 x가 존재하지 않는다.
🔥(정리) 선형시스템 Ax=b 를 선형조합 관점에서 바라보기
행렬 A의 열벡터의 가중치 합으로 선형조합할 때 벡터 b를 만들 수 있는 가중치 조합이 존재한다면,
선형시스템 Ax=b 의 해는 존재한다. 그 해는 가중치 xi들로 구성된 x이다.
열공간(Column Space)
행렬 A의 열벡터들에 대한 가능한 모든 선형조합의 결과를 모아 집합으로 구성할 수 있을 것이다.
이것을 열공간(Column Space)라고 하고 다음과 같이 표기한다.
- 선형시스템 Ax=b의 해가 존재하면(consistent), b∈col(A)를 만족한다.
- 선형시스템 Ax=b의 해가 없으면(inconsistent), b∈/col(A)를 만족한다.
3차원 공간에서의 예제
-
행렬 A의 col(A)는 3-차원 공간
A=⎣⎢⎡−1123212−3−2⎦⎥⎤
선형 시스템 Ax=b를 구성할 때
어떤 3-벡터 b를 이용하더라도 해당 선형시스템의 해는 존재한다.
-
행렬 A의 col(A)는 xy-평면
A=⎣⎢⎡−1103202−30⎦⎥⎤
선형시스템 Ax=b를 구성할 때
- xy-평면 상의 3-벡터 b를 이용하면, 해당 선형시스템의 해는 존재하지만,
- xy-평면을 벗어난 3-벡터 b를 이용하면, 해당 선형시스템의 해는 존재하지 않는다.
5강: 좌표계 변환
벡터 : 크기와 방향을 가진 물리량
좌표계를 도입한 후, 벡터의 시작점을 원점으로 맞추고
끝점의 위치를 벡터 v의 수학적 표현으로 정의
좌표계(Coordinate System)
좌표계 : 좌표값 = 행렬 : 벡터
v=[ab]=[1001][ab]=a[10]+b[01]
v 벡터는 xy-평면 상에서는 원점 (0,0)에서 시작하여 (a,b)에서 끝나는 벡터를 의미한다.
수식의 각 요소는 다음과 같다.
- a[10] : x-축의 단위로 a번 전진함을 뜻함
- b[01] : y-축의 단위로 b번 전진함을 뜻함
- xy-좌표계 : [1001]
각 항에서 동일한 지점을 표현하면 다음과 같다.
⎣⎢⎡v1v2⎦⎥⎤⎣⎢⎡43⎦⎥⎤=⎣⎢⎡ab⎦⎥⎤
-
(우항): e1 과 e2 를 기저(basis)로 가지는 표준좌표계에서의 좌표값은 (a, b)이다.
⎣⎢⎡v1v2⎦⎥⎤⎣⎢⎡43⎦⎥⎤=⎣⎢⎡1001⎦⎥⎤⎣⎢⎡ab⎦⎥⎤
⚡벡터만 있으면 그 앞에는 표준좌표계(Standard Coordinate System)라고 하는 항등행렬이 존재함
(생략되었다고 생각)
-
(좌항): v1 과 v2 를 기저(basis)로 가지는 좌표계에서의 좌표값은 (4, 3)이다.
Ax=b에서
- 행렬 A는 좌표계
- 벡터 x는 A 좌표계에서의 좌표값
- 벡터 b는 표준좌표계에서의 좌표값
좌표계 변환(Change of Basis)
Ax=b[12−12][21]=[16]
👉표준좌표계에서 어떤 벡터의 좌표값은 b 인데, 그 좌표값이 A 좌표계에서는 x 이다.
x=A−1b[21−214141][16]=[21]
👉표준좌표계에서 어떤 벡터의 좌표값은 x 인데, 그 좌표값이 A−1 좌표계에서는 b 이다.
A[v]A=B[v]B
-
B를 기준으로(B를 표준좌표계로 하고) [v]A 의 좌표를 보고 싶으면
B−1A[v]A=[v]B
-
A를 기준으로(A를 표준좌표계로 하고) [v]B 의 좌표를 보고 싶으면
[v]A=A−1B[v]B
Ax = b는 "A라는 좌표계에서 x는 얼만큼, y는 얼만큼을 가야 표준좌표계에서의 b라는 좌표값에 도착하는지" 를 뜻함.
예제 # 1
벡터 v가 표준좌표계에서 (2,3)으로 표현된다고 한다.
벡터 (3,1)과 (1,−2)를 기저벡터로 가지는 새로운 좌표계를 도입했을 때, 해당 벡터 v는 어떤 좌표값을 가질까?
[311−2][v]=[23]
→ 가우스 소거법이나 역행렬을 이용하여 v(x1,x2)를 구하면 됨
🔥좌표계에 따른 좌표값이 달라도 동일한 지점이 될 수 있다!!!
예제 # 2
벡터 v가 표준좌표계에서 (2,1,3)으로 표현된다고 한다.
벡터 (1,3,1)과 (1,−2,2)를 기저벡터로 가지는 새로운 좌표계를 도입했을 때, 해당 벡터 v는 어떤 좌표값을 가질까?
⎣⎢⎡1311−22⎦⎥⎤[v]=⎣⎢⎡213⎦⎥⎤
→ 가우스 소거법이나 역행렬을 이용하여 v(x1,x2)를 구하면 됨
좌표계가 열벡터 2개로 이루어져 있기 때문에 3차원 공간에 있는 2차원 평면만 다닐 수 있음
⭐3차원 좌표계를 가지지만 왜 2차원 좌표값을 가질까?
A는 3차원 좌표계를 가지지만 2개의 백터로 이루어져 있다.
따라서 각각 다른 방향을 가리키는 두 벡터를 이용해서만 갈 수 있는 좌표값만 접근할 수 있다.
(두 벡터로 이루어진 평면)
그리고 2개의 열백터로 이루어져 있기 때문에 1개의 열백터 b가 되기 위해서는 다음 식을 만족해야 한다.
3×2∗[v]=3×1[v]:2×1
🔥각 좌표값의 차원이 다를 수 있다!
6강: 선형변환
선형함수(Linear Function)
함수(Function)
입력이 들어가면 어떤 기능을 수행한 다음 출력을 반환
입력이 정의되는 집합 D를 정의역(domain)
출력이 정의되는 집합 C를 공역(codomain)이라 하며,
공역 중 실제 함수의 출력이 나오는 부분집합 f(x)를 치역(range)라고 한다.
함수 f는 아래 그림과 같이 D의 각 원소 x가 C의 한 원소 y(∋f(x)) 에 대응되는 매핑룰(mapping rule)이다.
[그림출처: Wikipedia]
만일 함수 f가 아래 두가지 조건을 만족하면 함수 f를 선형함수(linear function)이라고 한다.
- f(x+y)=f(x)+f(y)
- f(cx)=cf(x)(단,c는임의의스칼라)
선형함수 : 일직선으로 나타나는 함수
변환(Transformation)
함수의 입력이 n-벡터이고 출력이 m-벡터인 함수 T가 있을 때,
함수의 입출력이 벡터인 함수를 변환(Transformation)이라고 한다.
T:Rn→Rm
만약 n=m인 경우, 해당 변환을 연산자(operator)라고 한다.
m×n 행렬 A에 대해 Ax는 n-벡터를 입력으로 받아 m-벡터를 출력으로 내는 변환 Ax=TA(x)으로 볼 수 있다.
이 변환은 행렬이 정의하기 때문에 행렬변환(matrix Transformation)이라고 한다.
TA:Rn→Rm
그런데, 행렬변환은 다음의 선형함수 성질을 모두 만족하기 때문에 선형변환(linear Transformation)이다.
A(x+y)=A(x)+A(y)A(cx)=cA(x)
- 좌항의 + 는 n-벡터의 덧셈, 우항의 +는 m-벡터의 덧셈
- 좌항의 cx는 n-벡터의 스케일링, 우항의 cA(x)는 m-벡터의 스케일링
👉 m×n 행렬은 n-벡터를 입력으로 받아 m-벡터를 출력을 내는 선형변환이며,
임의의 선형 변환은 행렬로 표현 가능
하다. 즉, 행렬은 선형변환의 구현체이다.
표준행렬(Standard Matrix)
💡행렬변환이 입출력이 벡터로 정의된 선형함수라면, 해당 함수를 어떻게 코딩할 수 있을까?
다음 절차를 통해 원하는 방식대로 동작하는 행렬변환을 코딩할 수 있다.
- 구현하고자 하는 기능(function)의 입력과 출력이 벡터로 정의되는지 확인
- 구현하고자 하는 기능이 선형인지 확인
- 입력이 n-벡터이고, 출력이 m-벡터이면 m× n 표준행렬(standard matrix)을 구성
📌표준행렬 구하기
- n-차원 표준기저벡터 {e1,e2,…,en} 를 생각한다. → 항등행렬
- 각 n-차원 표준기저벡터 ei에 대해, 우리가 원하는 기능을 동작시켜 얻은 결과인 m-차원 벡터 T(ei)를 표준행렬의 각 열에 적는다.
😃표준행렬을 이용한 선형변환 코딩 예제
Q. 2차원 벡터를 입력으로 받아, 해당 벡터를 x-축에 프로젝션하는 기능을 구현해보자.
-
구현하고자 하는 기능의 입력과 출력이 벡터로 정의되는지 확인
입력으로 (3,2)인 2-벡터를 넣으면 출력으로 (3,0) 2-벡터로 정의됨
-
구현하고자 하는 기능이 선형인지 확인
출력이 x축을 그리기 때문에 선형임
-
m×n 표준행렬 구성
-
입력으로 첫 번째 기저벡터 (1,0)를 넣어서 나오는 출력을 첫 번째 열벡터에 추가
f([10])→[10]⇒T=[10∗∗]
-
두 번째 기저벡터 (0,1)을 넣어서 나오는 출력을 두 번째 열벡터에 추가
f([01])→[00]⇒T=[1000]