- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试将 matlab 代码转换为 C。matlab 代码使用 3x3 矩阵的奇异值分解 (SVD),我在 C 中使用数字 reciepes 实现了该矩阵。 matlab 代码稍后使用正确的奇异 vector ,在某些情况下,我测试了 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
这种差异会导致错误的结果吗?
最佳答案
如果矩阵具有不同的奇异值,则它的右奇异 vector 在乘以单位相位因子之前是唯一的。当考虑真正的奇异 vector 时,这归结为符号的变化(更多信息 here)。
另外,由于奇异 vector 对应于某些奇异值(Σ的对角线项),因此当奇异值在Σ对角线上的位置发生变化时,它们的顺序也会发生变化。
这些更改是否会导致错误结果在很大程度上取决于您打算稍后在代码中使用正确的奇异 vector 做什么。
关于c - SVD(奇异值分解)的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29047474/
我有一个尺寸为行 x 列 x 深度的 3D 图像。对于图像中的每个体素,我计算了一个 3x3 实对称矩阵。它们存储在数组 D 中,因此具有形状 (rows, cols, deps, 6)。 D 为图像
我正在研究一个单链表。在创建自己的链表时,我对打印自定义链表中的节点集合感到困惑。 我想知道,单向链表是否像堆栈一样以后进先出的方式显示其集合? 下面是我自己的 LinkedList 并且节点是一个类
我正在研究一个单链表。在创建自己的链表时,我对打印自定义链表中的节点集合感到困惑。 我想知道,单向链表是否像堆栈一样以后进先出的方式显示其集合? 下面是我自己的 LinkedList 并且节点是一个类
我是一名优秀的程序员,十分优秀!