主要内容

lsqnonneg

求解非负线性最小二乘问题

描述

求解非负最小二乘曲线拟合问题的形式

最小值 x C x d 2 2 在哪里 x 0.

请注意

lsqnonneg仅适用于基于求解器的方法。有关这两种优化方法的讨论,请参见首先选择基于问题的方法或基于求解器的方法

例子

x= lsqnonneg (Cd返回向量。x,最大限度地减少规范(C * x d)X≥0.参数Cd一定是真的。

例子

x= lsqnonneg (Cd选项使用结构中指定的优化选项进行最小化选项.使用optimset来设置这些选项。

x= lsqnonneg (问题求最小值问题中描述的结构问题

例子

(xresnorm剩余= lsqnonneg()___,对于之前的任何语法,额外返回残差的2-范数的平方的值,规范(C * x d) ^ 2,并返回余数直流* x

(xresnorm剩余exitflag输出= lsqnonneg()___另外返回一个值exitflag的退出条件lsqnonneg,以及一个结构输出有关于优化过程的信息。

例子

(xresnorm剩余exitflag输出λ= lsqnonneg()___另外返回拉格朗日乘数向量λ

例子

全部折叠

计算线性最小二乘问题的非负解,并将结果与无约束问题的解进行比较。

准备一个C矩阵和d这个问题的向量 最小值 | | C x - d | |

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];

计算约束解和无约束解。金宝搏官方网站

x = lsqnonnegg (C,d)
x =2×10 0.6929
xunc = C\d
xunc =2×1-2.5627 - 3.1108

中的所有条目x都是非负的,但是在xunc是负的。

计算两个解的残差的范数。金宝搏官方网站

constrained_norm = norm(C*x - d)
Constrained_norm = 0.9118
unconstrained_norm = norm(C*xunc - d)
Unconstrained_norm = 0.6674

无约束解具有较小的残差范数,因为约束只能增加残差范数。

设置显示选项“最后一次”要查看以下输出lsqnonneg完成。

创建选项。

Options = optimset(“显示”“最后一次”);

准备一个C矩阵和d这个问题的向量 最小值 | | C x - d | |

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];

调用lsqnonneg使用期权结构。

x = lsqnonneg(C,d,options);
优化终止。

调用lsqnonneg用输出得到解、残差范数和残差向量。

准备一个C矩阵和d这个问题的向量 最小值 | | C x - d | |

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];

获取解和残差信息。

[x,resnorm,residual] = lsqnonneg(C,d)
x =2×10 0.6929
Resnorm = 0.8315
剩余=4×10.6599 -0.3119 -0.3580 0.4130

验证返回的残差范数是返回残差向量范数的平方。

规范(残余)^ 2
Ans = 0.8315

请求所有输出参数来检查解决方案和解决过程lsqnonneg完成。

准备一个C矩阵和d这个问题的向量 最小值 | | C x - d | |

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];

解决问题,请求所有输出参数。

[x,resnorm,residual,exitflag,output,lambda] = lsqnonneg(C,d)
x =2×10 0.6929
Resnorm = 0.8315
剩余=4×10.6599 -0.3119 -0.3580 0.4130
退出标志= 1
输出=带有字段的结构体:'active-set'消息:'优化终止'
λ=2×1-0.1506 - -0.0000

exitflag1,表示正确的解决方案。

X (1) = 0,相应的λ(1) 0表现出正确的对偶性。同样的,X (2) > 0,相应的(2) = 0

输入参数

全部折叠

线性乘法器,指定为实矩阵。表示变量C在问题中

最小值 x C x d 2 2

的行数C一定等于的长度d

例子:C = [1,2;3,-1;-4,4]

数据类型:

加性项,指定为实向量。表示变量d在问题中

最小值 x C x d 2 2

的长度d一定等于的行数C

例子:D = [1;-6;5]

数据类型:

优化选项,指定为结构,如optimset的回报。你可以用optimset设置或更改选项结构中这些字段的值。看到优化选项参考详细信息。

显示

显示级别:

  • “通知”(默认)仅在函数不收敛时显示输出。

  • “关闭”“没有”不显示任何输出。

  • “最后一次”只显示最终输出。

TolX

终止容忍x一个正标量。默认值为10 * eps *规范(C, 1) *长度(C).看到公差和停止标准

例子:options = optimset('Display','final')

数据类型:结构体

问题结构,指定为具有以下字段的结构。

字段名 条目

C

真正的矩阵

d

真正的向量

解算器

“lsqnonneg”

选项

返回的选项结构optimset

数据类型:结构体

输出参数

全部折叠

解,作为实向量返回。的长度x等于的长度吗d

平方剩余范数,作为非负标量返回。等于规范(C * x d) ^ 2

残差,作为实向量返回。残差为d - C*x

原因lsqnonneg停止,以整数形式返回。

1

函数收敛到一个解x

0

超过的迭代次数选项。麦克斯特

关于优化过程的信息,作为带字段的结构返回:

迭代

所进行的迭代次数

算法

“激活集”

消息

退出消息

拉格朗日乘子,作为实向量返回。条目满足互补条件X '* = 0.这意味着(i) < 0x(我)大约是0,λ(我)大约是0X (i) > 0

提示

  • 对于以下问题d长度大于20,lsqlin可能比lsqnonneg.当d长度在20以下,lsqnonneg通常效率更高。

    在求解器之间进行转换C行数多于列数(意味着系统是过度确定的);

    [x,resnorm,residual,exitflag,output,lambda] = lsqnonneg(C,d)

    等于

    [m,n] = size(C);[x,resnorm,residual,exitflag,output,lambda_lsqlin] =…]lsqlin (C, d,黑眼圈(n, n), 0 (n - 1));

    唯一的区别是对应的拉格朗日乘数有相反的符号:Lambda = -lambda_lsqlin.ineqlin

算法

lsqnonneg中描述的算法[1].该算法从一组可能的基向量开始,计算相关的对偶向量λ.然后选择与中的最大值相对应的基向量λ把它从基中换出来以换取另一个可能的候选基。这种情况一直持续到≤0

选择功能

应用程序

优化活动编辑器任务提供了一个可视化界面lsqnonneg

参考文献

[1]劳森,C. L.和R. J.汉森。求解最小二乘问题.上马鞍河,新泽西州:普伦蒂斯厅,1974。第23章,第161页。

扩展功能

版本历史

R2006a之前引入