c - C 中的奇异值分解 (SVD)

标签 c computer-vision svd

我正在用 C 语言进行五点基本矩阵估计,我需要实现 SVD。我在 c 中找到了一个开源实现 http://www.public.iastate.edu/~dicook/JSS/paper/code/svd.c适用于 mxn 矩阵,其中 m>n。问题是我要分解的矩阵是 (5x9) 矩阵,因此 n>m。我需要正确的正交变换矩阵 v,其中 svd(A)=udv' 为了确保 (m>n) 我尝试做 svd(transpose(A))=u2*d2*v2 我发现u=v2,但是v与u2不同,我需要v。 如何在 C 语言中成功实现 5x9 矩阵的 SVD?

最佳答案

虽然迟到了,但为了将来的引用,可以从《William H. Press 等人的 C 语言数值食谱》一书中获取 SVD 的 C 实现,第 2.6 章,第 67 页,SVD算法。引用本书内容

Here is the algorithm for constructing the singular value decomposition of any matrix.

所以我假设要分解的矩阵可以是正方形,m < nn < m

警告:在谷歌搜索 C 语言中的 SVD 实现时,请检查对输入矩阵做出的假设。有些假设矩阵是方阵,有些则不是,等等......

或者,您可以在 LAPACK 中使用 SVD。 Stephen Canon 在另一个关于如何使用 dgesdd 的问题上提供了代码示例。执行 SVD。 (链接here)

关于c - C 中的奇异值分解 (SVD),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28539984/

相关文章:

c# - 使用 Mathnet 数字库进行 Svd 重组似乎是错误的

c - `(void)struct_pointer` 的用途是什么?

C 字符串和指针

graphics - 仅用一张图像或相机,旋转矩阵真正代表什么?

python - 是否可以使用 CNN 对同一对象的图像 block 进行分类,但区域不同?

OpenCV 背景减法 : How to precompute background model?

java - 无法启用 JNI 调试器

c - Linux DMA : Using the DMAengine for scatter-gather transactions

python - 如何区分Python或Matlab是否错误/故障?

r - R中非常大的矩阵的SVD