我需要计算矩阵A的 -1/2 次方,这基本上意味着初始矩阵逆的平方根。
如果 A 是奇异的,则使用 MASS 包中的ginv函数计算 Moore-Penrose 广义逆,否则使用求解函数计算正则逆。
矩阵 A 定义如下:
A <- structure(c(604135780529.807, 0, 58508487574887.2, 67671936726183.9,
0, 0, 0, 1, 0, 0, 0, 0, 58508487574887.2, 0, 10663900590720128,
10874631465443760, 0, 0, 67671936726183.9, 0, 10874631465443760,
11315986615387788, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1), .Dim = c(6L,
6L))
我通过比较等级和维度来检查奇异性。
rankMatrix(A) == nrow(A)
上面的代码返回 FALSE,所以我必须使用ginv来取反。A的倒数如下:
A_inv <- ginv(A)
使用 expm 包中的 sqrtm 函数计算逆矩阵的平方根。
library(expm)
sqrtm(A_inv)
该函数返回以下错误:
solve.default(X[ii, ii] + X[ij, ij], S[ii, ij] - sumU) 中的错误:
Lapack 例程 zgesv:系统完全是奇异的
那么在这种情况下我们如何计算平方根呢?请注意,矩阵 A 并不总是奇异的,因此我们必须为该问题提供一个通用解决方案。