主要内容

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在最小的方形感觉中,受到影响* x≤.B.

例子

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

例子

X= lsqlin (CD.一种B.AEQ.贝卡UB.X0.选项用初始点最小化X0.和中规定的优化选项选项.使用优化选择设置这些选项。如果您不想包含初始点,请设置X0.争论[]

X= lsqlin (问题找到最低限度问题中所描述的结构问题.创造问题结构使用点表示法或结构体函数。或者创建一个问题来自A.的结构优化问题通过使用prob2struct.

例子

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

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

  • 残余残差= C*x - d

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

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

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

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

例子

全部折叠

找出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代表解决方案的乘数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 = 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)≥0X(3)≥4

数据类型:双倍的

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

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

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

数据类型:双倍的

解过程的初始点,指定为实向量或数组。这'信任区域反光'“激活集”算法使用X0.(可选的)。

如果您未指定X0.为了'信任区域反光'“激活集”算法,Lsqlin.X0.到零载体。如果这个零载体的任何组成部分X0.违反界限,Lsqlin.X0.到边界所定义的方框内部的一个点。

例子:x0 = (4; 3)

数据类型:双倍的

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

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

所有的算法

算法

选择算法:

  • '内点'(默认)

  • '信任区域反光'

  • “激活集”

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

'信任区域反光'算法不允许相等的上界和下界。

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

如果你有大量的线性约束而不是大量的变量,尝试“激活集”算法。

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

诊断

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

展示

返回到命令行的显示级别。

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

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

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

  • 'iter'提供迭代显示。

  • “iter-detailed”给出一个详细的退出消息的迭代显示。

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

最大

允许的最大迭代次数,一个正整数。默认值为2000年为了“激活集”算法和算法200对于其他算法。

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

trust-region-reflective算法选项

functiontolerance.

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

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

JacobianMultiplyFCN.

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

W = jmfun(动力系统,Y,标志)

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

JMFUN.必须计算三种不同的产品中的一个,具体取决于价值下载188bet金宝搏旗帜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)).有关更多信息,请参阅Trust-Region-Reflective算法

最优法

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

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

precondbandwidth.

PCG(预条件共轭梯度)预调节器的上带宽。默认情况下,使用对角预处理(上限带宽为0)。对于某些问题,增加带宽可以减少PCG迭代次数。设置precondbandwidth.INF.使用直接分解(Cholesky)而不是共轭梯度(CG)。直接分解比CG计算更昂贵,但为解决方案产生更好的质量步骤。有关更多信息,请参阅Trust-Region-Reflective算法

子项产算法

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

托尔巴夫

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

TypicalX

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

内部点算法选项

约束特许

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

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

linearsolver

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

  • '汽车'(默认) - 使用'疏'如果是C矩阵稀疏,'稠密'否则。

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

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

最优法

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

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

StepTolerance.

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

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

“激活集”算法选项

约束特许

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

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

Objectivelimit.

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

最优法

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

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

StepTolerance.

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

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

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

C

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

D.

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

Aineq.

线性不等式约束的矩阵

Bineq.

线性不等式约束的向量

AEQ.

线性平等约束的矩阵

贝卡

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

X0.

初始点X

求解器

'lsqlin'

选项

选择的选项优化选择

数据类型:结构体

输出参数

全部折叠

解决方案,作为载体返回,以最小化规范C * x d服从所有的边界和线性约束。

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

解残差,返回为向量C * x d

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

3.

残差的变化小于规定的公差选项。functiontolerance..(trust-region-reflective算法)

2

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

1

功能融合到解决方案X

0.

超出迭代次数options.maxIterations.

-2

这个问题不可行。或,内部点算法,步长比选项.Steptolerance.,但不满足约束条件。

3 问题是无限的。

-4

不良条件阻碍了进一步优化。

-8

无法计算步进方向。

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

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

迭代

求解器所进行的迭代次数。

算法

其中一个算法:

  • '内点'

  • '信任区域反光'

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

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

constrviolation

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

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

消息

退出消息。

firstordopt.

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

linearsolver

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

cgiterations

求解器执行的共轭梯度迭代次数。的非空'信任区域反光'算法。

输出结构

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

较低的

下界

上界UB.

ineqlin.

线性不等式

eqlin.

线性等式

拉格朗日乘法器结构

提示

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

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

  • 如果您的问题有许多线性约束和几个变量,请尝试使用“激活集”算法。看具有许多线性约束的二次编程

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

  • trust-region-reflective算法不允许相等的上界和下界。使用另一种算法在这种情况下。

  • 如果问题的指定输入边界不一致,则输出XX0.和产出resnorm剩余的[]

  • 你可以解决一些大规模的结构问题,包括那些含有的问题C矩阵太大,无法适合内存,使用trust-region-reflective具有Jacobian乘法函数的算法。有关信息,请参阅trust-region-reflective算法的选择

算法

全部折叠

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.

之前介绍过的R2006a