SVD是否包含在MathNet.Numerics x86中?

时间:2014-02-18 21:19:54

标签: c# .net math svd mathnet

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

我引用了这个问题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()中未列出documentation

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

不幸的是,方法inverse()正在返回NaN,因此我希望使用奇异值分解来近似反演。

2 个答案:

答案 0 :(得分:4)

从文档中我发现了奇异值分解的类

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

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

答案 1 :(得分:1)

Svd()曾经是v2中的扩展方法,但遗憾的是,只有在包含right namespace时才可用。在您的情况下,添加以下行应该可以做到这一点:

using MathNet.Numerics.LinearAlgebra.Double;

这是即将推出的v3版本中已大大简化的领域之一,这是一种正确的方法。我建议您查看最近的v3软件包之一(截至编写本文时为v3.0.0-alpha7)。