我正在用 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 < n
或n < m
警告:在谷歌搜索 C 语言中的 SVD 实现时,请检查对输入矩阵做出的假设。有些假设矩阵是方阵,有些则不是,等等......
或者,您可以在 LAPACK 中使用 SVD。 Stephen Canon 在另一个关于如何使用 dgesdd
的问题上提供了代码示例。执行 SVD。 (链接here)
关于c - C 中的奇异值分解 (SVD),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28539984/