C中的奇异值分解(SVD)

问题描述 投票:-1回答:1

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

c computer-vision svd
1个回答
0
投票

晚于晚会,但可供将来参考,可以从2.6章SVD算法第67页“ William H. Press等人的C中的数字食谱”中获得C中的SVD实现。引用书

这里是用于构造任意值的奇异值分解的算法矩阵。

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

Warning

:在C语言中对SVD实施进行谷歌搜索时,请检查对输入矩阵进行了哪些假设。有些假设矩阵是正方形,有些则不是,等等...

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

© www.soinside.com 2019 - 2024. All rights reserved.