非负线性最小二乘解问题

非负线性最小二乘解问题的数学模型为

\[{min}_{x}\frac{1}{2}{\left\| Cx-d \right\|}_{2}^{2}\]
\[x\geq  0\]

式中,矩阵C和矢量d为目标函数的系数。独立变量矢量x要求非负。

最优化工具箱用lsqnonneg函数求线性问题的非负最小二乘解。其调用格式为:

x = lsqnonneg(C,d) 返回矢量x,使范数(C*x-d)最小化,约束条件为x >= 0。C和d必须为实数。

x = lsqnonneg(C,d,x0) 若所有的x0>=0,则使用x0为初值;否则使用默认值。默认的初值为原点(当x0==[ ]或只提供两个输入变量时也使用默认值)。

x = lsqnonneg(C,d,x0,options) 用options结构指定的优化参数进行最小化。

[x,resnorm] = lsqnonneg(...) 返回残差的平方范数值:norm(C*x-d)^2。

[x,resnorm,residual] = lsqnonneg(...) 返回残差C*x-d。

[x,resnorm,residual,exitflag] = lsqnonneg(...) 返回exitflag参数,描述退出条件。

[x,resnorm,residual,exitflag,output] = lsqnonneg(...) 返回包含优化信息的输出结构output参数。

[x,resnorm,residual,exitflag,output,lambda] = lsqnonneg(...) 返回拉格朗日乘子lambda。

【例18】 利用下面的4*2问题比较无约束最小二乘解和lsqnonneg函数解。

code.matlab
>> C = [
       0.0372    0.2869
       0.6861    0.7071
       0.6233    0.6245
       0.6344    0.6170];
>> d = [
       0.8587
       0.1781
       0.0747
       0.8405];
>> [C\d, lsqnonneg(C,d)]
ans =
     -2.5627    0
      3.1108    0.6929
>> [norm(C*(C\d)-d), norm(C*lsqnonneg(C,d)-d)]
ans =
      0.6674 0.9118

二者的解不完全吻合,但非负最小二乘解没有为负的元素。