C 奇异值分解的不同结果
我正在尝试将一个matlab代码转换为C。matlab代码使用3x3矩阵的奇异值分解(SVD),我使用数值接收器在C中实现。matlab代码稍后会使用右奇异向量,在某些情况下,我测试的matlab和C不同,或者第二列和第三列被交换,或者某些值是相反的。在某些情况下,这些值是相同的。以下是一些例子: 解释1:(相同的值,不考虑舍入误差) Matlab:C 奇异值分解的不同结果,c,matlab,linear-algebra,C,Matlab,Linear Algebra,我正在尝试将一个matlab代码转换为C。matlab代码使用3x3矩阵的奇异值分解(SVD),我使用数值接收器在C中实现。matlab代码稍后会使用右奇异向量,在某些情况下,我测试的matlab和C不同,或者第二列和第三列被交换,或者某些值是相反的。在某些情况下,这些值是相同的。以下是一些例子: 解释1:(相同的值,不考虑舍入误差) Matlab: -0.3939 0.9010 0.1819 0.6583 0.1385 0.7399 0.6414
-0.3939 0.9010 0.1819
0.6583 0.1385 0.7399
0.6414 0.4112 -0.6477
C:
-0.3939 0.9010 0.1819
0.6584 0.1385 0.7398
0.6414 0.4112 -0.6477
解释2:(交换了第2列和第3列)
Matlab:
-0.0309 0.1010 0.9944
-0.0073 -0.9949 0.1008
0.9995 -0.0042 0.0315
C:
解释3:(相反的值)
Matlab:
-0.1712 -0.8130 -0.5566
-0.8861 -0.1199 0.4476
0.4306 -0.5698 0.6999
C:
这种差异会导致错误的结果吗?如果矩阵具有不同的奇异值,则矩阵的右奇异向量在乘以单位相位因子之前是唯一的。当考虑实奇异向量时,这归结为符号的变化(更多信息) 此外,由于奇异向量对应于某些奇异值(∑的对角线条目),因此当奇异值在∑对角线上的位置改变时,它们的顺序可能会改变
这些更改是否会导致错误的结果在很大程度上取决于您打算在以后的代码中如何处理正确的奇异向量 这些矩阵是奇异值分解形式(M=U∑V*)的哪一部分?这些矩阵对应于V’(转置右奇异向量)
-0.1712 -0.8130 -0.5566
-0.8861 -0.1199 0.4476
0.4306 -0.5698 0.6999
-0.1712 0.8130 0.5566
-0.8861 0.1199 -0.4477
0.4307 0.5698 -0.6999