奇异值分解的基本原理大家可以参考其他博客,这里仅记录利用Math.net库计算奇异值。
基本原理可以参考这篇博客:奇异值分解法原理
利用奇异值求解线性方程组原理:利用SVD求解线性方程组
Math.net是一个非常强大的数学算法库,里面有很多数学算法。可以直接在nuget程序包管理里面添加到程序中
using MathNet.Numerics.LinearAlgebra;
using MathNet.Numerics.LinearAlgebra.Double;
var mb = Matrix<double>.Build;//Matrix为math.net特有的矩阵类,包含矩阵的基本运算
double[,] x = { { 0, 1 }, { 1, 1 }, { 1, 0 } };
var A = mb.DenseOfArray(x);
var U = A.Svd().U; //左奇异向量
var W = A.Svd().W; //以对角线形式返回奇异值
var S = A.Svd().S; //以升序排列奇异值
var vt = A.Svd().VT;//右奇异向量转置
var matrixA = DenseMatrix.OfArray(new[,] { { 5.00, 2.00, -4.00 }, { 3.00, -7.00, 6.00 }, { 4.00, 1.00, 5.00 } });
var vecotrB = new DenseVector ( n