2017-04-23 111 views
0

我試圖找到在R的摩爾 - 彭羅斯矩陣的逆矩陣,因爲A是矩形,那麼我下面的代碼。和一個逆我發現是AI,當我計算AI A是到A.不同摩爾 - 彭羅斯矩陣逆在R

> A = matrix(
+ c(1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,0,1), 
+ nrow=5, ncol=4, byrow = TRUE) 

> A 
    [,1] [,2] [,3] [,4] 
[1,] 1 1 1 1 
[2,] 1 1 1 1 
[3,] 0 1 1 1 
[4,] 0 0 1 1 
[5,] 0 0 0 1 

> (AA <- t(A) %*% A) 
    [,1] [,2] [,3] [,4] 
[1,] 2 2 2 2 
[2,] 2 3 3 3 
[3,] 2 3 4 4 
[4,] 2 3 4 5 

> (AAI <- ginv(AA)) 
       [,1]   [,2]   [,3]   [,4] 
[1,] 1.500000e+00 -1.000000e+00 5.551115e-16 2.220446e-16 
[2,] -1.000000e+00 2.000000e+00 -1.000000e+00 -1.110223e-16 
[3,] 1.332268e-15 -1.000000e+00 2.000000e+00 -1.000000e+00 
[4,] -2.220446e-16 -1.110223e-16 -1.000000e+00 1.000000e+00 

> AI <- AAI %*% t(A) 

> AI 
       [,1]   [,2]   [,3]   [,4]   [,5] 
[1,] 5.000000e-01 5.000000e-01 -1.000000e+00 7.771561e-16 2.220446e-16 
[2,] 3.330669e-16 3.330669e-16 1.000000e+00 -1.000000e+00 -1.110223e-16 
[3,] 2.220446e-16 2.220446e-16 -1.110223e-15 1.000000e+00 -1.000000e+00 
[4,] -1.110223e-16 -1.110223e-16 1.110223e-16 2.220446e-16 1.000000e+00` 

> A %*% AI %*% A 
       [,1]   [,2]   [,3] [,4] 
[1,] 1.000000e+00 1.000000e+00 1.000000e+00 1 
[2,] 1.000000e+00 1.000000e+00 1.000000e+00 1 
[3,] 8.881784e-16 1.000000e+00 1.000000e+00 1 
[4,] 2.220446e-16 -7.771561e-16 1.000000e+00 1 
[5,] -2.220446e-16 -1.110223e-16 1.110223e-16 1 
` 

回答

1

僞逆A中的實值矩陣的+ A滿足4個條件:
a)一個A + A = A
b)A + A A + = A +
C)T(A A +)= A A +
d)T(A + A)= A + A

下面是代碼:

A = matrix(
    c(1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,0,1), 
    nrow=5, ncol=4, byrow = TRUE) 
A 
    [,1] [,2] [,3] [,4] 
[1,] 1 1 1 1 
[2,] 1 1 1 1 
[3,] 0 1 1 1 
[4,] 0 0 1 1 
[5,] 0 0 0 1 

library(MASS) 
pinvA <- round(ginv(A),14) 
pinvA 
    [,1] [,2] [,3] [,4] [,5] 
[1,] 0.5 0.5 -1 0 0 
[2,] 0.0 0.0 1 -1 0 
[3,] 0.0 0.0 0 1 -1 
[4,] 0.0 0.0 0 0 1 

A %*% pinvA %*% A == A 
    [,1] [,2] [,3] [,4] 
[1,] TRUE TRUE TRUE TRUE 
[2,] TRUE TRUE TRUE TRUE 
[3,] TRUE TRUE TRUE TRUE 
[4,] TRUE TRUE TRUE TRUE 
[5,] TRUE TRUE TRUE TRUE 

(pinvA %*% A %*% pinvA) == pinvA 
    [,1] [,2] [,3] [,4] [,5] 
[1,] TRUE TRUE TRUE TRUE TRUE 
[2,] TRUE TRUE TRUE TRUE TRUE 
[3,] TRUE TRUE TRUE TRUE TRUE 
[4,] TRUE TRUE TRUE TRUE TRUE 

t(A %*% pinvA) == A %*% pinvA 
    [,1] [,2] [,3] [,4] [,5] 
[1,] TRUE TRUE TRUE TRUE TRUE 
[2,] TRUE TRUE TRUE TRUE TRUE 
[3,] TRUE TRUE TRUE TRUE TRUE 
[4,] TRUE TRUE TRUE TRUE TRUE 
[5,] TRUE TRUE TRUE TRUE TRUE 

t(pinvA %*% A) == pinvA %*% A 
    [,1] [,2] [,3] [,4] 
[1,] TRUE TRUE TRUE TRUE 
[2,] TRUE TRUE TRUE TRUE 
[3,] TRUE TRUE TRUE TRUE 
[4,] TRUE TRUE TRUE TRUE