如何求解矩阵的平方根?
矩阵分解后,将对角矩阵中对角元素进行平方,再复原
# 求负数的平方根: sqrt(as.complex(c(4,9,-4,-9,16)))# 2+0i 3+0i 0+2i 0+3i 4+0i
下面可证明matlab,R,python中计算高维协方差矩阵的特征根时,会因为计算精度导致特征根出现负值这一错误计算结果
例如:
rm(list=ls())
N=500;L=1000;Q=L/N #Q>1
aw <- matrix(round(rnorm(5000,0,0.35)),N,L)+matrix(round(rnorm(5000,0,1.355))*1.34,N,L);
# hist(aw)
round(aw[1:5,1:15],2)
aw <- t(apply(aw,1,scale))
cr.1 <- (aw)%*%t(aw)/(L-1)
round(cr.1[1:5,1:5],2)
# hist(cr.1)
# a.seig=eigen(cr.1);
# round(a.seig$values,4)
# a.seig$values[496:500]
# # rm(cr.1)#相关系数矩阵的特征值和特征向量
# which(a.seig$values<0)
看到没有,有很多近似与0的负特征根
如果使用python模拟的话,甚至还可能会出现复数特征根这一现象