ginv()
la funzione dal pacchetto MASS
in R produce valori completamente diversi rispetto alla funzione MATLAB pinv()
. Entrambi dichiarano di produrre un'inversione generalizzata di Moore-Penrose di una matrice.R ginv e Matlab pinv producono risultati diversi
Ho provato a impostare la stessa tolleranza per l'implementazione R ma la differenza persiste.
- MATLAB predefinito tol:
max(size(A)) * norm(A) * eps(class(A))
- R predefinito tol:
sqrt(.Machine$double.eps)
Riproduzione:
R:
library(MASS)
A <- matrix(c(47,94032,149, 94032, 217179406,313679,149,313679,499),3,3)
ginv(A)
uscite:
012. [,1] [,2] [,3]
[1,] 1.675667e-03 -8.735203e-06 5.545605e-03
[2,] -8.735203e-06 5.014084e-08 -2.890907e-05
[3,] 5.545605e-03 -2.890907e-05 1.835313e-02
svd(A)
uscite:
$d
[1] 2.171799e+08 4.992800e+01 2.302544e+00
$u
[,1] [,2] [,3]
[1,] -0.0004329688 0.289245088 -9.572550e-01
[2,] -0.9999988632 -0.001507826 -3.304234e-06
[3,] -0.0014443299 0.957253888 2.892454e-01
$v
[,1] [,2] [,3]
[1,] -0.0004329688 0.289245088 -9.572550e-01
[2,] -0.9999988632 -0.001507826 -3.304234e-06
[3,] -0.0014443299 0.957253888 2.892454e-01
MATLAB:
A = [47 94032 149; 94032 217179406 313679; 149 313679 499]
pinv(A)
uscite:
ans =
0.3996 -0.0000 -0.1147
-0.0000 0.0000 -0.0000
-0.1147 -0.0000 0.0547
SVD:
[U, S, V] = svd(A)
U =
-0.0004 0.2892 -0.9573
-1.0000 -0.0015 -0.0000
-0.0014 0.9573 0.2892
S =
1.0e+008 *
2.1718 0 0
0 0.0000 0
0 0 0.0000
V =
-0.0004 0.2892 -0.9573
-1.0000 -0.0015 -0.0000
-0.0014 0.9573 0.2892
Il numero di condizione ('cond') per quella matrice è abbastanza grande che indica che è vicino al singolare. Ma questo in sé e per sé non dovrebbe spiegare perché i risultati differiscono tanto. – horchler
Confermando che [Wolfram Alpha è d'accordo con MATLAB] (http://www.wolframalpha.com/input/?i=PseudoInverse%5B%7B%7B47.,+94032,+149%7D,%7B+94032,+217179406 , + 313679% 7D,% 7B + 149, + 313679, + 499% 7D% 7D% 5D) – MichaelChirico
In seguito alla definizione, 'A% *% ginv (A)% *% A' in' R' assomiglia molto a ' A', mentre il risultato 'MATLAB' produce qualcosa di molto diverso da' A', a quanto pare. – nicola