3 분 소요

📚 목차

행렬의 개념

행렬의 의미

Image

특정한 벡터(U)에
‘변환’(Matrix)을 주어
새로운 벡터 U’ 가 되는 모습

결국 그래픽스나 기하학적 의미에서
행렬은 ‘변환’을 저장하고 그것을 ‘반영’시켜
새로운 상태로 만듦을 기억하자

Image

다만 사용되는 프로그램 등에 따라
행렬과 벡터가 곱해지는 순서에 차이가 존재할 수 있음

‘행’ 과 ‘렬’

Image

가로측으로 보이는 ‘Row’가 ‘행’이며
세로측의 ‘Column’이 ‘열(렬)’이다

이를 합쳐 ‘행렬’이라 부르며
표현할 때는 각각의 행과 렬의 개수를 따라 표현한다
(‘행’X’렬’)

보기에 따라서 행렬이 2차원 벡터로 보거나
백터를 ‘행’ 또는 ‘렬’의 크기가 1인 행렬로 해석할 수 있다

또한 각 요소를 B11(몇번째 행, 몇번째 열) 같은 요소로 표현이 가능

각 요소들을 나누는 요소가 딱히 표현되지 않음
(아래의 u는 벡터이기에 ‘,’로 나눈것을 명시)

u가 row 만으로, v가 column 만으로 이루어진 벡터(행렬)이기에
각각 row vector, column 벡터라고도 한다
(DirectX는 row Vector를 선호하는 편이며
각 분야에 따라 선호하는 벡터 방식이 다를 수 있다)

ImageImage

하나의 행렬을
각각 ‘row Vector’ 의 집합이나
‘Col Vector’의 집합으로 해석할 수 있다
(실제로 행렬을 표현할 때
2차원 배열을 많이 사용하기도 하니)

행렬의 연산

행렬 더하기

Image

각각의 자리에 맞게 각 요소들을 더하거나 뺀다
(자리에 맞아야 하므로
서로 같은 크기의 행렬들끼리만 연산 가능)
(ex : C와 D 행렬은 더하거나 뺄 수 없다)

스칼라 곱도
벡터처럼 각 요소에 곱해준다

Image

일반적인 양수의 덧셈과 스칼라 곱에선
교환법칙,결합법칙, 분배법칙이 적용된다

그렇기에 rA + rB 같은 요소라면
r(A + B)로 계산하는 편이
같은 결과지만 계산량이 줄어듦
(최적화의 일환)

행렬 곱하기

Image

행렬 곱셈 결과 크기
A x B , B x C 행렬을 각각 곱하게 되면
A x C 크기의 행렬이 탄생
(그렇기에 B와 같이 특정한 행 X 렬 값이 같아야 곱할 수 있음)

A X B 를 수행하는 과정에서
A의 row Vector와 B의 Col Vector들을 내적(Dot)하며
그 결과를 새로운 결과 행렬의 요소로 집어넣고 있다

Image

A * B 와 B * A 의 결과는 달라질 수 있으니 주의
(교환법칙이 성립하지 않는다)

  • A * B 는 A의 행의 크기와 B의 열의 크기를
    그리고 B * A 는 B의 행의 크기와 A의 열의 크기를 비교하며
    각각 곱해주는 벡터들이 다르기에 발생하는 현상

Image

그래도 이런 식의 결합 법칙은 성립한다

선형 결합

Image

벡터와 행렬의 곱에서
uA는 각 col Vec들에게 A를 곱하고 전부 더한 결과(내적)를
요소로 가지게 된다
-> 그렇기에 x에 A의 첫번째 행 벡터들을 곱한 방식으로도 정리가 가능
xA1* + yA2* + zA3* 라는 각각의 1 X 3 방식으로 정리
(각각의 요소는 x,y,z로 분류한 후, 결합법칙을 통해 묶어서 정리한 것)

  • 스칼라 * 벡터 + 스칼라 * 벡터… 방식으로 표현한다는 점을 기억하자

Image

