Summary

한 줄 요약: full column rank 행렬 A는 row space에 딸려(?) 있는 nullspace 자체가 {0} 이기 때문에 A의 변환으로 이동한 Ax 벡터는 A의 column space에 있게 되고, Ax 에 대한 역변환이 가능하다는 것이다.

정리

3x2 행렬 A가 있다. 그리고 컬럼은 모두 서로 독립이다. A의 left-inverse 는?

행렬에 대한 몇 가지 사실은 아래와 같다.

  1. 행렬의 rank r 은 2와 같다. 즉, mxn 크기의 행렬에서 m > n 이고 컬럼이 모두 서로 독립이라면 full column rank 행렬이 된다.
  2. A의 nullspace 는 N(A) = {0} 만 포함한다.
  3. 따라서 A의 row space의 차원 Dim(row space) = n 이 된다.
  4. Ax = b 문제에서 솔루션은 0개 아니면 1개가 된다.
  5. 왜냐하면 A의 소거후 모습이 0 = 0 과 같으면 솔루션이 1개 존재하고 0 != (우변) 이 되면 솔루션이 존재하지 않다.
  6. 그리고 솔루션이 존재하더라도, nullspace가 0 이기 때문에 particular solution 그 자체가 solution 이 된다.

ATA 에 대해서 우리가 알고 있는것은?

  1. 대칭행렬이 된다. 사이즈는 nxn 이다.
  2. full rank 행렬이고 rank r = n 이 된다.
  3. 역행렬이 가능하다.
  4. least squares 문제에서 중요한 역할을 담당하고 있다.
  5. least squares 문제에서 근사해를 구할 때, \((A^TA)^{-1}A^T\) 를 사용한다.

그럼, \(A^TA\)의 역행렬에 \(A^T\)를 곱한것을 \(A^{-1} left\) 라고 한다면,

\(A^{-1} left = (A^TA)^{-1}A^T\)

\(A^{-1} left\) 에 A를 곱하게 되면 단위행렬이 나온다.

# 행렬 A를 정의한다.
A <- matrix(c(1, 2, 3, 4, 5, 6), nrow=3, byrow=F)
A
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6
# ATA 를 구한다.
A_T <- t(A)   # A의 전치행렬

A_TA <- A_T %*% A
A_TA
##      [,1] [,2]
## [1,]   14   32
## [2,]   32   77
# A-1 left 를 구한다.
A_1_left <- solve(A_TA) %*% A_T
A_1_left
##            [,1]       [,2]       [,3]
## [1,] -0.9444444 -0.1111111  0.7222222
## [2,]  0.4444444  0.1111111 -0.2222222
# (A-1 left) * A 가 단위행렬이 됨을 확인한다.
round(A_1_left %*% A)
##      [,1] [,2]
## [1,]    1    0
## [2,]    0    1

이번에는 위에서 구한 A-1 left를 이용해서 역행렬이 정상적으로 동작하는지 확인하자.

# x = (2, 3) 이라고 했을 경우 Ax 값을 구하고, A-1 left 를 이용해서 다시 x 를 구해보자.
x <- c(2, 3)  # x 정의
y <- A %*% x       # Ax 계산
y
##      [,1]
## [1,]   14
## [2,]   19
## [3,]   24
A_1_left %*% y # A-1 left 를 곱하면, 원래 x 가 나오는지 확인한다.
##      [,1]
## [1,]    2
## [2,]    3