SVD与WolframAlpha的不同解决方案

时间:2014-05-07 11:19:03

标签: java opencv

我发现Java中SVDecomp函数的结果与WolframAlpha的结果非常不同。

对于OpenCV和WolframAlpha

,输入矩阵完全相同
{{0.2229632566816983, 18.15370964847313, 4.87085706173828},
{-14.31728552253419, 2.642676839378287, -33.69501515553716},
{-2.982323803144884, 33.70091859922499, 0.8997452211463326}}

以下是WolframAlpha的结果:

U = (-0.441818862735368 | 0.214800119324567 | -0.871009185525260
-0.245069575462508 | -0.962880608842737 | -0.113145200062862
-0.862981457340684 | 0.163468167704881 | 0.478059789601005)
W = (38.5925763913943 | 0 | 0
0 | 36.8337256561100 | 0
0 | 0 | 3.76859638821616×10^-10)
V = (0.155053443270976 | 0.362336795687042 | 0.919059560758203
-0.978207790691182 | 0.186347267503429 | 0.0915653543928191
0.138086740713550 | 0.913228745925823 | -0.383334461865688)

以下是OpenCV在使用SCDecomp时产生的内容:

 U: [0.4418188627353685, 0.2148001193245664, -0.8710091855252606;
0.2450695754625076, -0.9628806088427376, -0.113145200062862;
 0.8629814573406845, 0.1634681677048805, 0.4780597896010051]
 W: [38.59257639139431; 36.83372565611004; 3.768597946996713e-10]
 VT:[-0.155053443270976, 0.3623367956870423, 0.9190595607582029;
 0.9782077906911818, 0.1863472675034285, 0.09156535439281914;
-0.1380867407135498, 0.9132287459258235, -0.3833344618656882]

提及:OpenCV中的W不是矩阵,值的符号有时也不同。

这是一个错误吗?这是我的SourceCode

Core.SVDecomp(E, w, u, vt);

1 个答案:

答案 0 :(得分:1)

我认为结果并不相同:

  • 两个 U 矩阵包含相同的向量,第一个(每个矩阵的第一列)与另一个相反(这里没有问题只是符号更改)

  • W是相同的但在第一种情况下作为对角矩阵返回,在第二种情况下作为向量返回(仅返回主对角线)。

  • V 矩阵与 U 矩阵的情况相同(第一个向量相反)。

所以结果是一样的。