이러한 표현 방식을 ‘선형 결합’(Linear Combination)으로 부른다

위에서 말했듯
스칼라 * 벡터를 이용한
새로운 벡터에 대한 표현 방식

(반대로 스칼라* 벡터 + … 등을
하나의 벡터 * 행렬로 바꿀수도 있다는 의미
위에서 보았듯 연산결과를 줄임으로서 최적화)

(ex : 블렌딩으로 유명한 선형 결합도 결국은
FinalPose = 0.3 * RunPose + 0.7 * WalkPose
즉, 스칼라 * 벡터 + 스칼라*벡터 의 표현 방식!)
(굳이 따지자면 이건 a + b = 1 인
Convex Combination 이나 Affine Combination에 가까운 편)

전치 행렬

Image

중심을 대각선으로 뒤집은 듯한 행렬으로
대문자 T를 붙여 표시한다

2X3 같은 행렬의 전치행렬은
3X2 크기가 된다

3X3 같은 ‘열’ 과 ‘행’의 크기가 같은
‘정방행렬’같은 경우는 크기가 변하지 않음

T 역시 일종의 연산이기에
(A+B)T 가 AT + BT보다 연산 횟수가 적다

단위 행렬

Image

마치 숫자 1처럼 곱하더라도 그 결과가
바뀌지 않는 행렬
(항상 정방행렬로서 행과 렬의 크기가 같다)

임의의 정방행렬 M이 존재할 때
MI = IM = M 이 성립

(벡터 역시 한쪽의 크기가 1인 ‘행렬’
이기에 단위 행렬에 곱하면 자신이 나온다)

소행렬

Image

행렬의 특정 부분을 떼어내서 만든 ‘작은’ 행렬
(‘행렬’에서 ‘특정한 행과 열’을 제거하고 남은 요소로 만든 것)

예시의 -A11 소행렬의 경우
첫번째 행과 첫번째 열을 제외한 요소로만 이루어져 있다

-> 행렬식(Determinant), 여인수(Cofactor), 역행렬 계산 등에 사용하는 개념

행렬식

Image

재귀적으로 특정한 공식을 통해
행렬의 ‘특정한 값’을 계산하는 방식
(det(행렬) 이라는 방식으로 사용)

그 값은 스칼라 이고
역행렬을 구할 때, 사용 가능

  • det(A) == 0 이라면 역행렬을 구하지 못함

실제 행렬 예시

Image

여인수 행렬

Image

특정한 행렬에 대한 모든 원소에 대하여 여인수를 구하고
동일한 위치에 넣어 만든 행렬

위의 행렬식을 정리하여 ‘행렬’로 만든 것이기도 하다

  • 여인수?
    행렬 C에서 i행 j열 원소에 대한 여인수는
    해당 원소의 소행렬의 행렬식에 (-1)^(i+j) 부호를 곱한 것

수반 행렬

Image

위의 ‘여인수 행렬’의 전치 행렬

역행렬

Image

어떠한 정방행렬에 대하여
곱하면 ‘단위 행렬’이 나오게 되는 행렬
(-1을 붙여 표현, 제곱 개념이 아님에 유의)
(결합법칙이 성립)

또한 특정한 변화(M)를 당한 벡터 p’에
M-1을 곱해줌으로서 원본 벡터 p를
구할 수 있다
(역행렬의 주요 용도)

그래픽스 쪽에선
역행렬을 직접 구하기 보단
이전에 걸었던 변화를 ‘역’으로 걸어
같은 결과를 내는 것을 선호하는 편
(역변환 이라고도 한다)
ex)
(왼쪽으로 10 이동 <-> 오른쪽으로 10 이동)
(오른쪽으로 30도 회전 <-> 왼쪽으로 30 회전 등)

  • 영행렬?
    모든 요소가 0인 행렬
    (그렇기에 역행렬이 없다)
    (0에 무엇을 곱해서 단위행렬의 1을 만들수 있을까?)

태그:

카테고리:

업데이트:

댓글남기기