我正在通过使用R命令学习特征值,cov的特征向量,我首先尝试使用2d矩阵,结果似乎正确:
x <- c(60, 35, 74, 30, 80)
y <- c(58, 40, 68, 40, 70)
m <- cbind(x, y)
cv <- cov(m)
eig <- eigen(cv)
det(cv %*% eig$vectors) # 895.4
det(eig$values * diag(2) %*% eig$vectors) # 895.4
cv %*% eig$vectors
# [,1] [,2]
# x -604.7476 0.6751113
# y -391.0320 -1.0440884
solve(eig$vectors, eig$values*diag(2))
# [,1] [,2]
# [1,] -604.7476 -0.6751113
# [2,] 391.0320 -1.0440884
然后,我尝试使用3d矩阵:
x <- c(60, 35, 74, 30, 80)
y <- c(58, 40, 68, 40, 70)
z <- c(25, 75, 50, 60, 50)
m <- cbind(x, y, z)
cv <- cov(m)
eig <- eigen(cv)
det(cv %*% eig$vectors) # -178424.4
det(eig$values * diag(3) %*% eig$vectors) # -178424.4
cv %*% eig$vectors
# [,1] [,2] [,3]
# x -639.0223 78.10751 0.56623319
# y -416.7254 43.54886 -0.89605389
# z 389.0068 174.95930 -0.02974941
solve(eig$vectors, eig$values*diag(3))
# [,1] [,2] [,3]
# [1,] -639.0223 -95.61750 0.48169216
# [2,] 340.4124 43.54886 0.94419557
# [3,] 457.2808 -166.03865 -0.02974941
我的问题是:为什么“cv%%eig $ vectors”和“solve(eig $ vectors,eig $ values diag(n))”得到2d矩阵相同的数字,但结果3d矩阵的对角线数字是否相同?
答案 0 :(得分:1)
cv %% eig$vectors
和solve(eig$vectors, eig$valuesdiag(n))
也不相等。
第一个等于eig$vectors %*% diag(eig$values)
,第二个等于t(eig$vectors) %*% diag(eig$values)
- 请注意转置。
要查看此内容,请cv
展开eig$vectors %*% diag(eig$values) %*% t(eig$vectors)
并注意eig$vectors
是正交的(因为cv
是对称的),因此其转置等于其反转。
注意det(eig $ vectors)是1(它必须是1或-1,因为它是正交的),如果A和B是任何两个适形的矩阵,v是矢量,那么:
所以我们有:
det(cv %*% eig$vectors)
= det(eig$vectors %*% diag(eig$values) %*% t(eig$vectors) %*% eig$vectors)
= det(eig$vectors) * det(diag(eig$values)) * det(t(eig$vectors)) * det(eig$vectors)
= 1 * prod(eig$values) * 1 * 1
= prod(eig$values)
det(eig$values * diag(2) %*% eig$vectors)
= det(diag(eig$values) %*% eig$vectors)
= det(diag(eig$values)) * det(eig$vectors)
= prod(eig$values) * 1
= prod(eig$values)