1

Math.NET Numerics 中如何实现 QR 分解?

是使用 Gram-Schimdt 还是使用 Givens 旋转?我感觉它是用 Gram-Schimdt 实现的,但我不确定。我找不到实现。

就结果而言,使用 Gram-Schimdt 的 QR 分解与使用 Givens 旋转的不同吗?

我使用Givens旋转矩阵生成(手动)QR分解,然后使用MathNet.Numerics.LinearAlgebra.Generic.Factorization.QRMethod(我相信它实现了Gram-Schimdt)生成QR分解,结果略有不同。数字之间的差异大约为 1E-16(不是那么大),并且某些行具有相反的符号 (*-1)(这是真正的问题 - 我认为这是因为 MathNet.Numerics 实现了不同的 QR 算法)。

你能推荐一些使用 Givens 旋转执行 QR 分解的库吗?

4

1 回答 1

0

根据文档,它是使用Householder 反射实现的:

QR 分解的计算是在构建时通过 Householder 变换完成的。

正如您所描述的,不同的方法可以产生具有较小数值差异或负行的答案。有关更多信息,请参阅维基百科文章

于 2016-06-24T15:59:06.787 回答