2

我需要计算密集矩阵的奇异值分解,但它似乎没有包含在我正在使用的包中:MathNet.Numerics x86 v2.4.0.26从 Nuget 包管理器下载。

我正在引用这个问题Svd recomposition..

链接的答案中包含的语法是:

 var m = DenseMatrix.OfArray(new double[,] {
   { 3, 0, 0, 0, 0 },
   { 0, 2, 4, 0, 0 },
   { 0, 4, 5, -4, 5 },
   { 0, 0, -4, -8, 12},
   { 0, 0, 5, 12, -5 }});


  var svd = m.Svd(true);  //The method Svd() doesn't seem to be available in v2.4 

  svd.U() * svd.W() * svd.VT()

文档中也没有 svd()列出。

我正在寻找一个使用 MathNet.Numerics x86 库生成 DenseMatrix SVD 的简单示例。

不幸的是,该方法inverse()只是返回 NaN,所以我希望使用奇异值分解来近似逆。

4

2 回答 2

4

从文档中我找到了奇异值分解的类

MathNet.Numerics.LinearAlgebra. Double/Single/Generic .Factorization.Svd是抽象类。

MathNet.Numerics.LinearAlgebra. Double/Single/Generic .Factorization.DenseSvd是实现。将矩阵传递给构造函数,结果可通过成员获得。

于 2014-02-18T21:25:37.340 回答
1

Svd() 曾经是 v2 中的扩展方法,不幸的是,只有在包含正确的 namespace时才可用。在您的情况下,添加以下行应该可以解决问题:

using MathNet.Numerics.LinearAlgebra.Double;

这是在即将发布的 v3 版本中大大简化的领域之一,这是一种正确的方法。我建议您查看最近的 v3 软件包之一(在撰写本文时,例如v3.0.0-alpha7)。

于 2014-02-18T22:02:01.827 回答