如何求解矩阵的平方根?

矩阵分解后,将对角矩阵中对角元素进行平方,再复原

# 求负数的平方根: 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模拟的话,甚至还可能会出现复数特征根这一现象