lsqnonneg

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

描述

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

最小值 x C x d 2 2 , 在哪里 x 0。

例子

x= lsqnonneg(C,d)返回向量x最小化范数(C * X-d)x≥0。参数Cd必须是真实的。

例子

x= lsqnonneg(C,d,选项)使用结构中指定的优化选项最小化选项。使用optimset设置这些选项。

x= lsqnonneg(问题)求最小值问题,其中问题是一个结构。

例子

(x,resnorm,剩余) = lsqnonneg (___),对于任何前面的语法,另外返回残差的平方2-范数的值,规范(C * x d) ^ 2,并返回的残留d-C * X

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

例子

(x,resnorm,剩余,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种算法:“活跃集”消息:“优化终止。”
拉姆达=2×1-0.1506 - -0.0000

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

x (1) = 0,而对应的拉姆达(1) 0,显示出正确的两重性。同样的,X(2)> 0,而对应的拉姆达(2)= 0

输入参数

全部收缩

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

最小值 x C x d 2 2 , 在哪里 x 0。

为兼容性,的行数C必须等于的长度d

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

数据类型:

附加项,指定为实向量。代表变量d在这个问题

最小值 x C x d 2 2 , 在哪里 x 0。

出于兼容性,的长度d的行数必须等于C

例:d = [1; -6; 5]

数据类型:

优化选项,指定为结构,如optimset回报。您可以使用optimset要设置或改变的选项结构这些字段的值。看到设置优化选项的详细信息。

显示

显示器的水平:

  • '通知'(默认)显示器输出仅当该功能不收敛。

  • “关”要么“没有”显示没有输出。

  • '最后'只显示最终的输出。

TolX

终止上公差x,正面标。默认值是10 * eps *规范(C, 1) *长度(C)。看到公差和停止条件

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

数据类型:结构体

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

字段名称 条目

C

实矩阵

d

真正的向量

解算器

“lsqnonneg”

选项

选项结构如返回optimset

得到a的最简单的方法问题结构是从优化应用程序导出问题。

数据类型:结构体

输出参数

全部收缩

解,作为实向量返回。的长度x相同的长度d

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

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

原因lsqnonneg停止,返回一个整数。

1

功能融合到一个解决方案x

0

超过迭代次数options.MaxIter

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

迭代

迭代次数

算法

“有源集”

消息

退出消息

拉格朗日乘数,作为实向量返回。这些项满足互补条件x ' *λ= 0。这表示λ(i) < 0X(ⅰ)大约是0拉姆达(ⅰ)大约是0X(I)> 0

算法

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

参考

[1] Lawson, c.l.和r.j. Hanson。解最小二乘问题。上马鞍河,NJ:Prentice Hall出版社。1974年第23章,第161。

扩展功能

另请参阅

|

R2006a前推出