행렬(Matrix)

수 또는 다항식 등을 직사각형 모양으로 배열한 것

// ex. 3x2 행렬
1 2
3 4
5 6

// ex. 1x4 행렬
1 2 3 4


관련 문제

백준 B5. 행렬 덧셈

백준 B5. 행렬 덧셈, 내 풀이


행렬의 곱연산

행렬 간의 곱연산

공식

  • 생략(코드는 관련 문제 풀이 참고)

특징

  1. 교환법칙이 성립하지 않음
  2. 행렬곱 AxB일 때 A의 열 수가 B의 행수와 일치해야 함
    • 2x3 * 3x2
    • 이를 내항일치라고 함
  3. 행렬의 곱은 내적의 연속이다.


관련 문제

백준 S5. 행렬 곱셈

백준 S5. 행렬 곱셈, 내 풀이


프로그래머스 Lv2. 행렬의 곱셈

프로그래머스 Lv2. 행렬의 곱셈, 내 풀이


영행렬(zero matrix, null matrix)

모든 성분이 0인 행렬

// ex. 4x4 영행렬
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0


단위행렬(unit matrix, 항등 행렬, identity matrix)

대각선 1, 나머지 0인 정방 행렬(square matrix, 같은 수의 행과 열).

숫자로 치면 ‘1’의 행렬 버전.

곱해도 행렬이 변하지 않는다.

// 2x2 단위행렬
1 0
0 1
// 3x3 단위행렬
1 0 0
0 1 0
0 0 1 

등등


전치행렬(transposed matrix)

주어진 행렬의 행들과 열들을 맞바꾼 것

// A 행렬
1 2
3 4
5 6

// A^t : 전치행렬
1 3 5
2 4 6


역행렬(inverse matrix)

어떤 행렬을 곱했을 때 계산 결과가 항등 행렬(단위 행렬)인 것

숫자의 역수(분모와 분자를 뒤집은 수)와 비슷한 개념

표기

A^-1

특징

  1. 오직 정방 행렬만이 역행렬을 가진다.
  2. 모든 정방 행렬이 역행렬을 가지는 건 아니다.
  3. 역행렬이 있는 행렬을 가리키 ‘가역 행렬’이라고 부르고, 없으면 ‘특이 행렬’이라고 한다.
  4. A행렬이 직교행렬(orthogonal matrix)이면 A의 역행렬은 A의 전치행렬과 같다.

공식

A^-1 = A* / det A

// det A : 행렬식. == 0이면 역행렬이 없는 것
// A* : 수반 행렬(adjoint of matrix, 행렬의 성분이 여인수(cofactor)로 이루어진 행렬의 전치행렬)


행렬식(Determinant)

역행렬을 구할 수 있는지 판별하는 식

3x3까지는 사러스 법칙 사용

4x4 이상은 라이프니츠가 만든 소행렬식이나 크래머 공식 이용

// 2x2 행렬
A = | a b |
    | c d |
// 행렬식
det A == ad - bc
det A == 0 이면 역행렬을 갖지 않는다.
// 3x3 행렬
A = | a b c |
    | d e f |
    | g h i |
// 행렬식
det A == d(ei - fh) - b(di - fg) + c(dh - eg))
det A == 0 이면 역행렬을 갖지 않는다.

2x2, 3x3 역행렬 구하는 식에 대한 원리와 여러 공식들,

4x4 이상의 행렬에 대한 역행렬 구하는 공식은

따로 더 공부하고 다른 포스트에서 정리.


관련 문제

백준 G3. 크래머의 공식

백준 G3. 크래머의 공식, 내 풀이


행렬 클래스 직접 구현

위 행렬들만 2x2, 3x3 행렬 클래스를 직접 짜봤었는데

지금 검수해줄 사람도 없고 잘 짠 건지 모르겠다.

그래도 잘 기능해서 탄막 슈팅 게임 잘 돌아갔으니 올려본다.

행렬 클래스, 내 구현


참고

행렬개념 참고링크


※ 수정하거나 개선할 점이 있다면 말씀해주시면 감사하겠습니다.

댓글남기기