有约束线性最小二乘问题的数学模型为[大谦MATLAB,dqmatlab点com]
式中,C, A和Aeq为矩阵,d、b、beq、lb、ub和x为矢量。
最优化工具箱用lsqlin函数求解有约束线性最小二乘问题。调用格式为:
x = lsqlin(C, d, A, b) 求解最小二乘意义上的线性系统C*x=d,约束条件为A*x<=b,其中C为m*n的矩阵。
x = lsqlin(C, d, A,b, Aeq, beq) 加上等式约束Aeq*x = beq以后求解上面的问题。如果没有不等式存在,则令A=[ ]、b=[ ]。
x=lsqlin(C, d, A, b, Aeq, beq, lb, ub)为x定义一系列下界lb和上界ub,使得总有lb <=x<=ub。当没有等式约束存在时,令 Aeq=[ ]、beq=[ ]。x = lsqlin(C, d, A, b, Aeq, beq, lb, ub, x0) 设置初值x0。
x = lsqlin(C, d, A, b, Aeq, beq, lb, ub, x0, options) 用options结构指定的优化参数进行最小化。
[x, resnorm] = lsqlin(...) 返回残差的平方范数值:norm(C*x-d)^2。
[x, resnorm, residual] = lsqlin(...) 返回残差C*x-d。
[x, resnorm, residual, exitflag] = lsqlin(...) 返回exitflag参数,它包含函数的退出条件。
[x, resnorm, residual, exitflag, output] = lsqlin(...) 返回与优化信息有关的结构输出参数output。
[x, resnorm, residual, exitflag, output, lambda] = lsqlin(...) 返回解x处包含拉格朗日乘子的lambda。
【例19】求解下列问题的最小二乘解。
首先输入系数矩阵和下界、上界:
>> 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];
>> lb = -0.1*ones(4,1);
>> ub = 2*ones(4,1);
然后调用有约束线性最小二乘过程:
>> [x,resnorm,residual,exitflag,output,lambda] = ...
lsqlin(C, d, A, b, [ ], [ ], lb, ub)
计算结果为:
x =
-0.1000
-0.1000
0.2152
0.3502
resnorm =
0.1672
residual =
0.0455
0.0764
-0.3562
0.1620
0.0784
exitflag =
1
output =
包含以下字段的 struct:
message: 'Minimum found that satisfies…'
algorithm: 'interior-point'
firstorderopt: 4.3374e-11
constrviolation: 0
iterations: 6
linearsolver: 'dense'
cgiterations: []
lambda =
包含以下字段的 struct:
ineqlin: [3×1 double]
eqlin: [0×1 double]
lower: [4×1 double]
upper: [4×1 double]