因此我有一个矩形矩阵:
1,3,2,4,n ..
4,2,1,5,n ..
n ..
和矢量因此:
1,2,5,6,7,n ..
我需要为矩阵中的所有列求解最小二乘方程,但我想约束结果,使得所有答案都大于零。
我已经添加了Math.NET包,并获得了
matrix.QR().Solve(...
据推测,有一些方法可以迭代地解决这个问题,但似乎没有办法为Solve
方法指定约束/条件,而且我不确定我应该使用哪种其他方法使用。
任何人都可以帮忙吗?
编辑 - 下面添加了部分代码:
//compounds is Dictionary<int, List<double>>
var xdata = compounds.Values.Select(v => v.ToArray()).ToArray();
var ydata = new DenseVector(someKnownValues.ToArray());
var matrix = DenseMatrix.OfColumns(ydata.Count(), xdata.Count(), xdata);
var factors = matrix.QR().Solve(ydata);
答案 0 :(得分:3)
不幸的是,Math.NET Numerics不支持解决非负(或正)最小二乘问题。
一些进一步的信息和算法:Non-negative least squares (Wikipedia)