행렬의 기본연산과 성질

행렬의 전치

matrix(c(8, 9, 6, 9, 7, 13, -3, 11, 11, 6, 4, 8), nrow=4)
##      [,1] [,2] [,3]
## [1,]    8    7   11
## [2,]    9   13    6
## [3,]    6   -3    4
## [4,]    9   11    8
(A1 <- matrix(c(8, 9, 6, 9, 7, 13, -3, 11, 11, 6, 4, 8), 4))
##      [,1] [,2] [,3]
## [1,]    8    7   11
## [2,]    9   13    6
## [3,]    6   -3    4
## [4,]    9   11    8
  • 전치행렬 \(A1^\prime\)은 다음과 같이 주어짐.
t(A1)
##      [,1] [,2] [,3] [,4]
## [1,]    8    9    6    9
## [2,]    7   13   -3   11
## [3,]   11    6    4    8
  • 몇 가지 성질을 살펴보면,
A1[1, 2]
## [1] 7
(t(A1))[2, 1]
## [1] 7
t(t(A1))
##      [,1] [,2] [,3]
## [1,]    8    7   11
## [2,]    9   13    6
## [3,]    6   -3    4
## [4,]    9   11    8
  • 벡터의 경우,
(x1 <- matrix(c(1, 6, 4), 3))
##      [,1]
## [1,]    1
## [2,]    6
## [3,]    4
t(x1)
##      [,1] [,2] [,3]
## [1,]    1    6    4

행렬의 분할

  • 분할 행렬
(A2 <- matrix(c(1, 2, 4, 9, 6, 6, 4, 3, 1, 8, 8, 1, 6, 4, 1, 9, 6, 1, 6, 4, 3, 1, 2, 8, 3, 8, 1, 5, 7, 2), 5))
##      [,1] [,2] [,3] [,4] [,5] [,6]
## [1,]    1    6    8    9    3    8
## [2,]    2    4    1    6    1    1
## [3,]    4    3    6    1    2    5
## [4,]    9    1    4    6    8    7
## [5,]    6    8    1    4    3    2
(A2.11 <- A2[1:3, 1:4])
##      [,1] [,2] [,3] [,4]
## [1,]    1    6    8    9
## [2,]    2    4    1    6
## [3,]    4    3    6    1
(A2.12 <- A2[1:3, 5:6])
##      [,1] [,2]
## [1,]    3    8
## [2,]    1    1
## [3,]    2    5
(A2.21 <- A2[4:5, 1:4])
##      [,1] [,2] [,3] [,4]
## [1,]    9    1    4    6
## [2,]    6    8    1    4
(A2.22 <- A2[4:5, 5:6])
##      [,1] [,2]
## [1,]    8    7
## [2,]    3    2
  • 분할행렬의 전치
cbind(A2.11, A2.12)
##      [,1] [,2] [,3] [,4] [,5] [,6]
## [1,]    1    6    8    9    3    8
## [2,]    2    4    1    6    1    1
## [3,]    4    3    6    1    2    5
t(cbind(A2.11, A2.12))
##      [,1] [,2] [,3]
## [1,]    1    2    4
## [2,]    6    4    3
## [3,]    8    1    6
## [4,]    9    6    1
## [5,]    3    1    2
## [6,]    8    1    5
rbind(t(A2.11), t(A2.12))
##      [,1] [,2] [,3]
## [1,]    1    2    4
## [2,]    6    4    3
## [3,]    8    1    6
## [4,]    9    6    1
## [5,]    3    1    2
## [6,]    8    1    5
t(A2)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    4    9    6
## [2,]    6    4    3    1    8
## [3,]    8    1    6    4    1
## [4,]    9    6    1    6    4
## [5,]    3    1    2    8    3
## [6,]    8    1    5    7    2
rbind(cbind(t(A2.11), t(A2.21)), cbind(t(A2.12), t(A2.22)))
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    4    9    6
## [2,]    6    4    3    1    8
## [3,]    8    1    6    4    1
## [4,]    9    6    1    6    4
## [5,]    3    1    2    8    3
## [6,]    8    1    5    7    2

행렬의 궤적

  • 정방행렬에 대하여 정의
A3 <- matrix(c(-2, 3, 7, 4, 8, -2, 5, 1, 6), 3)
sum(diag(A3))
## [1] 12
psych::tr(A3)
## [1] 12
  • 전치행렬의 궤적(trace)
B3 <- matrix(c(1, 7, 6, 8, 3, 9, 4, -2, -8), 3)
sum(diag(B3))
## [1] -4
sum(diag(t(B3)))
## [1] -4
  • trace 계산하는 함수를 정의하여 사용한다면,
tr.f <- function(x) {sum(diag(x))}
tr.f(B3)
## [1] -4
tr.f(t(B3))
## [1] -4

행렬의 연산

행렬의 덧셈

