求解线性约束稀疏线性最小二乘问题

计算科学 优化 最小二乘 约束 线性系统
2021-12-09 06:31:20

[从https://math.stackexchange.com/questions/786612/solving-a-linearly-constrained-sparse-linear-least-squares-problem转贴的问题]

给定方程组

Ax=b , 服从Cxd

其中是一个矩阵(其中)并且非常大且稀疏。例如可以有元素。每一行只有 4 或 5 个非零数字,只能是 1 或 -1。An×mn>mA3126250×2740A

我在 Matlab 上,我一直在使用 LSQR 但我需要不等式约束来对施加单调性。x

您能否建议任何求解器使用线性约束来执行此操作?Matlab 或 C 上是否有任何实现?

1个回答

如果您可以访问 MATLAB 优化工具箱,则可以使用 quadprog() 函数轻松完成。您首先将目标以二次形式写为

Axb22=xT(ATA)x2(ATb)Tx+bTb

然后相乘得到那么你的目标是P=ATAq=2ATb

f(x)=xTPx+qTx+bTb

并准备好输入 quadprog()。矩阵只有 2740 x 2740,所以从 quadprog() 的角度来看,这不是一个很大的问题。P

如果您没有优化工具箱的副本,我确信有一些免费的 MATLAB qp 求解器。

另请注意,您可能希望根据变量重新表述问题,其中zi

x1=z1

x2=z1+z2

然后你可以用替换你的不等式约束Cxdz0