R语言:计算矩阵的-1/2次幂

说明:

用R软件对多元数据进行Fisher判别时,需要求样本所服从的分布的方差∑的-1/2次幂

矩阵Σ为p*p的正交阵

求矩阵Σ的逆:solve(Σ)

求矩阵Σ的特征值和特征向量:eigen(Σ)

输入:eigen(Σ)$values 可得到矩阵A的特征值,

输入:eigen(Σ)$vectors 可到到一个矩阵,矩阵的列向量为列数所对应的特征值的特征向量;

由于Λ=Q-1ΣQ 即Σ=QΛQ-1,其中Λ=diag{λ12,......,λp},其中λ12,......,λp为Σ的特征值,

程序:

在这里以2*2的矩阵为例,Σ为矩阵:

226.96104,44.75779
44.75779,155.91916

> lamda
             [,1]         [,2]
[1,] 2.485803e+02 1.421085e-14
[2,] 7.105427e-15 1.342999e+02

R代码为:

1 lamda <- solve(eigen(Sigma)$vectors)%*%Sigma%*%(eigen(Sigma)$vectors)
2 sqrt(diag(lamda))
3 lamda_sqrt <- matrix(c(sqrt(diag(lamda))[1],0,0,sqrt(diag(lamda)[2])),nrow = 2,ncol = 2)
4 Sigma_sqrt <- (eigen(Sigma)$vectors)%*%lamda_sqrt%*%solve(eigen(Sigma)$vectors)
5 solve(Sigma_sqrt)

可以得到Σ的-1/2次幂:

> solve(Sigma_sqrt)
            [,1]        [,2]
[1,]  0.06775133 -0.00895483
[2,] -0.00895483  0.08196490

与此同时,如果用matlab,可直接输入A^(-1/2)即可,其中A为上文所述Sigma。

猜你喜欢

转载自www.cnblogs.com/Sombrero1/p/9080753.html