-正方行列
"固有値証明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
-非正方行列 特異値分解
svd()関数を使用して、特異値分解を行ないます。
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