解决约束的线性最小二乘问题
找出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];BEQ = 4;磅= -0.1 * 1 (4,1);UB = 2 *那些(4,1);
称呼Lsqlin.
来解决这个问题。
X = LSQLIN(C,D,A,B,AEQ,BEQ,LB,UB))
最低发现满足约束。优化完成,因为目标函数在可行的方向上不降低,到在最优性公差的值内,并且对约束公差的值满足约束。
X =4×1-0.1000 -0.1000 0.1599 0.4090
此示例显示如何使用非默博选项进行线性最小二乘。
设置选项以使用'内点'
算法和给出迭代显示。
选项= Optimoptions('lsqlin'那'算法'那'内点'那'展示'那'iter');
设置线性最小二乘问题。
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 INFEAS双INFEAS互补0 -7.687420E-02 1.600492C + 00 6.150431C-01 1.000000E + 00 1 -7.687419E-02 8.0024580-04 3.0752160-04 2.430833C-01 2 -3.162837E-01 4.001229E-07 1.537608E-07 5.945636C-02 3 -3.760545E-01 2.000615E-10 2.036997E-08 1.370933E-02 4 -3.912129E-01 9.997558E-14 1.006816C-08 2.548273E-03 5 -3.948062E-01 0.000000E + 00 2.955102E-09 4.295807E-04 6 -3.953277E-01 1.1102232-16 1.23758E-09 3.1237758E-09 3.102850E-05 7 -3.953581C-01 1.64586358-16 1.138719E-10 1.138719E-07 8 -3.953582E-01 5.551115E-17 2.400025E-13 5.693290E-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];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);UB = 2 *那些(4,1);
设置选项以使用'内点'
算法。
选项= Optimoptions('lsqlin'那'算法'那'内点');
这'内点'
算法不使用初始点,因此设置X0.
到[]
.
x0 = [];
称呼Lsqlin.
所有输出。
[x,Resnorm,Reseulual,ExitFlag,输出,Lambda] =......LSQLIN(C,D,A,B,[],[],LB,UB,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 Constrviolation:0迭代:6 linearsolver:'密集'cgiterations:[]
lambda =结构体字段:INEQLIN:[3x1 DOUBLE] EQLIN:[0x1双]下部:[4x1双]鞋面:[4x1双]
更详细地检查非零Lagrange乘法器字段。首先检查Lagrange乘法器,用于线性不等式约束。
lambda.ineqlin
ans =3×10.0000 0.2392 0.0000
当解决方案在相应的约束边界上时,拉格朗日乘数是非零。换句话说,当相应的约束处于活动状态时,拉格朗日乘法器是非零。lambda.ineqlin(2)
是非零的。这意味着第二个元素* x
应该等于第二个元素B.
,因为约束是主动的。
[a(2,:) * x,b(2)]
ans =1×20.2026 - 0.2026
现在检查Lagrange乘法器,用于下限和上限约束。
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
是m
-经过-N
, 在哪里m
是等式数,和N
是元素的数量X
.
例子:C = [1,4; 2,5; 7,8]
数据类型:双倍的
D.
-恒定矢量常数矢量,指定为双打的矢量。D.
表示表达中的添加恒定项c * x - d
.D.
是m
-经过-1
, 在哪里m
为方程的个数。
例子:d = [5; 0; -12]
数据类型:双倍的
一种
-线性不等式约束线性不等式约束,指定为实矩阵。一种
是一个m
-经过-N
矩阵,其中m
是不平等的数量,而且N
是变量数量(元素数X0.
)。对于大问题,通过一种
作为稀疏矩阵。
一种
编码m
线性不平等
a * x <= b
那
在哪里X
是栏矢量N
变量X(:)
,B.
是一个列向量m
元素。
例如,要指定
X1+ 2X2≤10.
3.X1+ 4X2≤20
5.X1+ 6X2≤30日
输入这些约束:
a = [1,2; 3,4; 5,6];B = [10; 20; 30];
例子:要指定x分量的和为1或更小,请使用a = =(1,n)
和b = 1
.
数据类型:双倍的
B.
-线性不等式约束线性不平等约束,指定为真正的矢量。B.
是一个m
- 与...相关的矢量一种
矩阵。如果你通过了B.
作为一排矢量,求解器内部转换B.
到列向量b (:)
.对于大问题,通过B.
作为一个稀疏向量。
B.
编码m
线性不平等
a * x <= b
那
在哪里X
是栏矢量N
变量X(:)
,一种
矩阵的大小是多少m
-经过-N
.
例如,考虑这些不等式:
X1+ 2X2≤10.
3.X1+ 4X2≤20
5.X1+ 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];Beq = [10; 20];
例子:要指定x分量的和为1,使用AEQ = ONE(1,N)
和Beq = 1
.
数据类型:双倍的
贝卡
-线性平等约束线性平等约束,指定为真正的矢量。贝卡
是一个我
- 与...相关的矢量AEQ.
矩阵。如果你通过了贝卡
作为一排矢量,求解器内部转换贝卡
到列向量Beq(:)
.对于大问题,通过贝卡
作为一个稀疏向量。
贝卡
编码我
线性平等
aeq * x = beq
那
在哪里X
是栏矢量N
变量X(:)
,AEQ.
矩阵的大小是多少我
-经过-N
.
例如,考虑以下平等:
X1+ 2X2+ 3X3.= 10
2X1+ 4X2+X3.= 20。
通过输入以下约束来指定等式。
AEQ = [1,2,3; 2,4,1];Beq = [10; 20];
例子:要指定x分量的和为1,使用AEQ = ONE(1,N)
和Beq = 1
.
数据类型:双倍的
磅
-下界[]
(默认)|真正的矢量或阵列下界,指定为双精度向量或数组。磅
表示元素方向的下界磅
≤.X
≤.UB.
.
在内部,Lsqlin.
转换阵列磅
向量磅(:)
.
例子:lb = [0; -inf; 4]
方法X(1)≥0
那X(3)≥4
.
数据类型:双倍的
UB.
-上界[]
(默认)|真正的矢量或阵列上限,指定为矢量或双打数组。UB.
表示元素的上界磅
≤.X
≤.UB.
.
在内部,Lsqlin.
转换阵列UB.
向量乌兰巴托(:)
.
例子:UB = [INF; 4; 10]
方法X(2)≤4
那X(3)≤10
.
数据类型:双倍的
X0.
-初始点[]
(默认)|真正的矢量或阵列解过程的初始点,指定为实向量或数组。这'信任区域反光'
和“激活集”
算法使用X0.
(可选的)。
如果您未指定X0.
为了'信任区域反光'
或“激活集”
算法,Lsqlin.
套X0.
到零载体。如果这个零载体的任何组成部分X0.
违反界限,Lsqlin.
套X0.
到边界所定义的方框内部的一个点。
例子:x0 = (4; 3)
数据类型:双倍的
选项
-选择Lsqlin.
优化选择
|结构如创建的结构优化集
选择Lsqlin.
,指定为输出优化选择
函数或作为诸如创建的结构优化集
.
某些选择缺席优化选择
展示。这些选项在下表中显示在斜体中。有关详细信息,请参阅视图选项.
所有的算法
|
选择算法:
这 这 当问题没有约束时, 如果你有大量的线性约束而不是大量的变量,尝试 有关选择算法的更多信息,请参阅选择算法. |
诊断 | 显示有关要最小化或解决的函数的诊断信息。选择是 |
展示 |
返回到命令行的显示级别。
这
|
最大 |
允许的最大迭代次数,一个正整数。默认值为 为了 |
trust-region-reflective
算法选项
functiontolerance. |
函数值终止差值,正标量。默认为 为了 |
JacobianMultiplyFCN. |
Jacobian乘法函数,指定为函数句柄。对于大规模的结构问题,此功能应计算Jacobian矩阵产品 W = jmfun(动力系统,Y,标志) 在哪里
在每种情况下, 为了 |
maxpcgiter. | 最大PCG(预处理缀合物梯度)迭代,正标量。默认为 |
最优法 |
一阶最优性,正标量的终止耐受性。默认为 为了 |
precondbandwidth. | PCG(预条件共轭梯度)预调节器的上带宽。默认情况下,使用对角预处理(上限带宽为0)。对于某些问题,增加带宽可以减少PCG迭代次数。设置 |
子项产算法 |
确定如何计算迭代步骤。默认值, |
托尔巴夫 | PCG(预处理缀合物梯度)迭代的终止公差,正标量。默认为 |
TypicalX |
典型的 |
内部点
算法选项
问题
-优化问题优化问题,指定为具有以下字段的结构。
|
矩阵乘法器在术语中c * x - d |
|
术语中添加剂常数c * x - d |
|
线性不等式约束的矩阵 |
|
线性不等式约束的向量 |
|
线性平等约束的矩阵 |
|
线性等式约束的向量 |
磅 |
下限矢量 |
UB. |
上限矢量 |
|
初始点X |
|
'lsqlin' |
|
选择的选项优化选择 |
数据类型:结构体
X
——解决方案解决方案,作为载体返回,以最小化规范C * x d
服从所有的边界和线性约束。
resnorm
- 目标价值客观价值,作为标量值返回规范(C * X-D)^ 2
.
剩余的
- 解决方案残差解残差,返回为向量C * x d
.
ExitFlag.
- 算法停止条件算法停止条件,返回作为识别算法停止的原因的整数。以下列出了值的值ExitFlag.
和相应的原因Lsqlin.
停了下来。
|
残差的变化小于规定的公差 |
|
步长比 |
|
功能融合到解决方案 |
|
超出迭代次数 |
|
这个问题不可行。或, |
3 |
问题是无限的。 |
|
不良条件阻碍了进一步优化。 |
|
无法计算步进方向。 |
的退出消息内部点
算法可以提供更多细节的原因Lsqlin.
停止,如超出容忍度。看退出标志和退出消息.
输出
- 解决方案过程摘要解决方案过程摘要,作为包含有关优化过程信息的结构。
|
求解器所进行的迭代次数。 |
|
其中一个算法:
对于不受约束的问题, |
|
违反限制的限制违规(未返回)
|
|
退出消息。 |
|
在解决方案的一流最优性。看一阶最优测量. |
linearsolver |
内部线性求解器的类型, |
|
求解器执行的共轭梯度迭代次数。的非空 |
看输出结构.
lambda.
- 拉格朗日乘客对于没有约束的问题,您可以使用莫德利维
(矩阵左部)。当你没有约束时,Lsqlin.
回报x = c \ d
.
因为解决的问题总是凸起的,Lsqlin.
找到一个全局,虽然不一定是独一无二的解决方案。
如果您的问题有许多线性约束和几个变量,请尝试使用“激活集”
算法。看具有许多线性约束的二次编程.
如果您明确指定平等,可能会使用更好的数值结果AEQ.
和贝卡
,而不是隐含地使用磅
和UB.
.
这trust-region-reflective
算法不允许相等的上界和下界。使用另一种算法在这种情况下。
如果问题的指定输入边界不一致,则输出X
是X0.
和产出resnorm
和剩余的
是[]
.
你可以解决一些大规模的结构问题,包括那些含有的问题C
矩阵太大,无法适合内存,使用trust-region-reflective
具有Jacobian乘法函数的算法。有关信息,请参阅trust-region-reflective算法的选择.
该方法是基于描述的内部反射牛顿方法的子空间信任区域方法[1].每次迭代涉及使用预处理共轭梯度(PCG)的方法的大线性系统的近似解。看信任区域反光最小二乘,特别是大规模线性最小二乘.
这'内点'
算法是基于Quadprog.
'内部point-convex'
算法。看线性最小二乘:内部点或活动集.
这“激活集”
算法是基于Quadprog.
“激活集”
算法。有关更多信息,请参阅线性最小二乘:内部点或活动集和主动集Quadprog算法.
[1]科尔曼,T. F.和Y. Li。“反思牛顿方法,用于最大限度地减少对某些变量界限的二次函数,”暹罗期刊优化,第6卷,第4期,第1040-1058页,1996。
吉尔,P. E., W.默里和M. H.赖特。实用的优化,学术出版社,伦敦,英国,1981年。
这优化Live Editor任务提供可视界面Lsqlin.
.
您单击了与此MATLAB命令对应的链接:
在MATLAB命令窗口中输入它来运行命令。Web浏览器不支持MATLAB命令。金宝app
你也可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。