解决约束的线性最小二乘问题
找出X
这最小化了规范c * x - d
对于线性不等式约束的过多问题。
指定问题和约束。
C = [0.9501 0.7620 0.6153 0.4570 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 0.1762 0.8936 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.4570 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 0.1762 0.8936 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;lb = -0.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.4570 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 0.1762 0.8936 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.000617E-10 2.036997E-08 1.370933E-02 1.370933E-02 4 -3.912129E-01 9.997558E-14 1.0068160-08 2.548273E-03 5 -3.948062E-01 1.665335E-16 2.955102E-09 4.295807E-04 6 -3.953277E-01 2.775558E-17 1.237558E-17 1.237558E-17 1.237758E-09 3.122850E-05 7 -3.953581C-01 1.1102230-16 1.1387192-07 8 -3.953582E-01 1.387779E-16 2.401829E-13 5.693290E-11最低限度,满足约束。优化完成,因为目标函数在可行的方向上不降低,到在最优性公差的值内,并且对约束公差的值满足约束。
X =4×10.1299 -0.5757 0.4251 0.2438
获得并解释所有Lsqlin.
输出。
定义线性不等式约束和界限的问题。问题已经过度规定,因为中有四列C
矩阵但五行。这意味着问题有四个未知数和五个条件,甚至在包括线性约束和边界之前。
C = [0.9501 0.7620 0.6153 0.4570 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 0.1762 0.8936 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];lb = -0.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:[]
λ=结构与字段:INEQLIN:[3x1 DOUBLE] EQLIN:[0x1双]下部:[4x1双]鞋面:[4x1双]
更详细地检查非零Lagrange乘法器字段。首先检查Lagrange乘法器,用于线性不等式约束。
lambda.ineqlin.
ans =.3×10.0000 0.2392 0.0000
当解在相应的约束边界上时,拉格朗日乘子恰好是非零的。换句话说,当相应的约束是有效的时,拉格朗日乘子是非零的。lambda.ineqlin(2)
是非零的。这意味着第二个元素斧头
应该等于第二个元素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
。
创建一个温暖的启动对象,以便快速解决修改后的问题。设置选项以关闭迭代显示以支持温暖的开始。万博1manbetx
RNG.默认重复性的%选择= optimoptions ('lsqlin'那'算法'那'active-set'那'展示'那'离开');n = 15;x0 = 5 * rand(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;lb = -5 *α(1,n);UB = 5 *那些(1,n);TIC [WS,FVAL,〜,EXITFLAG,输出] = LSQLIN(C,D,[],[],[],[],LB,UB,WS)TOC
经过时间为0.005117秒。
添加线性约束并再次解决。
a = =(1,n);b = -10;TIC [WS,FVAL,〜,EXITFLAG,输出] = LSQLIN(C,D,A,B,[],[],LB,UB,WS)TOC
经过时间为0.001491秒。
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 = 1 (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 = 1 (1, N)
和Beq = 1
。
数据类型:双倍的
磅
-下限[]
(默认)|真正的矢量或阵列下限,指定为载体或双打数组。磅
表示元素的下限磅
≤.X
≤.UB.
。
在内部,Lsqlin.
转换阵列磅
向量磅(:)
。
例子:lb = [0; -inf; 4]
方法X(1)≥0
那X(3)≥4
。
数据类型:双倍的
UB.
-上限[]
(默认)|真正的矢量或阵列上限,指定为矢量或双打数组。UB.
表示元素的上限磅
≤.X
≤.UB.
。
在内部,Lsqlin.
转换阵列UB.
向量UB(:)
。
例子:UB = [INF; 4; 10]
方法x(2)≤4
那X(3)≤10
。
数据类型:双倍的
X0.
-初始点[]
(默认)|真正的矢量或阵列解决方案过程的初始点,指定为真实的矢量或数组。这'信任区域反光'
和'active-set'
算法使用X0.
(可选的)。
如果您未指定X0.
为了'信任区域反光'
或者'active-set'
算法,Lsqlin.
套X0.
到零载体。如果这个零载体的任何组成部分X0.
违背了界限,Lsqlin.
套X0.
到由边界定义的框内部的一个点。
例子:x0 = [4; -3]
数据类型:双倍的
选项
-选择Lsqlin.
优化选择
|结构如创建的结构优化集
选择Lsqlin.
,指定为输出优化选择
函数或作为诸如创建的结构优化集
。
某些选择缺席优化选择
展示。这些选项在下表中显示在斜体中。有关详细信息,请参阅查看选项。
所有算法
|
选择算法:
这 这 当问题没有约束时, 如果您有大量线性约束而不是大量变量,请尝试 有关选择算法的更多信息,请参阅选择算法。 |
诊断 | 显示有关要最小化或解决的函数的诊断信息。选择是 |
展示 |
显示级别返回到命令行。
这
|
最大 |
允许的最大迭代次数,一个正整数。默认值是 为了 |
信任区域反光
算法选项
functiontolerance. |
函数值终止差值,正标量。默认为 为了 |
JacobianMultiplyFcn |
Jacobian乘法函数,指定为函数句柄。对于大规模的结构问题,此功能应计算Jacobian矩阵产品 w = jmfun(jinfo,y,flag) 在哪里
在每种情况下, 为了 |
MaxPCGIter | 最大PCG(预处理缀合物梯度)迭代,正标量。默认为 |
最优法 |
一阶最优性,正标量的终止耐受性。默认为 为了 |
precondbandwidth. | PCG(预处理共轭梯度)的预安全置器的上带宽。默认情况下,使用对角线预处理(上带宽为0)。对于一些问题,增加带宽减少了PCG迭代的数量。环境 |
子项产算法 |
确定如何计算迭代步骤。默认值, |
托尔巴夫 | PCG(预处理缀合物梯度)迭代的终止公差,正标量。默认为 |
典型的 |
典型的 |
内部点
算法选项
问题
-优化问题优化问题,指定为具有以下字段的结构。
|
矩阵乘法器在术语中c * x - d |
|
术语中添加剂常数c * x - d |
|
线性不等式约束的矩阵 |
|
线性不等式约束的矢量 |
|
矩阵的线性等式约束 |
|
线性平等约束的矢量 |
磅 |
下限矢量 |
UB. |
上限矢量 |
|
初始点X |
|
'lsqlin' |
|
选择的选项优化选择 |
笔记
你不能用温暖的开始问题
论点。
数据类型:塑造
WS.
-温暖的开始对象Optimwarmstart.
热启动对象,指定为使用的对象Optimwarmstart.
。温暖的启动对象包含代码生成中的内存大小的起始点和选项,以及可选数据。看温暖的开始最佳实践。
例子:WS = OptimWarmStart(X0,选项)
X
- 解决方案解决方案,作为载体返回,以最小化规范C * X-D
受到所有界限和线性约束的影响。
WSOUT.
- 解决方案温暖启动对象lsqlinwarmstart.
目的解决方案温暖启动对象,作为一个返回lsqlinwarmstart.
目的。解决方案点是wsout.x.
。
您可以使用WSOUT.
作为输入温暖的启动对象在随后的Lsqlin.
称呼。
恢复
- 目标价值客观价值,作为标量值返回规范(C * X-D)^ 2
。
剩余的
——解决残差溶液残留物,返回矢量C * X-D
。
ExitFlag.
- 算法停止条件算法停止条件,返回作为识别算法停止的原因的整数。以下列出了值的值ExitFlag.
和相应的原因Lsqlin.
停了下来。
|
残余的变化小于指定的公差 |
|
步长小于 |
|
函数收敛于一个解 |
|
超出迭代次数 |
|
问题是不可行的。或者,对于 |
-3 |
问题是无界的。 |
|
不良调控可防止进一步优化。 |
|
无法计算步进方向。 |
退出消息内部点
算法可以提供更多细节的原因Lsqlin.
停止,如超出容忍度。看退出标志和退出消息。
输出
-解决方案过程总结解决方案过程摘要,作为包含有关优化过程信息的结构。
|
解算器采取的迭代次数。 |
|
其中一个算法:
对于不受约束的问题, |
|
违反限制的限制违规(未返回)
|
|
退出消息。 |
|
在解决方案的一流最优性。看一阶最优性测量。 |
linearsolver |
内部线性求解器的类型, |
|
求解器执行的共轭梯度迭代的数量。只为 |
看输出结构。
lambda.
- 拉格朗日乘客对于没有约束的问题,您可以使用莫德利维
(矩阵左部)。当你没有约束时,Lsqlin.
回报x = c \ d
。
因为解决的问题总是凸起的,Lsqlin.
找到一个全局,虽然不一定是独一无二的解决方案。
如果您的问题有许多线性约束和几个变量,请尝试使用'active-set'
算法。看具有许多线性约束的二次编程。
如果您明确指定平等,可能会使用更好的数值结果AEQ.
和贝卡
,而不是隐含地使用磅
和UB.
。
这信任区域反光
算法不允许等于上限和下限。使用另一种算法在这种情况下。
如果出现问题的指定输入界限是不一致的,则输出X
是X0.
和产出恢复
和剩余的
是[]
。
你可以解决一些大规模的结构问题,包括那些含有的问题C
矩阵太大,不适合内存,使用信任区域反光
具有Jacobian乘法函数的算法。有关信息,请参阅信任区域反光算法选项。
该方法是基于描述的内部反射牛顿方法的子空间信任区域方法[1]。每次迭代涉及使用预处理共轭梯度(PCG)的方法的大线性系统的近似解。看信任区域反光最小二乘,特别是大规模线性最小二乘。
这'内点'
算法基于Quadprog.
'内部point-convex'
算法。看线性最小二乘:内部点或主动集。
这'active-set'
算法基于Quadprog.
'active-set'
算法。有关更多信息,请参阅线性最小二乘:内部点或主动集和主动集Quadprog算法。
[1]科尔曼,T. F.和Y. Li。“反思牛顿方法,用于最大限度地减少对某些变量界限的二次函数,”暹罗期刊优化,卷。6,4,第4页,第1040-1058,1996。
[2] Gill,P. E.,W.Murray和M. H. Wright。实际优化,学术出版社,伦敦,英国,1981年。
温暖的启动对象维护来自先前解决的问题的活动约束列表。求解器通过尽可能多地运行最大的激活约束信息以解决当前问题。如果先前的问题与当前的问题太不同,则不会重复使用活动集信息。在这种情况下,求解器有效地执行冷启动以重建活动约束列表。
这优化Live Editor任务提供可视界面Lsqlin.
。
使用说明和限制:
Lsqlin.
万博1manbetx支持使用代码生成使用Codegen.
(MATLAB编码器)功能或者马铃薯®编码器™应用程序。你必须有一个Matlab编码器生成代码的许可证。
目标硬件必须支持标准的双精度浮点计算。万博1manbetx您无法生成单精度或固定点计算的代码。
代码生成目标不使用与Matlab求解器相同的数学内核库。因此,代码生成解决方案可以因求解解决方案而异,特别是对万博 尤文图斯于条件不良问题。
在Matlab中解决不受约束和未定的问题时,Lsqlin.
呼叫莫德利维
,返回基本解决方案。在代码生成中,返回的解决方案具有最小规范,通常不同。
Lsqlin.
不支持万博1manbetx问题
代码生成的参数。
[x,fval] = lsqlin(问题)% 不支持万博1manbetx
全部Lsqlin.
输入矩阵,如一种
那AEQ.
那磅
, 和UB.
一定要充实,不能稀疏。类可以将稀疏矩阵转换为完整矩阵满的
功能。
这磅
和UB.
参数必须具有与列数相同的条目C
或者必须是空的[]
。
对于涉及嵌入式处理器的高级代码优化,您还需要嵌入式编码器®执照。
您必须包含选项Lsqlin.
并使用它指定它们优化选择
。选项必须包括算法
选项,设置为'active-set'
。
选择= optimoptions ('lsqlin'那'算法'那'active-set');[x,fval,ExitFlag] = LSQLIN(C,D,A,B,AEQ,BEQ,LB,UB,X0,选项);
代码生成支持这些选项:万博1manbetx
算法
- 一定是'active-set'
约束特许
最大
Objectivelimit.
最优法
StepTolerance.
生成的代码有限错误检查选项。建议更新选项的方法是使用优化选择
,不是点表示法。
opts = Optimoptions('lsqlin'那'算法'那'active-set');选择= optimoptions(选择,'maxtations',1E4);% 受到推崇的opts.maxIterations = 1E4;% 不建议
不要从文件加载选项。这样做会导致代码生成失败。相反,在代码中创建选项。
如果指定不支持的选项,则在代码生成期间通常会忽略该选项。万博1manbetx有关可靠的结果,仅指定支持的选项。万博1manbetx
您单击了与此MATLAB命令对应的链接:
在MATLAB命令窗口中输入它来运行命令。Web浏览器不支持MATLAB命令。万博1manbetx
您还可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。