我很快尝试重现这一点,但失败了。我使用了 Math.NET Numerics v2.6(NuGet 包),但此版本中的 SVD 分解没有任何变化。这是我的代码:
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);
//var svd = new UserSvd(m, true);
svd.U() * svd.W() * svd.VT()
最后一行的计算结果为:
DenseMatrix 5x5-Double
3 0 0 0 0
0 2 4 -1.23512E-15 -3.747E-16
0 4 5 -4 5
0 3.26128E-16 -4 -8 12
0 -1.15186E-15 5 12 -5
本例中的 VT 为:
DenseMatrix 5x5-Double
0 -0.0449147 0.249507 0.718099 -0.648123
0 0.466822 0.823535 0.0324572 0.320646
0 0.208479 0.176729 -0.670706 -0.689534
-1 0 0 0 0
0 0.858252 -0.477811 0.182848 -0.0408292
我想知道为什么你会得到完全不同的结果?
您可以使用我上面发布的相同代码再试一次吗?