2017-04-23 1 views
0

J'essaie de trouver la matrice de Moore-Penrose inverse de A dans R puisque A est rectangulaire puis i suivant le code. Et une inverse que je trouve est AI, et quand je calcule un AI A est différent de A.matrice de Moore-Penrose inverse dans 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 
` 

Répondre

1

A pseudoinverse A + d'une matrice valeur réelle A satisfaire 4 conditions:
a) A + A = A
b) A + A A + = A +
c) t (A A +) = A A +
d) t (A + A) = A + A

Voici le code:

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