线性方程组,带约束的最小二乘法

时间:2014-02-10 09:49:27

标签: c++ c equation least-squares equation-solving

我试着先描述前提条件

我有许多图像/矩阵,可以想象成图像处理程序中的图层。将添加这些图层以形成最终输出。每层的因子从0到1

x_1 * M_1 + x_2 * M_2 + ... = S

M_i矩阵是固定的,不会改变。 目标是确定最佳(不一定是最佳)近似给定S

的x_i因子

矩阵的二维性与解决问题无关。它们可以重新排列,形成矩阵形式的线性方程组。

每个矩阵M_i是M的列,它们一起形成等式

M·x = S

M可能非常大(几个10.000行,100列)

您对方法有什么建议,最好是基于库来解决这个问题吗?我知道有很多库可以解决最小二乘问题,但我找不到支持约束的库。首先完成> = 0条件会为我做

提前感谢您的帮助

2 个答案:

答案 0 :(得分:2)

mlpack似乎有拉格朗日乘数,请参阅the docs。 这些允许您解决具有约束的方程式。

答案 1 :(得分:0)

你可以使用NLopt库进行优化,并构建你的目标函数作为squered创新的计算(可能使用COBYLA算法)。

您也可以使用QuantLib的General Linear Leaast Squeres类,用法非常简单:

LinearRegression *lr = new LinearRegression( x, y, 1.0);
cout << lr->coefficients();

QuantLib LinearRegression