A4 <- matrix(c(1, 5, 2, 1, 4, 2), 2)
B4 <- matrix(c(2, -1, 5, 0, 1, 3), 2)
(C4 <- A4 + B4)
##      [,1] [,2] [,3]
## [1,]    3    7    5
## [2,]    4    1    5
A4 - B4
##      [,1] [,2] [,3]
## [1,]   -1   -3    3
## [2,]    6    1   -1
t(C4)
##      [,1] [,2]
## [1,]    3    4
## [2,]    7    1
## [3,]    5    5
t(A4) + t(B4)
##      [,1] [,2]
## [1,]    3    4
## [2,]    7    1
## [3,]    5    5
(D4 <- rbind(A4, c(0, 0, 1)))
##      [,1] [,2] [,3]
## [1,]    1    2    4
## [2,]    5    1    2
## [3,]    0    0    1
(E4 <- rbind(B4, c(0, 0, 1)))
##      [,1] [,2] [,3]
## [1,]    2    5    1
## [2,]   -1    0    3
## [3,]    0    0    1
D4 + E4
##      [,1] [,2] [,3]
## [1,]    3    7    5
## [2,]    4    1    5
## [3,]    0    0    2
tr.f(D4 + E4)
## [1] 6
tr.f(D4)
## [1] 3
tr.f(E4)
## [1] 3
tr.f(D4) + tr.f(E4)
## [1] 6

행렬의 곱셈

  • 벡터의 내적
x4 <- c(2, -3, 4, 1)
y4 <- c(4, 2, 6, -1)
x4 %*% y4
##      [,1]
## [1,]   25

행렬의 곱셈

  • 예제 2.4
(A5 <- matrix(c(1, -1, 0, 4, 2, 3), 2))
##      [,1] [,2] [,3]
## [1,]    1    0    2
## [2,]   -1    4    3
(B5 <- matrix(c(0, 1, 3, 6, 1, 4, 1, 0, 4, 5, 7, 3), 3))
##      [,1] [,2] [,3] [,4]
## [1,]    0    6    1    5
## [2,]    1    1    0    7
## [3,]    3    4    4    3
A5 %*% B5
##      [,1] [,2] [,3] [,4]
## [1,]    6   14    9   11
## [2,]   13   10   11   32

행렬 곱셈의 교환성

  • 예제 2.5
(A6 <- matrix(c(1, 3, 2, 4), 2))
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4
(B6 <- matrix(c(0, 1, -1, -1), 2))
##      [,1] [,2]
## [1,]    0   -1
## [2,]    1   -1
A6 %*% B6
##      [,1] [,2]
## [1,]    2   -3
## [2,]    4   -7
B6 %*% A6
##      [,1] [,2]
## [1,]   -3   -4
## [2,]   -2   -2
  • \((AB)^\prime = B^\prime A^\prime\)
t(A6 %*% B6)
##      [,1] [,2]
## [1,]    2    4
## [2,]   -3   -7
t(B6) %*% t(A6)
##      [,1] [,2]
## [1,]    2    4
## [2,]   -3   -7

행렬의 대수법칙

  • 결합법칙, 분배법칙, 교환법칙 되는 경우와 안 되는 경우

  • 특이한 경우

(A7 <- matrix(c(1, 3, 2, 4), 2))
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4
(B7 <- matrix(c(0, 3, 2, 3), 2))
##      [,1] [,2]
## [1,]    0    2
## [2,]    3    3
A7 %*% B7
##      [,1] [,2]
## [1,]    6    8
## [2,]   12   18
B7 %*% A7
##      [,1] [,2]
## [1,]    6    8
## [2,]   12   18

스칼라 대수와의 비교

  • \(AB = 0\) 이면 \(A\) 또는 \(B\)\(0\)?
(A8 <- matrix(rep(1, 4), 2))
##      [,1] [,2]
## [1,]    1    1
## [2,]    1    1
(B8 <- matrix(rep(c(1, -1), 2), 2))
##      [,1] [,2]
## [1,]    1    1
## [2,]   -1   -1
A8 %*% B8
##      [,1] [,2]
## [1,]    0    0
## [2,]    0    0
  • \(X^2 = 0\) 이면 \(X = 0\)?
(X8 <- matrix(c(1, 2, -1, 2, 4, -2, 5, 10, -5), 3))
##      [,1] [,2] [,3]
## [1,]    1    2    5
## [2,]    2    4   10
## [3,]   -1   -2   -5
X8 %*% X8
##      [,1] [,2] [,3]
## [1,]    0    0    0
## [2,]    0    0    0
## [3,]    0    0    0
  • 주의 : R 기호에서, X^2X %*% X는 서로 다른 것임.
X8^2
##      [,1] [,2] [,3]
## [1,]    1    4   25
## [2,]    4   16  100
## [3,]    1    4   25
X8 %*% X8
##      [,1] [,2] [,3]
## [1,]    0    0    0
## [2,]    0    0    0
## [3,]    0    0    0
  • \(X^2 = I\) 라고 해서 \(X = I\) 혹은 \(X = -I\)인 것은 아니임.
(X9 <- matrix(c(1, 4, 0, -1), 2))
##      [,1] [,2]
## [1,]    1    0
## [2,]    4   -1
X9 %*% X9
##      [,1] [,2]
## [1,]    1    0
## [2,]    0    1
  • \(X^2 = X\) 이더라도 \(X \ne 0\) 이고 \(X \ne I\)일 수 있음.
(X10 <- matrix(c(3, 3, -2, -2), 2))
##      [,1] [,2]
## [1,]    3   -2
## [2,]    3   -2
X10 %*% X10
##      [,1] [,2]
## [1,]    3   -2
## [2,]    3   -2

자료 갈무리

save.image(file="chapter_2_class.rda")