【发布时间】:2016-03-25 12:41:20
【问题描述】:
MATLAB 的cvx 套件可以解决下面的(看似无辜的)优化问题,但对于我正在使用的大型完整矩阵来说它相当慢。我希望这是因为使用 cvx 太过分了,而且问题实际上有一个解析解决方案,或者巧妙地使用一些内置的 MATLAB 函数可以更快地完成这项工作。
背景:众所周知,x1=A\b 和 x2=pinv(A)*b 都解决了最小二乘问题:
minimize norm(A*x-b)
区别在于norm(x2)<=norm(x1)。事实上,x2 是问题的最小范数解决方案,所以norm(x2)<=norm(x) 是所有可能的解决方案x。
定义D=norm(A*x2-b),(相当于D=norm(A*x1-b)),然后x2解决问题
minimize norm(x)
subject to
norm(A*x-b) == D
问题:我想找到解决方案:
minimize norm(x)
subject to
norm(A*x-b) <= D+threshold
换句话说,我不需要norm(A*x-b) 尽可能小,只要在一定的容差范围内即可。我想要在D+threshold 的b 中得到A*x 的最小范数解决方案x。
我无法通过网络或手动找到该问题的解析解(例如在经典最小二乘问题中使用伪逆)。我一直在搜索诸如“具有非线性约束的最小二乘”和“具有阈值的最小二乘”之类的内容。
任何见解都将不胜感激,但我想我真正的问题是: 在 MATLAB 中解决这个“阈值”最小二乘问题的最快方法是什么?
【问题讨论】:
-
这看起来像QCQP
-
这是因为 cvx 将 QCQP 求解为半定程序。相反,您需要通过引入潜在变量来使用二阶锥程序 (SOCP)。这些是你可以用谷歌搜索的流行语。
标签: matlab optimization linear-algebra least-squares cvx