我正试图将一个matlab代码转换成C。matlab代码使用了3x3矩阵的奇异值分解(SVD),我用C语言用数值累加实现了这个分解在某些情况下,我测试了matlab和C之间的不同,或者第二列和第三列被交换,或者一些值是相反的在某些情况下,这些值是相同的下面是一些例子:
Expl1:(不考虑舍入误差的相同值)
Matlab软件:

   -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

Expl2:(交换了第2列和第3列)
Matlab软件:
   -0.0309    0.1010    0.9944
   -0.0073   -0.9949    0.1008
    0.9995   -0.0042    0.0315

C:
   -0.0309    0.9944    0.1010
   -0.0074    0.1008   -0.9949
    0.9995    0.0315   -0.0042

Expl3:(相反的值)
Matlab软件:
   -0.1712   -0.8130   -0.5566
   -0.8861   -0.1199    0.4476
    0.4306   -0.5698    0.6999

C:
  -0.1712    0.8130    0.5566
  -0.8861    0.1199   -0.4477
   0.4307    0.5698   -0.6999

这种差异会导致错误的结果吗?

最佳答案

如果矩阵的右奇异向量具有不同的奇异值,则它在乘以单位相位因子时是唯一的当考虑实奇异向量时,这归结为符号的变化(更多信息here)。
此外,由于奇异向量对应于某些奇异值(对角项为∑),因此当奇异值在∑对角上的位置改变时,它们的顺序可以改变。
这些更改是否会导致错误的结果,在很大程度上取决于您稍后在代码中打算如何处理正确的奇异向量。

10-08 18:39