主要内容

lsqnonneg

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

描述

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

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

请注意

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

例子

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

例子

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 = 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使用options结构。

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

选择功能

应用程序

优化Live Editor任务提供了一个可视化的界面lsqnonneg

参考文献

[1]劳森,c.l.和r.j.汉森。解决最小二乘问题.上马鞍河,新泽西州:普伦蒂斯大厅。1974年。第23章,161页。

扩展功能

版本历史

之前介绍过的R2006a

Baidu
map