我需要计算密集矩阵的奇异值分解,但它似乎没有包含在我正在使用的包中:从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,因此我希望使用奇异值分解来近似反演。
答案 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)。