matlab pinv 实现_R ginv和Matlab pinv产生不同的结果

与MATLAB pinv()函数相比,R中的MASS包中的ginv()函数产生完全不同的值.他们都宣称生产矩阵的Moore-Penrose广义逆.

我试图为R实现设置相同的容差,但差异仍然存在.

> MATLAB默认tol:max(size(A))* norm(A)* eps(class(A))

> R默认tol:sqrt(.Machine $double.eps)

再生产:

R:

library(MASS)

A

ginv(A)

输出:

[,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)

输出:

$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)

输出:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值