固有値の証明1

-正方行列

"固有値証明1" <- function(data){
  A1 <- eigen(data)
  AV <- diag(A1$values)
  AU <- A1$vectors #変換行列
  
  # U^-1%*%data%*%U=AV
  a <- solve(AU) %*% data %*% AU #固有値の証明
  list("固有値"=AV,"固有値ベクトル"=AU,
       "固有値の証明"=a)
}
data <- matrix(c(5,-6,2,-2),2,2,byrow=TRUE)
data
##      [,1] [,2]
## [1,]    5   -6
## [2,]    2   -2
固有値証明1(data)
## $固有値
##      [,1] [,2]
## [1,]    2    0
## [2,]    0    1
## 
## $固有値ベクトル
##           [,1]      [,2]
## [1,] 0.8944272 0.8320503
## [2,] 0.4472136 0.5547002
## 
## $固有値の証明
##              [,1]         [,2]
## [1,] 2.000000e+00 1.510944e-15
## [2,] 1.149254e-16 1.000000e+00
data <- matrix(c(3,-2,-1,-2,-1,2,-2,2,4),3,3,byrow=TRUE)
data
##      [,1] [,2] [,3]
## [1,]    3   -2   -1
## [2,]   -2   -1    2
## [3,]   -2    2    4
固有値証明1(data)
## $固有値
##          [,1]      [,2] [,3]
## [1,] 6.123106  0.000000    0
## [2,] 0.000000 -2.123106    0
## [3,] 0.000000  0.000000    2
## 
## $固有値ベクトル
##            [,1]       [,2]          [,3]
## [1,] -0.4856151 -0.3229566  7.071068e-01
## [2,]  0.3600150 -0.9257095 -8.159879e-17
## [3,]  0.7965973  0.1968782  7.071068e-01
## 
## $固有値の証明
##               [,1]          [,2]          [,3]
## [1,]  6.123106e+00  1.462047e-16 -3.293806e-16
## [2,] -2.674185e-16 -2.123106e+00 -1.803570e-16
## [3,] -2.806457e-16 -1.277868e-16  2.000000e+00
data <- matrix(c(8,8,10,2,-8,-7,-10,-1,-3,-4,-3,-1,8,8,10,2),4,4,byrow=TRUE)
data
##      [,1] [,2] [,3] [,4]
## [1,]    8    8   10    2
## [2,]   -8   -7  -10   -1
## [3,]   -3   -4   -3   -1
## [4,]    8    8   10    2
固有値証明1(data)
## $固有値
##      [,1] [,2] [,3]         [,4]
## [1,]   -3    0    0 0.000000e+00
## [2,]    0    2    0 0.000000e+00
## [3,]    0    0    1 0.000000e+00
## [4,]    0    0    0 8.569672e-16
## 
## $固有値ベクトル
##            [,1]          [,2]       [,3]       [,4]
## [1,]  0.5547002 -5.773503e-01  0.6324555 -0.7559289
## [2,] -0.5547002  5.773503e-01 -0.3162278  0.3779645
## [3,] -0.2773501 -1.033334e-16 -0.3162278  0.3779645
## [4,]  0.5547002 -5.773503e-01  0.6324555 -0.3779645
## 
## $固有値の証明
##               [,1]          [,2]          [,3]          [,4]
## [1,] -3.000000e+00 -2.847156e-15  2.046882e-15 -4.312269e-15
## [2,]  3.945282e-15  2.000000e+00  3.524191e-15 -4.155634e-15
## [3,]  2.983616e-15 -6.766506e-16  1.000000e+00 -9.119224e-16
## [4,] -1.231682e-15  1.538370e-15 -1.404333e-15  2.014199e-15

固有値の証明2

-非正方行列 特異値分解

svd()関数を使用して、特異値分解を行ないます。

M = UDV’

M: m行n列の行列

U: m行m列のユニタリ行列

D: 対角行列

V’: n行n列のユニタリ行列の随伴行列(複素共役&転置行列)

