如何计算秩缺陷矩形矩阵的标准正交基

时间:2013-07-01 15:51:38

标签: rank orthogonal

我正在做一个需要计算矩形矩阵的标准正交基的项目,这个矩阵可能是也可能不是排名不足。在matlab中,我们可以调用基于svd的函数orth()来处理这个问题,但是我需要在C中实现它。我试图使用Gram-Schmidt,当矩阵是满秩时它运行良好。 C中有没有可以解决这个问题的库?或者在C中实现它的一些提示?非常感谢。

2 个答案:

答案 0 :(得分:1)

当矩阵的秩缺乏k时(例如,如果4x3矩阵的秩为2,则k = 1),则需要生成k个随机向量,然后减去先前生成的其他正交归一化向量的分量来自随机向量的Gram-Schmidt。

您需要自己生成矢量,如下所示:

2x2矩阵

1 1
0 0

Gram-Schmidt,你会得到

1 0
0 0

这是因为原始列空间仅包含单个方向。当您检测到这种情况时norm(v2) < eps,其中eps是一个足够小的浮点数,如1e-10),为第二个向量v2生成一个随机向量,比如说< / p>

1  0.2
0 -0.3

减去v1

的组成部分
1  0
0 -0.3

并规范化当前v2

1  0
0  1

通过这种方式,您可以构建原始列空间中不存在的路线。

请注意,如果您需要考虑计算速度,此时或您的生产代码,应尽可能避免使用SVD。尽管SVD和基质 - 基质产物都具有O(N ^ 3)复杂性,但是与基质 - 基质产物相比,SVD通常具有大于10倍的因子。事实上,在这样的问题中,SVD在你的研究中可能是有用的,但更好的工具应该是QR分解,这本质上是Gram-Schidt,但是在不同的操作顺序中具有更好的数值稳定性。

答案 1 :(得分:0)

试用LAPACK库。它有svd例程(以及许多其他例程)。