首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java SVD JAMA错误结果

java SVD JAMA错误结果
EN

Stack Overflow用户
提问于 2012-05-16 17:32:34
回答 1查看 720关注 0票数 0

我有这个数组

代码语言:javascript
复制
double a[][] = {{1,1,1}, {0,1,1} , { 1,0,0}
        ,{0,1,0},{1,0,0},{1,0,1},{1,1,1},{1,1,1},{1,0,1},{0,2,0},{0,1,1}};

我想得到SVD (奇异值解压),这是代码

代码语言:javascript
复制
Matrix A = new Matrix(a);
        SingularValueDecomposition s = A.svd();
        Matrix U = s.getU();
        Matrix S = s.getS();
        Matrix V = s.getV();

        Matrix K = U.times(S.times(V.inverse()));
        System.out.println("A=\n" + A);
        System.out.println("U=\n" + U);
        System.out.println("S=\n" + S);
        System.out.println("V=\n" + V);
        System.out.println("K=\n" + K);

我使用了JAMA库,我得到了以下结果

代码语言:javascript
复制
U=
0.42012156898152025   -0.07479925424066838   -0.04597243910578701   
0.29948675880470416   0.20009225506128975   0.4078276625537902   
0.12063481017681585   -0.27489150930195816   -0.4538001016595771   
0.15756100229407313   0.3046476172068067   -0.2006466962808193   
0.12063481017681585   -0.27489150930195816   -0.4538001016595771   
0.2625605666874469   -0.379446871447475   0.15467425717503247   
0.42012156898152014   -0.0747992542406683   -0.04597243910578692   
0.42012156898152014   -0.0747992542406683   -0.04597243910578692   
0.2625605666874469   -0.379446871447475   0.15467425717503247   
0.31512200458814627   0.6092952344136134   -0.4012933925616386   
0.29948675880470416   0.20009225506128975   0.4078276625537902   

S=
4.098871971532176   0.0   0.0   
0.0   2.361570801317849   0.0   
0.0   0.0   1.2736686819384786   

V=
0.49446664222485476   -0.6491757618976977   -0.5779909773443018   
0.6458223761096932   0.7194469174866516   -0.2555574131873014   
0.581735505399926   -0.24691489036406603   0.7749947346102383 

但是V是错的,应该是这样的

V= -0.49446664222485476 0.6491757618976977 -0.5779909773443018

代码语言:javascript
复制
 -0.6458223761096932   0.7194469174866516   -0.2555574131873014
代码语言:javascript
复制
 -0.581735505399926    0.24691489036406603   0.7749947346102383 

这真的是一个拥抱的错误,因为在multibluein之后,我得到了这个matirx,看看E-16

代码语言:javascript
复制
K=
1.0000000000000013   1.0000000000000004   1.000000000000001   
4.996003610813204E-16   1.0   0.9999999999999998   
1.0000000000000002   -3.885780586188048E-16   8.881784197001252E-16   
-1.1102230246251565E-16   1.0000000000000002   1.3877787807814457E-16   
1.0000000000000002   -3.885780586188048E-16   8.881784197001252E-16   
1.0000000000000004   -5.551115123125783E-16   1.0000000000000004   
1.0000000000000009   1.0000000000000002   1.0000000000000007   
1.0000000000000009   1.0000000000000002   1.0000000000000007   
1.0000000000000004   -5.551115123125783E-16   1.0000000000000004   
-2.220446049250313E-16   2.0000000000000004   2.7755575615628914E-16   
4.996003610813204E-16   1.0   0.9999999999999998   

请帮帮我,我该怎么做,哪里错了,是JAMA错了吗?!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-21 23:53:21

结果看起来是正确的。在矩阵K中,像1.0000000000000013和4.996003610813204E-16这样的值分别非常接近于1和0。这里发生了浮点错误,这就是数字稍有偏差的原因。Matlab也做同样的事情。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10615757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档