我需要在-1/2的幂上计算矩阵 A ,这基本上意味着初始矩阵的平方根的倒数。
如果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并不总是单数,因此我们必须为此问题提供一般解决方案。
答案 0 :(得分:4)
您的问题涉及两个不同的问题:
<强>反强>
奇异矩阵不存在逆。在一些应用中,Moore-Penrose或一些其他广义逆可以作为逆的合适替代。但请注意,计算机数字在大多数情况下会出现舍入错误;这些错误可能会使单个矩阵在计算机上显得规则,反之亦然。
如果A
总是展示你给出的矩阵的块结构,我建议只考虑它的非对角块
A3 = A[ c( 1, 3, 4 ), c( 1, 3, 4 ) ]
A3
[,1] [,2] [,3]
[1,] 6.041358e+11 5.850849e+13 6.767194e+13
[2,] 5.850849e+13 1.066390e+16 1.087463e+16
[3,] 6.767194e+13 1.087463e+16 1.131599e+16
代替所有A
,以提高效率和减少舍入问题。其余的1对角线条目在平方根的倒数中保持为1,因此不需要使用它们来混淆计算。为了了解这种简化的影响,请注意R可以计算
A3inv = solve(A3)
虽然无法计算
Ainv = solve(A)
但是我们不需要A3inverse,下面将会明白。
平方根
作为一般规则,矩阵A
的平方根仅在矩阵具有对角Jordan正规形式(https://en.wikipedia.org/wiki/Jordan_normal_form)时才存在。因此,根据需要,没有真正普遍的问题解决方案。
A3 = T·J·T -1
可以用R计算:
X = eigen(A3)
T = X$vectors
J = Diagonal( x=X$values )
要测试此配方,请比较
Tinv = solve(T)
T %*% J %*% Tinv
A3
。如果A3
具有对角Jordan正规形式,它们应匹配(最多为舍入误差)。
由于J
是对角线,因此它的平方根只是平方根的对角矩阵
Jsqrt = Diagonal( x=sqrt( X$values ) )
以便Jsqrt·Jsqrt = J
。而且,这意味着
(T·Jsqrt·T -1)²= T·Jsqrt·T -1·T·Jsqrt·T -1 = T·Jsqrt·Jsqrt·T -1 = T·J·T -1 = A3 < / p>
所以我们实际上得到了
√A3= T·Jsqrt·T -1
或在R代码中
A3sqrt = T %*% Jsqrt %*% Tinv
要测试此,请计算
A3sqrt %*% A3sqrt
并与A3
进行比较。
反向的平方根
一旦计算出对角Jordan正规形式,就可以容易地计算逆的平方根(或者,同样地,平方根的倒数)。而不是J
使用
Jinvsqrt = Diagonal( x=1/sqrt( X$values ) )
并计算,类似于上面,
A3invsqrt = T %*% Jinvsqrt %*% Tinv
并观察
A3·A3invsqrt²= ... = T·(J /√J/√J)·T -1 = 1
单位矩阵,以便A3invsqrt是所需的结果。
如果A3不可逆,可以通过将Jinvsqrt
中的所有未定义条目替换为0来计算广义逆(不一定是Moore-Penrose),但如上所述,这应该通过根据整体应用及其对圆角误差的稳定性进行适当的护理。
如果A3没有对角Jordan正规形式,则没有平方根,因此上述公式将产生一些其他结果。为了在运气不好的情况下不遇到这种情况,最好实施一项测试是否
A3invsqrt %*% A3 %*% A3invsqrt
足够接近你认为的1矩阵(这只适用于A3首先是可逆的)。
PS:请注意,您可以根据自己的喜好为Jinvsqrt
的每个对角线条目添加符号±前缀。