"固有値証明2" <- function(data){
  A1 <- svd(data)   #特異値分解
  D <- diag(A1$d)
  U <- A1$u
  V <- A1$v
  
  # U[,1;2]%*%D[1:2,1:2]%*%t(V[,1:2])#2次元で近似
  a <- U[,1:2]%*%D[1:2,1:2]%*%t(V[,1:2])
  a1 <- t(U)%*%U 
  a2 <- t(V)%*%V
  
  a3 <- t(data)%*%data
  a4 <- t(U%*%D%*%t(V))%*%(U%*%D%*%t(V))
  a5 <- V%*%D^2%*%t(V)
  
  a6 <- data%*%t(data)
  a7 <- (U%*%D%*%t(V))%*%t(U%*%D%*%t(V))
  a8 <- U%*%D^2%*%t(U)
  
  list("U^t U=I"=a1,"V^t =I"=a2,
       "t(data)%*%data"=a3,
       "t(U%*%D%*%t(V))%*%(U%*%D%*%t(V))"=a4,
       "V%*%D^2%*%t(V)"=a5,
       "data%*%t(data)"=a6,"(U%*%D%*%t(V))%*%t(U%*%D%*%t(V))"=a7,"U%*%D^2%*%t(U)"=a8,
       "data"=data,
       "U[,1:2]%*%D[1:2,1:2]%*%t(V[,1:2]):2次元で近似"=a)
}
data <- matrix(c(36,64,59,18,72,
                 57,28,54,29,82,
                 46,48,39,30,88),5,3)
固有値証明2(data)
## $`U^t U=I`
##               [,1]          [,2]          [,3]
## [1,]  1.000000e+00 -1.349832e-16  1.512462e-17
## [2,] -1.349832e-16  1.000000e+00 -7.840137e-17
## [3,]  1.512462e-17 -7.840137e-17  1.000000e+00
## 
## $`V^t =I`
##               [,1]         [,2]          [,3]
## [1,]  1.000000e+00 1.319542e-16 -8.402567e-18
## [2,]  1.319542e-16 1.000000e+00  8.544191e-17
## [3,] -8.402567e-18 8.544191e-17  1.000000e+00
## 
## $`t(data)%*%data`
##       [,1]  [,2]  [,3]
## [1,] 14381 13456 13905
## [2,] 13456 14514 14158
## [3,] 13905 14158 14585
## 
## $`t(U%*%D%*%t(V))%*%(U%*%D%*%t(V))`
##       [,1]  [,2]  [,3]
## [1,] 14381 13456 13905
## [2,] 13456 14514 14158
## [3,] 13905 14158 14585
## 
## $`V%*%D^2%*%t(V)`
##       [,1]  [,2]  [,3]
## [1,] 14381 13456 13905
## [2,] 13456 14514 14158
## [3,] 13905 14158 14585
## 
## $`data%*%t(data)`
##       [,1]  [,2]  [,3] [,4]  [,5]
## [1,]  6661  6108  6996 3681 11314
## [2,]  6108  7184  7160 3404 11128
## [3,]  6996  7160  7918 3798 12108
## [4,]  3681  3404  3798 2065  6314
## [5,] 11314 11128 12108 6314 19652
## 
## $`(U%*%D%*%t(V))%*%t(U%*%D%*%t(V))`
##       [,1]  [,2]  [,3] [,4]  [,5]
## [1,]  6661  6108  6996 3681 11314
## [2,]  6108  7184  7160 3404 11128
## [3,]  6996  7160  7918 3798 12108
## [4,]  3681  3404  3798 2065  6314
## [5,] 11314 11128 12108 6314 19652
## 
## $`U%*%D^2%*%t(U)`
##       [,1]  [,2]  [,3] [,4]  [,5]
## [1,]  6661  6108  6996 3681 11314
## [2,]  6108  7184  7160 3404 11128
## [3,]  6996  7160  7918 3798 12108
## [4,]  3681  3404  3798 2065  6314
## [5,] 11314 11128 12108 6314 19652
## 
## $data
##      [,1] [,2] [,3]
## [1,]   36   57   46
## [2,]   64   28   48
## [3,]   59   54   39
## [4,]   18   29   30
## [5,]   72   82   88
## 
## $`U[,1:2]%*%D[1:2,1:2]%*%t(V[,1:2]):2次元で近似`
##          [,1]     [,2]     [,3]
## [1,] 35.02459 55.32925 48.60477
## [2,] 65.46595 30.51099 44.08524
## [3,] 54.72105 46.67070 50.42673
## [4,] 19.12426 30.92571 26.99773
## [5,] 74.03737 85.48975 82.55931