Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 线性方程组,带约束的最小二乘法_C++_C_Equation_Least Squares_Equation Solving - Fatal编程技术网

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

C++ 线性方程组,带约束的最小二乘法,c++,c,equation,least-squares,equation-solving,C++,C,Equation,Least Squares,Equation Solving,我试着先描述一下先决条件 我有许多图像/矩阵,可以想象成图像处理程序中的层。将添加这些层以形成最终输出。每个层都有一个从0到1的因子 x_1*M_1+x_2*M_2+…= M_i矩阵是固定不变的。 目标是确定最接近(不一定最好)给定S的x_i因子 矩阵的二维性与问题的解决无关。它们可以重新排列,形成矩阵形式的线性方程组 每个矩阵M_i是M的一列,它们一起构成一个方程 M·x=S M可以非常大(数个10.000行和100列) 你有没有建议最好基于库来解决这个问题?我知道有很多库可以解决最小二乘问题

我试着先描述一下先决条件

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

x_1*M_1+x_2*M_2+…=

M_i矩阵是固定不变的。 目标是确定最接近(不一定最好)给定S的x_i因子

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

每个矩阵M_i是M的一列,它们一起构成一个方程

M·x=S

M可以非常大(数个10.000行和100列)

你有没有建议最好基于库来解决这个问题?我知道有很多库可以解决最小二乘问题,但我找不到一个支持约束的库。首先,满足>=0条件对我来说就可以了

提前感谢您的帮助

似乎有拉格朗日乘数,请参阅。 这些允许您求解带有约束的方程。

您可以使用库进行优化,并将目标函数构造为压缩创新的计算(可能使用COBYLA算法)

您也可以使用QuantLib的类进行此操作,使用方法非常简单:

LinearRegression *lr = new LinearRegression( x, y, 1.0);
cout << lr->coefficients();
LinearRegression*lr=新的线性回归(x,y,1.0);
cout系数();

您没有指定约束的类型。具有仿射约束的最小二乘问题是一个二次规划问题。二次约束->QCQP。“你可能想考虑沿着这条线搜索”@ LaTal化化学家我指定了约束:“每一层都有一个从0到1的因素”,“最初实现>0的条件对我来说是这样”,我没有时间去看NLopt,但是我简短地看了一下QuantLib,我不理解你的例子。1.0意味着什么?我在类列表中找不到类
线性回归
,我估计你指的是一般的最小平方,但它没有很好的文档记录。1.0是什么意思?这是一个vContainer我以前使用过LinearRegression类,它似乎没有在Doxygen文档中详细记录,但是它仍然存在,正如我们在General Linear Leaast Squeres注释中可以找到的:由LinearLeastSquares继承,线性回归。我看了quantlib和线性回归。我认为这与我的问题没有任何共同之处。它只需要得到一些x,y坐标,并计算多项式系数。还是我错过了什么?我应该如何将其应用于我的问题。除此之外,图书馆真的很大。构建和生成大于600MB的静态lib花费了一个多小时。您描述的问题是回归。我提到的软件包提供了解决回归方程的含义。。那我就不明白如何把它应用到我的问题上。假设“A*b=C”A是40000 x 500矩阵,b是1 x 500矩阵,C是500 x 1矩阵。我有A和C以及b的所有元素必须>=0的约束。如何在QuantLib的帮助下确定b?