2

密行列の特異値分解を計算する必要がありますが、使用しているパッケージに含まれていないようです: MathNet.Numerics x86 v2.4.0.26Nugetパッケージマネージャーからダウンロードしました。

この質問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 の拡張メソッドでしたが、残念ながらこれは適切な名前空間を含めた場合にのみ利用できます。あなたの場合、次の行を追加するとうまくいくはずです:

using MathNet.Numerics.LinearAlgebra.Double;

これは、次の v3 リリースで大幅に簡素化された領域の 1 つであり、これが適切な方法です。最近の v3 パッケージの 1 つを確認することをお勧めします (これを書いている時点ではv3.0.0-alpha7 など)。

于 2014-02-18T22:02:01.827 に答える