코드 테스트

행렬 A의 고유값과 B의 고유값은 같다. A와 B는 similar matrix 관계이다.

\[ B = M^{-1} * A * M \]

Similar matrix 는 고유값이 같은 행렬 패밀리를 의미한다. 예를 들어 2x2 행렬의 고유값이 2, 3 인 행렬이 있다면, 이 행렬의 패밀리는 다음과 같다. 아래 행렬 B1, B2는 A 와 Similar matrix 가 된다.

# 행렬 A는 고유값 2, 3을 갖는다.
A <- matrix(c(2, 0, 0, 3), nrow=2, byrow=T)

# M을 만드는데, 이것은 역행렬이 가능한 어떤 행렬이라도 상관없다. 크기는 2x2 여아 한다.
M <- matrix(c(1, 2, 3, 4), nrow=2, byrow=T)

# 패밀리내의 B1 행렬은
B1 <- solve(M) %*% A %*% M
B1
##      [,1] [,2]
## [1,]  5.0    4
## [2,] -1.5    0
# B1의 고유값이 2, 3인지 확인한다. 즉, 행렬 A와 Similar matrix 가 된다.
eigen(B1)
## eigen() decomposition
## $values
## [1] 3 2
## 
## $vectors
##            [,1] [,2]
## [1,]  0.8944272 -0.8
## [2,] -0.4472136  0.6
# 이번엔, M을 새롭게 만들어서 또 다른 B2를 만들어보자.
M <- matrix(c(1, 1, -1, 1), nrow=2, byrow=F)
B2 <- solve(M) %*% A %*% M
B2
##      [,1] [,2]
## [1,]  2.5  0.5
## [2,]  0.5  2.5
# B2의 고유값이 2, 3인지 확인한다. 즉, 행렬 A와 Similar matrix 가 된다.
eigen(B2)
## eigen() decomposition
## $values
## [1] 3 2
## 
## $vectors
##           [,1]       [,2]
## [1,] 0.7071068 -0.7071068
## [2,] 0.7071068  0.7071068

그런데, 고유값이 4, 4 로 중복될 경우는 어떨까? 크게 2가지 경우가 있는데, 단위행렬의 4배인 행렬 패밀리가 존재하고, 그렇지 않은 행렬 패밀리가 존재한다.

단위행렬의 4배인 행렬 패밀리는 어떤 M, M-1 을 곱하더라도 자기 자신만 나오니까, 아래에서는 Jordan form 에 대해서만 알아보자. 아래 B1, B2 행렬은 A 와 Similar matrix 가 된다.

Jordan form 은 대각선에 반복되는 동일한 고유값이 존재하고, 대각선 위로는 1이 있다. 그리고 나머지 성분은 0이 되는 행렬을 Jordan form 이라고 부른다.

# Jordan form 으로 구성한다.
A <- matrix(c(4, 1, 0, 4), nrow=2, byrow = T)
A
##      [,1] [,2]
## [1,]    4    1
## [2,]    0    4
eigen(A) # 고유값이 4임을 확인한다.
## eigen() decomposition
## $values
## [1] 4 4
## 
## $vectors
##      [,1]          [,2]
## [1,]    1 -1.000000e+00
## [2,]    0  8.881784e-16
# 행렬 M 을 만든다.
M <- matrix(c(1, 2, 3, 4), nrow=2, byrow = T)

# M과 M의 역행렬을 곱했을 때 단위행렬이 나옴을 확인한다.
#solve(M) %*% M

# 행렬 B 를 구한다.
B1 <- solve(M) %*% A %*% M
B1
##      [,1] [,2]
## [1,] -2.0   -8
## [2,]  4.5   10
# B1의 고유값이 역시 4임을 확인한다.
eigen(B1)
## eigen() decomposition
## $values
## [1] 4 4
## 
## $vectors
##      [,1] [,2]
## [1,] -0.8  0.8
## [2,]  0.6 -0.6
# 이번엔, M을 새롭게 만들어서 또 다른 B를 만들어보자.
M <- matrix(c(1, 1, -1, 1), nrow=2, byrow=F)
B2 <- solve(M) %*% A %*% M
B2
##      [,1] [,2]
## [1,]  4.5  0.5
## [2,] -0.5  3.5
# B2의 고유값이 역시 4임을 확인한다.
eigen(B2)
## eigen() decomposition
## $values
## [1] 4 4
## 
## $vectors
##            [,1]       [,2]
## [1,]  0.7071068 -0.7071068
## [2,] -0.7071068  0.7071068

이번에는 고유값이 동일하게 4, 4로 중복되지만, 좀 다른 행렬로 구성해보자.

먼저, 대각성분을 (5, 3)로 두어서 trace = 8로 설정하고, 행렬식 16을 맞추기 위해서 대각선 위, 아래로 (1, -1)을 둔다. 역시 위의 행렬과 마찬가지로 similar matrix 가 된다.

A <- matrix(c(5, 1, -1, 3), nrow=2, byrow=T)
A
##      [,1] [,2]
## [1,]    5    1
## [2,]   -1    3
# 고유값을 확인한다.
eigen(A)
## eigen() decomposition
## $values
## [1] 4 4
## 
## $vectors
##            [,1]       [,2]
## [1,]  0.7071068 -0.7071068
## [2,] -0.7071068  0.7071068