我想知道为什么 SVD 计算在 Matlab 和 OpenCV 中的结果存在符号差异。我输入相同的矩阵
3.65E+06 -2.09E+06 0
YY = -2.09E+06 2.45E+06 0
0 0 0
[U,S,V] = svd(YY);//Matlab
-0.798728902689475 0.601691066917623 0
V = 0.601691066917623 0.798728902689475 0
0 0 1
cv::SVD::compute(YY, S, U, V);//opencv
0.798839 -0.601544 0
V = 0.601544 0.798839 0
0 0 1
我知道他们使用相同的算法,为什么会有符号差异? 谢谢
最佳答案
您使用的是哪个版本的 OpenCV?
来自 http://code.opencv.org/issues/1498 似乎最新版本的 OpenCV 不再使用 LAPACK 进行 SVD(我认为是 Matlab 使用的)。 因此,使用相同算法的假设可能不正确。
当然是 YY=USV'
如果您对 U 和 V 的第一列取反:
U(:,1)=-U(:,1);
V(:,1)=-V(:,1)
你会发现 USV' 仍然等于 YY。这适用于您的特定情况,因为 YY 是对称的 (YY=YY')。
关于matlab - SVD 在 Matlab 和 OpenCV 中计算不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16053380/