帮助中心帮助中心
求解非负线性最小二乘问题
x = lsqnonneg (C, d)
x = lsqnonneg (C d选项)
x = lsqnonneg(问题)
[x, resnorm残留]= lsqnonneg (___)
[x, resnorm残留,exitflag,输出]= lsqnonneg (___)
[x, resnorm残留,exitflag,输出,λ)= lsqnonneg (___)
解决了形式的非负最小二乘曲线拟合问题
最小值 x 为 C ⋅ x − d 为 2 2 , 在哪里 x ≥ 0.
请注意
lsqnonneg只适用于基于求解器的方法。有关这两种优化方法的讨论,请参见首先选择基于问题或基于求解器的方法.
lsqnonneg
例子
x= lsqnonneg (C,d)返回向量x,最大限度地减少规范(C * x d)受x≥0.参数C而且d必须是真实的。
x= lsqnonneg (C,d)
x
C
d
规范(C * x d)
x≥0
x= lsqnonneg (C,d,选项)使用结构中指定的优化选项最小化选项.使用optimset设置这些选项。
x= lsqnonneg (C,d,选项)
选项
optimset
x= lsqnonneg (问题)找到最小值问题中描述的结构问题.
x= lsqnonneg (问题)
问题
[x,resnorm,剩余) = lsqnonneg (___),对于任何前面的语法,另外返回残差的平方2范数的值,规范(C * x d) ^ 2,返回残差直流* x.
[x,resnorm,剩余) = lsqnonneg (___)
resnorm
剩余
规范(C * x d) ^ 2
直流* x
[x,resnorm,剩余,exitflag,输出) = lsqnonneg (___)另外返回一个值exitflag的退出条件lsqnonneg,以及一个结构输出包含关于优化过程的信息。
[x,resnorm,剩余,exitflag,输出) = lsqnonneg (___)
exitflag
输出
[x,resnorm,剩余,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 =2×10 0.6929
xunc = C \ d
xunc =2×1-2.5627 - 3.1108
所有条目x是非负的,但是有些元素xunc是负的。
xunc
计算两个解的残差范数。
constrained_norm = norm(C*x - d)
constrained_norm = 0.9118
unconstrained_norm = norm(C*xunc - d)
unconstrained_norm = 0.6674
无约束解的剩余范数较小,因为约束只会增加一个剩余范数。
设置显示选项“最后一次”查看输出lsqnonneg完成。
显示
“最后一次”
创建选项。
选择= optimset (“显示”,“最后一次”);
调用lsqnonneg使用options结构。
x = lsqnonneg (C d选项);
优化终止。
调用lsqnonneg用输出得到解、残模和残向量。
获取解决方案和残留信息。
[x, resnorm残留]= lsqnonneg (C, d)
resnorm = 0.8315
剩余=4×10.6599 -0.3119 -0.3580 0.4130
验证返回的残差范数是返回残差向量范数的平方。
规范(残余)^ 2
ans = 0.8315
之后请求所有输出参数检查解决方案和解决方案过程lsqnonneg完成。
解决这个问题,请求所有输出参数。
[x, resnorm残留,exitflag,输出,λ)= lsqnonneg (C, d)
exitflag = 1
输出=结构体字段:迭代:1个算法:'active-set'消息:'优化终止。'
λ=2×1-0.1506 - -0.0000
exitflag是1表示正确解。
1
x (1) = 0,对应的λ(1) ≠ 0,显示了正确的对偶性。同样的,x (2) > 0,对应的λ(2)= 0.
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]
C = [1, 2, 3, 1, 4, 4]
数据类型:双
双
加性项,指定为实向量。代表变量d在这个问题
的长度d必须等于的行数C.
例子:d =(1; 6。5)
d =(1; 6。5)
优化选项,指定为结构,例如optimset的回报。您可以使用optimset在选项结构中设置或更改这些字段的值。看到优化选择参考的详细信息。
显示:
“通知”(默认)仅在函数不收敛时显示输出。
“通知”
“关闭”或“没有”显示没有输出。
“关闭”
“没有”
“最后一次”只显示最终输出。
TolX
终止上公差x,一个正标量。默认值是10 * eps *规范(C, 1) *长度(C).看到公差和停止标准.
10 * eps *规范(C, 1) *长度(C)
例子:选择= optimset(“显示”、“最后”)
选择= optimset(“显示”、“最后”)
数据类型:结构体
结构体
问题结构,指定为具有以下字段的结构。
解算器
“lsqnonneg”
解,作为实向量返回。的长度x和的长度相等吗d.
剩余范数的平方,作为非负标量返回。等于规范(C * x d) ^ 2.
残差,作为实向量返回。剩余的是d - C * x.
d - C * x
原因lsqnonneg停止,作为整数返回。
函数收敛到一个解x.
超过的迭代次数选项。麦克斯特.
选项。麦克斯特
关于优化过程的信息,作为带字段的结构返回:
迭代
迭代次数
算法
“激活集”
消息
退出消息
拉格朗日乘子,作为实向量返回。这些项满足互补条件x ' *λ= 0.这意味着λ(i) < 0当x(我)大约是0,λ(我)大约是0当x(我)> 0.
x ' *λ= 0
λ(i) < 0
x(我)
λ(我)
x(我)> 0
的问题,d长度超过20,lsqlin可能比lsqnonneg.当d长度在20以下,lsqnonneg通常效率更高。
lsqlin
在求解器之间转换时C行数多于列数(意味着系统是超定的),
相当于
[m, n] =大小(C);[x, resnorm残留,exitflag,输出,lambda_lsqlin] =…lsqlin (C, d,黑眼圈(n, n), 0 (n - 1));
唯一的区别是对应的拉格朗日乘子有相反的符号:λ= -lambda_lsqlin.ineqlin.
λ= -lambda_lsqlin.ineqlin
lsqnonneg中描述的算法[1].该算法从一组可能的基向量开始,并计算相关的对偶向量λ.然后选择与中的最大值对应的基向量λ把它从基中换出来换另一个可能的候选者。这个过程一直持续到λ≤0.
λ≤0
的优化Live Editor任务提供了一个可视化的界面lsqnonneg.
[1]劳森,c.l.和r.j.汉森。解决最小二乘问题.上马鞍河,新泽西州:普伦蒂斯大厅。1974年。第23章,161页。
对于C/ c++代码生成:
必须启用对可变大小数组的支持。
输出结构中的退出消息没有被翻译。
之前介绍过的R2006a
mldivide|lsqlin|optimset|优化
mldivide
您有了这个示例的修改版本。您想用您的编辑打开这个示例吗?
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
选择一个网站,在可用的地方获得翻译的内容,并查看当地的活动和优惠。根据您的地理位置,我们建议您选择:.
您也可以从以下列表中选择网站:
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。
联系当地办事处