主要内容

Lsqlin.

解决约束的线性最小二乘问题

描述

带有边界或线性约束的线性最小二乘求解器。

求解形式的最小二乘曲线拟合问题

X 1 2 C X - D. 2 2 这样 { 一种 X ≤. B. 一种 E. 问: X = B. E. 问: L. B. ≤. X ≤. B.

笔记

Lsqlin.仅适用于基于求解器的方法。有关两种优化方法的讨论,请参阅首先选择基于问题的或基于求解的方法

例子

X= lsqlin(CD.一种B.解决了线性系统c * x = d在最小的方形感觉中,受到影响斧头≤.B.

例子

X= lsqlin(CD.一种B.AEQ.贝卡UB.添加线性平等约束aeq * x = beq和界限≤.X≤.UB.。如果您不需要某些约束,例如AEQ.贝卡,把它们设置为[]。如果x(i)在下面无界,设置LB(i)= -inf, 而如果x(i)在上面无界,设置乌兰巴托(i) =正无穷

例子

X= lsqlin(CD.一种B.AEQ.贝卡UB.X0.选项用初始点最小化X0.以及指定的优化选项选项。用优化选择设置这些选项。如果您不想包含初始点,请设置X0.参数[]

X= lsqlin(问题找到最低限度问题,描述的结构问题。创造问题结构使用点符号或塑造功能。或者创造一个问题来自A.的结构优化问题通过使用prob2struct.

例子

[X恢复剩余的ExitFlag.输出lambda.] = lsqlin(___,对于上述任何输入参数,返回:

  • 剩余的平方2常态Resnorm =. C X - D. 2 2

  • 残余Residual = C * X-D

  • 一个值ExitFlag.描述退出条件

  • 结构输出包含有关优化过程的信息

  • 结构lambda.包含拉格朗日乘法器

    问题定义中的因子½会影响值lambda.结构体。

例子

[WSOUT.恢复剩余的ExitFlag.输出lambda.] = lsqlin(CD.一种B.AEQ.贝卡UB.WS.开始Lsqlin.从温暖的启动对象中的数据WS.,使用选项WS.。返回的论点WSOUT.包含解决方案点wsout.x.。通过使用WSOUT.作为后续求解器调用中的初始温暖启动对象,Lsqlin.可以更快地工作。

例子

全部收缩

找出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代表解决方案的乘数X在表达式中c * x - dCm-经过-N, 在哪里m是等式数,和N是元素的数量X

例子:C = [1,4; 2,5; 7,8]

数据类型:双倍的

常数矢量,指定为双打的矢量。D.表示表达中的添加恒定项c * x - dD.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.是一个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.是一个-经过-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)≥0X(3)≥4

数据类型:双倍的

上限,指定为矢量或双打数组。UB.表示元素的上限≤.X≤.UB.

在内部,Lsqlin.转换阵列UB.向量UB(:)

例子:UB = [INF; 4; 10]方法x(2)≤4X(3)≤10

数据类型:双倍的

解决方案过程的初始点,指定为真实的矢量或数组。这'信任区域反光''active-set'算法使用X0.(可选的)。

如果您未指定X0.为了'信任区域反光'或者'active-set'算法,Lsqlin.X0.到零载体。如果这个零载体的任何组成部分X0.违背了界限,Lsqlin.X0.到由边界定义的框内部的一个点。

例子:x0 = [4; -3]

数据类型:双倍的

选择Lsqlin.,指定为输出优化选择函数或作为诸如创建的结构优化集

某些选择缺席优化选择展示。这些选项在下表中显示在斜体中。有关详细信息,请参阅查看选项

所有算法

算法

选择算法:

  • '内点'(默认)

  • '信任区域反光'

  • 'active-set'

'信任区域反光'算法只允许上限和下限,没有线性不等式或平等。如果您指定了'信任区域反光'算法和线性约束,Lsqlin.用来'内点'算法。

'信任区域反光'算法不允许等于上限和下限。

当问题没有约束时,Lsqlin.呼叫莫德利维在内部。

如果您有大量线性约束而不是大量变量,请尝试'active-set'算法。

有关选择算法的更多信息,请参阅选择算法

诊断

显示有关要最小化或解决的函数的诊断信息。选择是'上'或默认值'离开'

展示

显示级别返回到命令行。

  • '离开'或者'没有任何'显示无输出。

  • '最终的'仅显示最终输出(默认值)。

'内点'算法允许附加值:

  • 'iter'提供迭代显示。

  • 'iter-comment'提供具有详细退出消息的迭代显示。

  • 最后详细的显示最终输出,具有详细的退出消息。

最大

允许的最大迭代次数,一个正整数。默认值是2000年为了'active-set'算法和算法200.对于其他算法。

为了优化集,选项名称是麦克斯特。看当前和遗留选项名称

信任区域反光算法选项

functiontolerance.

函数值终止差值,正标量。默认为100 * EPS., 关于2.2204E-14

为了优化集,选项名称是塔尔芬。看当前和遗留选项名称

JacobianMultiplyFcn

Jacobian乘法函数,指定为函数句柄。对于大规模的结构问题,此功能应计算Jacobian矩阵产品C * Y.c'* y, 或者c'*(c * y)没有实际形成C。在表单中写下该函数

w = jmfun(jinfo,y,flag)

在哪里jinfo.包含用于计算的矩阵C * Y.(或者c'* y, 或者c'*(c * y))。

JMFUN.必须计算三种不同的产品中的一个,具体取决于价值s manbetx 845旗帜Lsqlin.通过:

  • 如果标志== 0.然后w = c'*(c * y)

  • 如果旗> 0.然后w = c * y

  • 如果国旗<0.然后w = c'* y

在每种情况下,JMFUN.不需要形式C明确。Lsqlin.用途jinfo.计算前提者。看通过额外的参数有关如何在必要时提供额外参数的信息。

Jacobian乘以线性最小二乘函数例如,

为了优化集,选项名称是JacobMult.。看当前和遗留选项名称

MaxPCGIter

最大PCG(预处理缀合物梯度)迭代,正标量。默认为Max(1,楼层(Numberofvariables / 2))。有关更多信息,请参阅信任区域反光算法

最优法

一阶最优性,正标量的终止耐受性。默认为100 * EPS., 关于2.2204E-14。看一阶最优性测量

为了优化集,选项名称是塔尔芬。看当前和遗留选项名称

precondbandwidth.

PCG(预处理共轭梯度)的预安全置器的上带宽。默认情况下,使用对角线预处理(上带宽为0)。对于一些问题,增加带宽减少了PCG迭代的数量。环境precondbandwidth.使用直接分解(Cholesky)而不是共轭梯度(CG)。直接分解比CG计算更昂贵,但为解决方案产生更好的质量步骤。有关更多信息,请参阅信任区域反光算法

子项产算法

确定如何计算迭代步骤。默认值,'cg',比速度更快但不太准确“因子化”。看信任区域反光最小二乘

托尔巴夫

PCG(预处理缀合物梯度)迭代的终止公差,正标量。默认为0.1

典型的

典型的X价值观。元素的数量典型的等于变量的数量。默认值是(Numberofvarialbles,1)Lsqlin.用途典型的在内部进行缩放。典型的只有效果X有无限的组件,当一个典型的无界组件的价值大于1

内部点算法选项

约束特许

对约束违规的容忍度,一个正标量。默认为1E-8

为了优化集,选项名称是tolcon.。看当前和遗留选项名称

linearsolver

算法中内部线性求解器的类型:

  • '汽车'(默认) - 使用'疏'如果是C矩阵稀疏,'稠密'除此以外。

  • '疏'- 使用稀疏线性代数。看稀疏矩阵

  • '稠密'- 使用密集的线性代数。

最优法

一阶最优性,正标量的终止耐受性。默认为1E-8。看一阶最优性测量

为了优化集,选项名称是塔尔芬。看当前和遗留选项名称

StepTolerance.

终止宽容X,一个正标量。默认为1E-12

为了优化集,选项名称是托克斯。看当前和遗留选项名称

'active-set'算法选项

约束特许

对约束违规的容忍度,一个正标量。默认值是1E-8

为了优化集,选项名称是tolcon.。看当前和遗留选项名称

Objectivelimit.

宽度(停止标准)是标量。如果目标函数值下面Objectivelimit.并且当前点是可行的,迭代停止,因为问题是无界的,可能是。默认值是-1E20.

最优法

一阶最优性,正标量的终止耐受性。默认值是1E-8。看一阶最优性测量

为了优化集, 名字是塔尔芬。看当前和遗留选项名称

StepTolerance.

终止宽容X,一个正标量。默认值是1E-8

为了优化集,选项名称是托克斯。看当前和遗留选项名称

优化问题,指定为具有以下字段的结构。

C

矩阵乘法器在术语中c * x - d

D.

术语中添加剂常数c * x - d

Aineq.

线性不等式约束的矩阵

Bineq.

线性不等式约束的矢量

AEQ.

矩阵的线性等式约束

贝卡

线性平等约束的矢量
下限矢量
UB. 上限矢量

X0.

初始点X

求解器

'lsqlin'

选项

选择的选项优化选择

笔记

你不能用温暖的开始问题论点。

数据类型:塑造

热启动对象,指定为使用的对象Optimwarmstart.。温暖的启动对象包含代码生成中的内存大小的起始点和选项,以及可选数据。看温暖的开始最佳实践

例子:WS = OptimWarmStart(X0,选项)

输出参数

全部收缩

解决方案,作为载体返回,以最小化规范C * X-D受到所有界限和线性约束的影响。

解决方案温暖启动对象,作为一个返回lsqlinwarmstart.目的。解决方案点是wsout.x.

您可以使用WSOUT.作为输入温暖的启动对象在随后的Lsqlin.称呼。

客观价值,作为标量值返回规范(C * X-D)^ 2

溶液残留物,返回矢量C * X-D

算法停止条件,返回作为识别算法停止的原因的整数。以下列出了值的值ExitFlag.和相应的原因Lsqlin.停了下来。

3.

残余的变化小于指定的公差options.FunctionTolerance.。(信任区域反光算法)

2

步长小于选项.Steptolerance.,约束满意。(内部点算法)

1

函数收敛于一个解X

0.

超出迭代次数options.maxIterations.

-2

问题是不可行的。或者,对于内部点算法,步长比选项.Steptolerance.,但不满足约束。

-3 问题是无界的。

-4

不良调控可防止进一步优化。

-8

无法计算步进方向。

退出消息内部点算法可以提供更多细节的原因Lsqlin.停止,如超出容忍度。看退出标志和退出消息

解决方案过程摘要,作为包含有关优化过程信息的结构。

迭代

解算器采取的迭代次数。

算法

其中一个算法:

  • '内点'

  • '信任区域反光'

  • 'mldivide'对于不受约束的问题

对于不受约束的问题,迭代= 0,以及剩下的条目输出结构是空的。

CONSTRVIOMATION.

违反限制的限制违规(未返回)'信任区域反光'算法)。

CONSTRVIOLATION = MAX([0; NORM(AEQ * X-BEQ,INF);(LB-X);(X-UB);(A * X-B)])

信息

退出消息。

firstordopt.

在解决方案的一流最优性。看一阶最优性测量

linearsolver

内部线性求解器的类型,'稠密'或者'疏''内点'仅限算法)

cgiteration.

求解器执行的共轭梯度迭代的数量。只为'信任区域反光'算法。

输出结构

Lagrange乘法器,用以下字段作为结构返回。

降低

下限

上限UB.

ineqlin.

线性不平等

eqlin.

线性平等

拉格朗日乘法器结构

尖端

  • 对于没有约束的问题,您可以使用莫德利维(矩阵左部)。当你没有约束时,Lsqlin.回报x = c \ d

  • 因为解决的问题总是凸起的,Lsqlin.找到一个全局,虽然不一定是独一无二的解决方案。

  • 如果您的问题有许多线性约束和几个变量,请尝试使用'active-set'算法。看具有许多线性约束的二次编程

  • 如果您明确指定平等,可能会使用更好的数值结果AEQ.贝卡,而不是隐含地使用UB.

  • 信任区域反光算法不允许等于上限和下限。使用另一种算法在这种情况下。

  • 如果出现问题的指定输入界限是不一致的,则输出XX0.和产出恢复剩余的[]

  • 你可以解决一些大规模的结构问题,包括那些含有的问题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.

扩展能力

在R2006A之前介绍