在 Matlab 中求解非负最小二乘(类比最小二乘)

计算科学 matlab 最小二乘
2021-12-10 02:12:37

存在最小二乘问题。可以在 Matlab 中使用反斜杠来解决。
如果Ax = b,那么x = A \ b
假设我有同样的问题,但都x必须是非负数(>=0)。如何通过与前一个问题类比在 Matlab 中解决这个问题(没有非负性约束)?我认为它可以以某种方式与活动集方法相关联。
我知道非负最小二乘问题可以通过 Matlab 优化工具箱或 CVX 或许多其他方式轻松解决。但是我仍然对通过直接最小二乘法(带反斜杠)类比来解决它感到好奇。
有人可以帮我吗?

2个回答

MATLAB 有一个内置函数 lsqnonneg(),它是 Lawson 和 Hanson (1974) 在“解决最小二乘问题”一书中描述的活动集方法的实现

MATLAB 中线性最小二乘问题的解是由各种不同的算法完成的,具体取决于问题的确切结构。它们都与 lsqnonneg() 中使用的活动集方法特别相似。

不确定这是否有帮助,但诀窍是 Lawson & Hanson 的算法从 A 中选择一个特殊的列子集,这样当您执行回归时 x = A(:,subset) \ b 结果系数都是非负的。