lsqlin
解决约束线性最小二乘问题
语法
描述
线性最小二乘解算器边界或线性约束。
解决了最小二乘曲线拟合问题的形式
请注意
lsqlin
仅适用于solver-based方法。两种优化方法的讨论,请参阅首先选择具体问题具体分析或Solver-Based方法。
例子
最小二乘线性不等式约束
找到x
最小化的规范C * x - d
线性不等式约束的超定的问题。
指定和约束的问题。
C = [0.9501 0.7620 0.6153 0.4057 0.2311 0.4564 0.7919 0.9354 0.6068 0.0185 0.9218 0.9169 0.4859 - 0.8214 0.7382 - 0.4102 0.8912 - 0.4447 0.1762 - 0.8936);d = (0.0578 0.3528 - 0.8131 0.0098 - 0.1388);= (0.2027 0.2721 0.7467 0.4659 0.1987 0.1988 0.4450 0.4186 0.6037 - 0.0152 0.9318 - 0.8462);b = (0.5251 0.2026 0.6721);
调用lsqlin
来解决这个问题。
x = lsqlin (C, d, A, b)
最低发现满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
x =4×10.1299 -0.5757 0.4251 0.2438
最小二乘线性约束和边界
找到x
最小化的规范C * x - d
等式和不等式约束的线性超定的问题。
指定和约束的问题。
C = [0.9501 0.7620 0.6153 0.4057 0.2311 0.4564 0.7919 0.9354 0.6068 0.0185 0.9218 0.9169 0.4859 - 0.8214 0.7382 - 0.4102 0.8912 - 0.4447 0.1762 - 0.8936);d = (0.0578 0.3528 - 0.8131 0.0098 - 0.1388);= (0.2027 0.2721 0.7467 0.4659 0.1987 0.1988 0.4450 0.4186 0.6037 - 0.0152 0.9318 - 0.8462);b = (0.5251 0.2026 0.6721);Aeq = [3 5 7 9];说真的= 4;磅= -0.1 * 1 (4,1);乌兰巴托= 2 * 1 (4,1);
调用lsqlin
来解决这个问题。
x = lsqlin (C, d, A、b Aeq,说真的,磅,乌兰巴托)
最低发现满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
x =4×1-0.1000 -0.1000 0.1599 0.4090
线性最小二乘非默认选项
这个例子展示了如何使用线性最小二乘法的默认选项。
设置选项来使用“内点”
算法和迭代显示。
选择= optimoptions (“lsqlin”,“算法”,“内点”,“显示”,“通路”);
建立一个线性最小二乘问题。
C = [0.9501 0.7620 0.6153 0.4057 0.2311 0.4564 0.7919 0.9354 0.6068 0.0185 0.9218 0.9169 0.4859 - 0.8214 0.7382 - 0.4102 0.8912 - 0.4447 0.1762 - 0.8936);d = (0.0578 0.3528 - 0.8131 0.0098 - 0.1388);= (0.2027 0.2721 0.7467 0.4659 0.1987 0.1988 0.4450 0.4186 0.6037 - 0.0152 0.9318 - 0.8462);b = (0.5251 0.2026 0.6721);
运行问题。
x = lsqlin (C, d, A, b,[],[],[],[],[],选项)
Iter Resnorm原始Infeas双重Infeas互补e-01 0 6.545534 1.600492 6.150431 1.000000 e-01 e + e + 00 00 1 1.757343 6.545534 2.430833 3.075216 8.002458 e-01 e-04 e-04 e-01 2 e-01 2.000615 5.619277 4.001229 5.945636 1.537608 e-07 e-07 e-02 3 e-02平台以及1.006816 1.000589 2.587604 2.036997 1.370933 e-08 e-02 4 e-02 e-13 e-08 2.548273 e 03 5 1.764630 1.868939 4.295807 2.955102 2.775558 e-02 e-17 e-09 e-04 6 e-02 1.758561 0.000000 3.102850 1.237758 e + 00 e-09 e-05 7 e-02 2.775558 e-17 1.645863平台以及1.138719 e-07 8 1.758538 e-02 0.000000 e + 00 2.400302 e-13 5.693290 e-11最低发现满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
x =4×10.1299 -0.5757 0.4251 0.2438
返回所有输出
获取和解释所有lsqlin
输出。
定义一个线性不等式约束和边界的问题。这个问题是由多种因素决定的,因为有四列C
矩阵但是五行。这意味着这个问题有四个未知数和五个条件,包括之前的线性约束和边界。
C = [0.9501 0.7620 0.6153 0.4057 0.2311 0.4564 0.7919 0.9354 0.6068 0.0185 0.9218 0.9169 0.4859 - 0.8214 0.7382 - 0.4102 0.8912 - 0.4447 0.1762 - 0.8936);d = (0.0578 0.3528 - 0.8131 0.0098 - 0.1388);= (0.2027 0.2721 0.7467 0.4659 0.1987 0.1988 0.4450 0.4186 0.6037 - 0.0152 0.9318 - 0.8462);b = (0.5251 0.2026 0.6721);磅= -0.1 * 1 (4,1);乌兰巴托= 2 * 1 (4,1);
设置选项来使用“内点”
算法。
选择= optimoptions (“lsqlin”,“算法”,“内点”);
的“内点”
算法不使用一个初始点,所以集x0
来[]
。
x0 = [];
调用lsqlin
与所有输出。
[x, resnorm残留,exitflag,输出,λ)=…lsqlin (C, d, A, b,[],[],磅,乌兰巴托,x0,选项)
最低发现满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
x =4×1-0.1000 -0.1000 0.2152 0.3502
resnorm = 0.1672
剩余=5×10.0455 0.0764 -0.3562 0.1620 0.0784
exitflag = 1
输出=结构体字段:消息:“最低....发现满足约束”算法:“内点”firstorderopt: 4.3374 e-11 constrviolation: 0迭代:6 linearsolver:“密集”cgiterations: []
λ=结构体字段:ineqlin: x1双[3]eqlin: [0 x1双]低:x1双[4]上:[4 x1双)
更详细地检查非零的拉格朗日乘子字段。首先检查线性不等式约束的拉格朗日乘数法。
lambda.ineqlin
ans =3×10.0000 0.2392 0.0000
拉格朗日乘数法在非零的确切时间相对应的解决方案是在约束边界。换句话说,拉格朗日乘数法非零当相应的约束是活跃的。lambda.ineqlin (2)
是零。这意味着第二个元素* x
应该等于第二个元素b
,因为约束是活跃的。
[(2)* x, b (2))
ans =1×20.2026 - 0.2026
现在检查的拉格朗日乘数法低,上界约束。
lambda.lower
ans =4×10.0409 0.2784 0.0000 0.0000
lambda.upper
ans =4×10 0 0 0
前两个元素lambda.lower
非零。你会看到x (1)
和x (2)
在他们的下界,-0.1
。所有元素的lambda.upper
基本上是零,你看到所有组件x
不到他们的上界,2
。
返回热启动对象
创建一个热启动对象,这样你就可以很快解决一个修改的问题。设置选项关掉迭代显示支持热启动。万博1manbetx
rng默认的%的再现性选择= optimoptions (“lsqlin”,“算法”,“激活集”,“显示”,“关闭”);n = 15;x0 = 5 *兰德(n, 1);ws = optimwarmstart (x0,选项);
创建和解决第一个问题。找到解决方案。
r = 1: n - 1;%指数向量v (n) = (1) ^ (n + 1) / n;%分配向量vv (r) = (1) ^ (r + 1) / r;C =画廊(“线性”,v);C = (C, C);r = 1:2 * n;d (r) = n-r;磅= 5 * 1 (1,n);乌兰巴托= 5 * 1 (1,n);抽搐(ws、fval ~、exitflag、输出]= lsqlin (C, d,[]、[][],[],磅,乌兰巴托,ws) toc
运行时间是0.005117秒。
再添加一个线性约束和解决。
一个= 1 (1,n);b = -10;抽搐(ws、fval ~、exitflag、输出]= lsqlin (C, d, A, b,[],[],磅,乌兰巴托,ws) toc
运行时间是0.001491秒。
输入参数
C
- - - - - -矩阵乘法器
真正的矩阵
双打的矩阵乘法器,指定为一个矩阵。C
解决方案的代表乘数x
在表达C * x - d
。C
是米
——- - - - - -N
,在那里米
方程的数目,N
元素的数量吗x
。
例子:C = (1, 4, 2、5、7、8)
数据类型:双
d
- - - - - -常数向量
真正的向量
双打的常数向量,指定为一个向量。d
代表了添加剂常数项的表达式C * x - d
。d
是米
——- - - - - -1
,在那里米
是方程的数量。
例子:d = [5, 0, -12)
数据类型:双
一个
- - - - - -线性不等式约束
真正的矩阵
线性不等式约束,指定为一个真正的矩阵。一个
是一个米
——- - - - - -N
矩阵,米
不平等的数量,N
是变量的数量(数量的元素x0
)。对于大型问题,通过一个
作为一个稀疏矩阵。
一个
编码米
线性不等式
A * x < =
,
在哪里x
的列向量N
变量x (:)
,b
是一个列向量米
元素。
例如,考虑这些不平等:
x1+ 2x2≤10
3x1+ 4x2≤20
5x1+ 6x2≤30日
输入以下命令来指定不等式约束条件。
= [1,2,3,4,5,6);b = (10、20、30);
例子:指定的x分量总和为1或更少,使用一个= 1 (1,N)
和b = 1
。
数据类型:双
b
- - - - - -线性不等式约束
真正的向量
线性不等式约束,指定为一个真正的向量。b
是一个米
元向量相关一个
矩阵。如果你通过b
作为一个行向量,解决内部转换b
的列向量b (:)
。对于大型问题,通过b
作为一个稀疏的向量。
b
编码米
线性不等式
A * x < =
,
在哪里x
的列向量N
变量x (:)
,一个
是一个矩阵的大小米
——- - - - - -N
。
例如,考虑这些不平等:
x1+ 2x2≤10
3x1+ 4x2≤20
5x1+ 6x2≤30。
输入以下命令来指定不等式约束条件。
= [1,2,3,4,5,6);b = (10、20、30);
例子:指定的x分量总和为1或更少,使用一个= 1 (1,N)
和b = 1
。
数据类型:双
Aeq
- - - - - -线性等式约束
真正的矩阵
线性等式约束,指定为一个真正的矩阵。Aeq
是一个我
——- - - - - -N
矩阵,我
是平等的,N
是变量的数量(数量的元素x0
)。对于大型问题,通过Aeq
作为一个稀疏矩阵。
Aeq
编码我
线性等式
Aeq * x =说真的
,
在哪里x
的列向量N
变量x (:)
,说真的
是一个列向量我
元素。
例如,考虑这些不平等:
x1+ 2x2+ 3x3= 10
2x1+ 4x2+x3= 20,
输入以下命令来指定不等式约束条件。
Aeq = [1、2、3、2、4、1];说真的= (10、20);
例子:指定的x分量之和为1,使用Aeq = 1 (1, N)
和说真的= 1
。
数据类型:双
说真的
- - - - - -线性等式约束
真正的向量
线性等式约束,指定为一个真正的向量。说真的
是一个我
元向量相关Aeq
矩阵。如果你通过说真的
作为一个行向量,解决内部转换说真的
的列向量说真的(:)
。对于大型问题,通过说真的
作为一个稀疏的向量。
说真的
编码我
线性等式
Aeq * x =说真的
,
在哪里x
的列向量N
变量x (:)
,Aeq
是一个矩阵的大小我
——- - - - - -N
。
例如,考虑这些等式:
x1+ 2x2+ 3x3= 10
2x1+ 4x2+x3= 20。
输入以下命令来指定等式约束。
Aeq = [1、2、3、2、4、1];说真的= (10、20);
例子:指定的x分量之和为1,使用Aeq = 1 (1, N)
和说真的= 1
。
数据类型:双
磅
- - - - - -下界
[]
(默认)|真正的向量或数组
下界,指定为一个向量或双打的数组。磅
代表了下界elementwise磅
≤x
≤乌兰巴托
。
在内部,lsqlin
将一个数组磅
的向量磅(:)
。
例子:磅=[0;无穷;4)
意味着x (1)≥0
,x (3)≥4
。
数据类型:双
乌兰巴托
- - - - - -上界
[]
(默认)|真正的向量或数组
上界,指定为一个向量或双打的数组。乌兰巴托
代表了上界elementwise磅
≤x
≤乌兰巴托
。
在内部,lsqlin
将一个数组乌兰巴托
的向量乌兰巴托(:)
。
例子:乌兰巴托= (Inf; 4; 10)
意味着x (2)≤4
,x (3)≤10
。
数据类型:双
x0
- - - - - -初始点
[]
(默认)|真正的向量或数组
初始点的解决方案过程中,指定为一个真正的向量或数组。的“trust-region-reflective”
和“激活集”
算法使用x0
(可选)。
如果你不指定x0
为“trust-region-reflective”
或“激活集”
算法,lsqlin
集x0
零向量。如果任何组件的零向量x0
违背了界限,lsqlin
集x0
一个点在盒子的内部定义的界限。
例子:x0 = (4; 3)
数据类型:双
选项
- - - - - -选项lsqlin
选择使用optimoptions
|由等结构optimset
选项lsqlin
指定的输出optimoptions
由等功能或结构optimset
。
有些选项是缺席的optimoptions
显示。这些选项出现在以下表中斜体。有关详细信息,请参见视图的优化选择。
所有的算法
|
选择的算法:
的 的 当问题没有限制, 如果你有大量的线性约束,而不是大量的变量,尝试 选择算法的更多信息,见选择算法。 |
诊断 | 显示诊断信息函数最小化或解决。的选择是 |
显示 |
水平显示返回到命令行中。
的
|
MaxIterations |
最大允许的迭代次数,一个正整数。默认值是 为 |
trust-region-reflective
算法的选择
FunctionTolerance |
终止公差函数值,一个积极的标量。默认值是 为 |
JacobianMultiplyFcn |
雅可比矩阵乘法函数,指定为一个函数处理。大规模的结构性问题,这个函数应该计算雅可比矩阵产品 W = jmfun(动力系统,Y,标志) 在哪里
在每种情况下, 看到雅可比矩阵乘法函数与线性最小二乘法了一个例子。 为 |
MaxPCGIter | 最大数量的首选条件共轭梯度迭代,一个积极的标量。默认值是 |
OptimalityTolerance |
终止宽容的一阶最优性,积极的标量。默认值是 为 |
PrecondBandWidth | 上带宽预调节器的首选(预处理共轭梯度)。默认情况下,对角预处理(0)上带宽。用于一些问题,增加带宽减少了PCG迭代的数量。设置 |
SubproblemAlgorithm |
确定迭代步骤是如何计算的。默认的, |
TolPCG | 终止公差在PCG预处理共轭梯度迭代,一个积极的标量。默认值是 |
TypicalX |
典型的 |
内点
算法的选择
“激活集”
算法的选择
ConstraintTolerance |
公差约束违反,积极的标量。默认值是 为 |
ObjectiveLimit |
宽容(停止准则)是一个标量。如果目标函数值 |
OptimalityTolerance |
终止宽容的一阶最优性,积极的标量。默认值是 为 |
StepTolerance |
终止上公差 为 |
问题
- - - - - -优化问题
结构
优化问题,与以下字段指定为一个结构。
|
矩阵乘法器的术语C * x - d |
|
加常数项C * x - d |
|
矩阵线性不等式约束 |
|
向量的线性不等式约束 |
|
矩阵线性等式约束 |
|
向量的线性等式约束 |
磅 |
向量的下界 |
乌兰巴托 |
向量的上界 |
|
初始点x |
|
“lsqlin” |
|
选择创建optimoptions |
请注意
你不能使用热启动问题
论点。
数据类型:结构体
ws
- - - - - -热启动对象
对象创建使用optimwarmstart
热启动对象,指定为一个对象创建的使用optimwarmstart
。热启动对象包含起点和选项,以及可选的数据生成代码的内存大小。看到热启动的最佳实践。
例子:ws = optimwarmstart (x0,选项)
输出参数
x
——解决方案
真正的向量
解决方案,作为一个向量返回最小化的规范C * x d
主体范围和线性约束。
wsout
热启动对象——解决方案
LsqlinWarmStart
对象
溶液热启动对象,作为一个返回LsqlinWarmStart
对象。解决方案是wsout.X
。
您可以使用wsout
作为输入对象在随后的热启动lsqlin
调用。
resnorm
——客观价值
真正的标量
客观的价值,作为标量值返回规范(C * x d) ^ 2
。
剩余
——解决残差
真正的向量
解决方案残差,作为向量返回C * x d
。
exitflag
——算法停止条件
整数
算法停止条件,作为一个整数返回识别算法停止的原因。以下列出的值exitflag
和相应的原因lsqlin
停止了。
|
剩余的变化小于指定的公差 |
|
步长小于 |
|
功能融合解决方案 |
|
迭代次数超过 |
|
问题是不可行的。或, |
3 |
问题是无限的。 |
|
病态阻止进一步的优化。 |
|
无法计算的方向迈出的一步。 |
的退出消息内点
算法可以给更多细节的原因lsqlin
停止,如超出公差。看到出口标志和退出消息。
输出
——解决方案过程总结
结构
解决方案过程总结,作为一个结构,其中包含返回的信息优化过程。
|
数量的迭代解算器。 |
|
这些算法之一:
为一个无约束的问题, |
|
积极的约束违反违反约束(不返回
|
|
退出消息。 |
|
一阶最优的解决方案。看到一阶最优性测量。 |
linearsolver |
类型的内部线性规划求解, |
|
数量的共轭梯度迭代解算器。非空的唯一的 |
看到输出结构。
λ
——拉格朗日乘数法
结构
提示
对于无约束问题,您可以使用
mldivide
(矩阵左部)。当你没有限制,lsqlin
返回x = C \ d
。因为要解决的问题总是凸,
lsqlin
发现一个全球性的,虽然不一定是唯一的解决方案。如果你的问题有许多线性约束和几个变量,尝试使用
“激活集”
算法。看到与许多线性约束二次规划。更好的数值结果很可能如果你显式地指定平等,使用
Aeq
和说真的
隐式,而是使用磅
和乌兰巴托
。的
trust-region-reflective
算法不允许等于上界和下界。使用另一种算法。如果指定的输入范围不一致的问题,输出
x
是x0
和输出resnorm
和剩余
是[]
。你可以解决一些大的结构性问题,包括那些
C
矩阵是装入内存太大,使用trust-region-reflective
雅可比矩阵乘法函数算法。信息,请参阅trust-region-reflective算法的选择。
算法
Trust-Region-Reflective算法
该方法基于interior-reflective牛顿的一个子空间信赖域方法中描述的方法[1]。每个迭代都包括近似解大型线性系统使用条件共轭梯度法(PCG)。看到Trust-Region-Reflective最小二乘,特别是大型线性最小二乘法。
内点算法
的“内点”
算法是基于quadprog
“interior-point-convex”
算法。看到线性最小二乘:内点或激活集。
有效集算法
的“激活集”
算法是基于quadprog
“激活集”
算法。有关更多信息,请参见线性最小二乘:内点或激活集和激活集quadprog算法。
引用
[1]科尔曼,t·f·李和y。“反射牛顿方法,减少二次函数边界的一些变量,“暹罗杂志上优化》第六卷,4号,第1058 - 1040页,1996年。
吉尔[2],p E。,W. Murray, and M. H. Wright.实用的优化、学术出版社,伦敦,英国,1981年。
温暖的开始
热启动对象保持一个积极约束列表前解决问题。在解算器携带尽可能多的有效约束信息来解决当前的问题。如果前面的问题是不同的,没有激活集信息重用。在这种情况下,解算器有效地执行一个冷启动为了重建活动限制的列表。
选择功能
应用程序
的优化住编辑任务提供了一个可视化界面lsqlin
。
扩展功能
C / c++代码生成
生成C和c++代码使用MATLAB®编码器™。
使用笔记和限制:
lsqlin
万博1manbetx支持使用生成代码codegen
(MATLAB编码器)函数或MATLAB®编码器™应用程序,你必须有一个MATLAB编码器许可来生成代码。目标硬件必须支持标准的双精度浮点计算。万博1manbetx你不能为单精度或定点计算生成代码。
代码生成目标不使用MATLAB解决数学内核库一样。因此,代码生成解决方案可以解决不同的解决方案,特别是对万博 尤文图斯条件不佳的问题。
在MATLAB求解无约束和欠定的问题时,
lsqlin
调用mldivide
,它返回一个基本的解决方案。在代码生成,返回的解决方案最低标准,这通常是不同的。lsqlin
不支持万博1manbetx问题
理由代码生成。[x, fval] = lsqlin(问题)%不支持万博1manbetx
所有
lsqlin
输入矩阵等一个
,Aeq
,磅
,乌兰巴托
必须完整,而不是稀疏。稀疏矩阵转换为可以充分利用完整的
函数。的
磅
和乌兰巴托
参数必须有相同数量的条目的列数C
或必须是空的[]
。如果你的目标硬件不支持无限边界,使用万博1manbetx
optim.coder.infbound
。对于高级代码优化包括嵌入式处理器,您还需要嵌入式编码器®许可证。
你必须包括选项
lsqlin
并指定使用optimoptions
。必须包括的选项算法
选项,设置为“激活集”
。选择= optimoptions (“lsqlin”,“算法”,“激活集”);[x, fval exitflag] = lsqlin (C, d, A、b Aeq,说真的,磅,乌兰巴托,x0,选项);
代码生成支持这些选项:万博1manbetx
算法
——必须“激活集”
ConstraintTolerance
MaxIterations
ObjectiveLimit
OptimalityTolerance
StepTolerance
生成的代码错误检查选项有限。推荐的方式来更新一个选项是使用
optimoptions
,而不是点符号。选择= optimoptions (“lsqlin”,“算法”,“激活集”);选择= optimoptions(选择,“MaxIterations”1 e4);%推荐选择。米axIterations = 1e4;%不推荐
不从文件加载选项。这样做会导致代码生成失败。相反,在代码中创建选项。
如果您指定一个选项不支持,在代码生成选项通常是忽略。万博1manbetx对于可靠的结果,指定仅支持选项。万博1manbetx
版本历史
之前介绍过的R2006a
Apri esempio
如果dispone di una versione modificata di questo esempio。Desideri aprire questo esempio con le modifiche星期二吗?
第一MATLAB
海脂肪clic苏联合国collegamento切corrisponde questo第一MATLAB:
Esegui il第一inserendolo所以nella隙缝di第一MATLAB。我浏览器web非supportano万博1manbetx comandi MATLAB。
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。