求解约束线性最小二乘问题
找到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];A = [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];A =[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×10.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];A = [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 Fval Primal infas Dual infas complement 0 -7.687420e-02 1.600492e+00 6.150431e-01 1.000000e+00 1 -7.687419e-02 8.002458e-04 3.075216e-04 2.430833e-01 2 -3.162837e-01 4.001229e-07 1.537608e-07 5.945636e-02 3 -3.760545e-01 2.000615e-10 2.036997e-08 1.370933e-02 4 -3.912129e-01 9.997558e-14 1.006816e- 01 2.0048273e -03 5 -3.948062e-01发现满足约束条件的最小值为3.953582e-01优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。
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];A = [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.3374e-11冲突:0次迭代:6次线性解决方案:“密集”cgiterations:[]
λ=结构体字段:ineqlin:[3x1双精度]eqlin:[0x1双精度]下部:[4x1双精度]上部:[4x1双精度]
更详细地检查非零拉格朗日乘子场。首先检查线性不等式约束的拉格朗日乘子。
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
.
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
3.x1+ 4x2≤ 20
5x1+ 6x2≤30日
输入这些约束:
A=[1,2;3,4;5,6];b=[10;20;30];
例子:要指定x分量的和为1或更小,请使用A=一(1,N)
和b = 1
.
数据类型:双
b
- - - - - -线性不等式约束线性不等式约束,指定为实向量。b
是一个米
-与元素相关的元素向量一个
矩阵。如果你通过b
作为行向量,求解器内部转换b
到列向量b (:)
.对于大问题,不予考虑b
作为一个稀疏向量。
b
编码米
线性不等式
A * x < =
,
哪里x
是的列向量N
变量x(:)
,一个
矩阵的大小是多少米
——- - - - - -N
.
例如,考虑一下这些不平等:
x1+ 2x2≤ 10
3.x1+ 4x2≤ 20
5x1+ 6x2≤30。
通过输入以下约束来指定不等式。
A=[1,2;3,4;5,6];b=[10;20;30];
例子:要指定x分量的和为1或更小,请使用A=一(1,N)
和b = 1
.
数据类型:双
Aeq
- - - - - -线性等式约束线性等式约束,指定为实矩阵。Aeq
是一个我
——- - - - - -N
矩阵,我
是等式的个数,和N
是变量的数量(元素的数量x0
).对于大问题,不予考虑Aeq
作为一个稀疏矩阵。
Aeq
编码我
线性等式
Aeq*x=beq
,
哪里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=beq
,
哪里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
.
数据类型:双
磅
- - - - - -下界[]
(默认)|实向量或数组下界,指定为双精度向量或数组。磅
表示元素方向的下界磅
≤x
≤乌兰巴托
.
在内部,lsqlin
将一个数组磅
的向量磅(:)
.
例子:lb=[0;-Inf;4]
意味着x(1)≥ 0
,x(3)≥4
.
数据类型:双
乌兰巴托
- - - - - -上界[]
(默认)|实向量或数组上界,指定为双精度向量或数组。乌兰巴托
表示元素的上界磅
≤x
≤乌兰巴托
.
在内部,lsqlin
将一个数组乌兰巴托
的向量乌兰巴托(:)
.
例子:乌兰巴托= (Inf; 4; 10)
意味着x(2)≤4
,x(3)≤10
.
数据类型:双
x0
- - - - - -起始点[]
(默认)|实向量或数组解过程的初始点,指定为实向量或数组。的“trust-region-reflective”
和“激活集”
算法使用x0
(可选)。
如果没有指定x0
为“trust-region-reflective”
或“激活集”
算法,lsqlin
集x0
到0向量。如果这个零向量的任何分量x0
违背了界限,lsqlin
集x0
到边界所定义的方框内部的一个点。
例子:x0 = (4; 3)
数据类型:双
选项
- - - - - -选择lsqlin
optimoptions
|结构,如创建优化集
选择lsqlin
的输出optimoptions
功能或结构,如由优化集
.
控件中缺少一些选项optimoptions
展示。下表中以斜体显示这些选项。有关详细信息,请参阅视图选项.
所有的算法
|
选择算法:
的 的 当问题没有约束时, 如果你有大量的线性约束而不是大量的变量,尝试 有关选择算法的更多信息,请参见选择算法. |
诊断学 | 显示有关要最小化或解决的功能的诊断信息。选择是 |
展示 |
返回到命令行的显示级别。
的
|
MaxIterations |
允许的最大迭代次数,一个正整数。默认值为 为 |
trust-region-reflective
算法的选择
FunctionTolerance |
函数值上的终止容差,一个正标量。默认值是 为 |
JacobianMultiplyFcn |
雅可比乘函数,指定为函数句柄。对于大规模结构化问题,此函数应计算雅可比矩阵乘积 W = jmfun(动力系统,Y,标志) 哪里
在每种情况下, 看到雅可比函数与线性最小二乘举个例子。 为 |
MaxPCGIter | PCG(预处理共轭梯度)迭代的最大次数,正标量。默认值是 |
最佳耐受性 |
一阶最优性的终止容限,一个正标量。默认值是 为 |
预带宽 | PCG(预条件共轭梯度)预调节器的上带宽。默认情况下,使用对角预处理(上限带宽为0)。对于某些问题,增加带宽可以减少PCG迭代次数。设置 |
子问题算法 |
确定迭代步骤的计算方式。默认情况下, |
TolPCG | PCG(预处理共轭梯度)迭代上的终止容差,一个正标量。默认值是 |
TypicalX |
典型的 |
内点
算法的选择
问题
- - - - - -优化问题最优化问题,指定为具有以下字段的结构。
|
术语中的矩阵乘法器C * x - d |
|
这一项的加法常数C * x - d |
|
线性不等式约束的矩阵 |
|
线性不等式约束的向量 |
|
线性等式约束的矩阵 |
|
线性等式约束的向量 |
磅 |
下界向量 |
乌兰巴托 |
上界向量 |
|
初始点x |
|
“lsqlin” |
|
选择创建optimoptions |
数据类型:结构体
x
——解决方案解,返回为使的范数最小化的向量C * x d
服从所有的边界和线性约束。
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算法的选择.
该方法是基于中描述的内部反射牛顿法的子空间信赖域方法[1].每次迭代都涉及到使用预条件共轭梯度(PCG)方法求解一个大线性系统的近似解。看到Trust-Region-Reflective最小二乘,特别是大规模线性最小二乘.
的“内点”
算法是基于quadprog
“interior-point-convex”
算法。看见线性最小二乘:内部点或活动集.
的“激活集”
算法是基于quadprog
“激活集”
算法。有关更多信息,请参见线性最小二乘:内部点或活动集和主动集quadprog算法.
[1] 科尔曼、T.F.和Y.Li。一种反射牛顿法,用于最小化受某些变量边界约束的二次函数SIAM优化学报,第6卷,第4期,第1040-1058页,1996。
吉尔,P. E., W.默里和M. H.赖特。实用的优化,学术出版社,伦敦,英国,1981年。
的优化活动编辑器任务为lsqlin
.
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。万博1manbetx
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。