主要内容

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 (___),另外返回残差的平方范数的值,规范(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 = lsqnonneg (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完成。

创建选项。

选择= 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选项);
优化终止。

调用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残留]= 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残留,exitflag,输出,λ)= lsqnonneg (C, d)
x =2×10 0.6929
resnorm = 0.8315
剩余=4×10.6599 -0.3119 -0.3580 0.4130
exitflag = 1
输出=结构体字段:迭代: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).看到公差和停止标准

例子:选择= optimset(“显示”、“最后”)

数据类型:结构体

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

字段名 条目

C

真正的矩阵

d

真正的向量

解算器

“lsqnonneg”

选项

选项结构,如返回optimset

数据类型:结构体

输出参数

全部折叠

解,返回实向量。的长度x和的长度一样吗d

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

剩余,作为实向量返回。剩余的是d - C * x

原因lsqnonneg已停止,返回为整数。

1

函数收敛到一个解x

0

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

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

迭代

迭代次数

算法

“激活集”

消息

退出消息

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

提示

  • 的问题,d长度超过20,lsqlin可能比lsqnonneg.当d长度不到20,lsqnonneg通常效率更高。

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

    [x, resnorm残留,exitflag,输出,λ)= lsqnonneg (C, d)

    相当于

    [m, n] =大小(C);[x, resnorm残留,exitflag,输出,lambda_lsqlin] =…lsqlin (C, d,黑眼圈(n, n), 0 (n - 1));

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

算法

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

选择功能

应用程序

优化活动编辑器任务为lsqnonneg

参考文献

C. L.劳森和R. J.汉森。解决最小二乘问题.上鞍河,新泽西州:Prentice Hall. 1974。第23章,第161页。

扩展功能

之前介绍过的R2006a