Матрица Мура-Пенроуза, обратная в R

Я пытаюсь найти матрицу Мура-Пенроуза, обратную A в R, поскольку A прямоугольная, а затем я следую коду. И один обратный, который я нахожу, это AI, и когда я вычисляю AAI, 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

> (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
`

person Lexie Walker    schedule 23.04.2017    source источник


Ответы (1)


Псевдообратная А+ действительнозначной матрицы А удовлетворяет 4 условиям:
а) А А+ А = А
б) А+ А А+ = А+
в) t(А А+) = А А+
г) t(А+ А) = А+ А

Вот код:

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
person Marco Sandri    schedule 23.04.2017