主要内容

基于求解器的非负线性最小二乘

这个例子展示了如何使用几种算法来解决一个解是非负约束的线性最小二乘问题。线性最小二乘问题有这样的形式

最小值 x C x - d 2

在这种情况下,约束解是非负的, x 0

首先,加载数组 C d 到您的工作区。

负载粒子

查看每个数组的大小。

sizec =大小(C)
sizec =1×22000 400
尺寸的大小= (d)
大小=1×22000年1

C矩阵有2000行和400列。因此,为了得到矩阵乘法的正确大小x向量有400行。为了表示非负性约束,将所有变量的下界设为零。

LB =零(尺寸(C,2),1);

使用方法解决问题lsqlin

[x, resnorm残留,exitflag,输出]=...lsqlin(c,d,[],[],[],[],LB);
最低发现满足约束。优化完成,因为目标函数在可行的方向上不降低,到在最优性公差的值内,并且对约束公差的值满足约束。

要查看优化过程的细节,请检查输出结构。

disp(输出)
消息:“……' algorithm: 'interior-point' firstorderopt: 3.6717e-06 construct: 0 iterations: 8 linearsolver: 'sparse' cgiterations: []

输出结构表明了这一点lsqlin对内点算法使用一个稀疏内部线性解算器,需要8次迭代才能达到约3.7e-6的一阶最优测度。

改变算法

信任区域反光算法处理绑定受限的问题。看看它对这个问题的表现有多好。

选项= Optimoptions(“lsqlin”“算法”'信任区域反光');[X2,Resnorm2,Reseal2,ExitFlag2,Output2] =...LSQLIN(C,D,[],[],[],[],LB,[],[],选项);
地方最低可能。LSQLIN停止,因为功能值的相对变化小于功能公差的平方根,并且函数值的变化率慢。
disp (output2)
cgiterations: 10 algorithm: ' trusted -region-reflective' firstderopt: 2.7870e-05 cgiterations: 42 construct: [] linearsolver: [] message: 'Local minimum possible....'

这一次,求解器需要进行更多的迭代,并得到一个具有更高(更差)一阶最优测度的解。

要提高一阶的最优性测量,请尝试设置SubproblemAlgorithm选择“分解”

选项.subproblebalgorithm =“分解”;[x3, resnorm3 residual3、exitflag3 output3] =...LSQLIN(C,D,[],[],[],[],LB,[],[],选项);
找到最优解。
disp (output3)
firstorderopt: 5.5907e-15 cgiterations: 0 construcviolation: [] linearsolver: [] message: 'Optimal solution found.'

使用此选项可使一阶最优度量接近于零,这是可能的最佳结果。

改变解算器

试着用…来解决问题lsqnonneg求解器,设计用于处理非负线性最小二乘。

[x4, resnorm4 residual4、exitflag4 output4] = lsqnonneg (C, d);disp (output4)
迭代:184算法:'active-set'消息:'优化终止。

lsqnonneg不报告一阶最优测度。相反,调查剩余的规范。要看到低显著性数字,从每个剩余范数减去22.5794。

T = table(resnorm - 22.5794, resnorm2 - 22.5794, resnorm3 - 22.5794, resnorm4 - 22.5794,...“VariableNames”,{'默认''信任区域反光'“分解”“lsqnonneg”})
t =1×4表默认trust-region-reflective分解lsqnonneg  __________ _______________________ _____________ __________ 4.9179 4.9179 4.9186 7.5411 e-05 e-05 e-05 e-05

默认的lsqlin算法具有较高的残差范数trust-region-reflective算法。的分解lsqnonneg残余规范甚至更低,并且在这种显示精度水平上是相同的。看看哪一个较低。

DISP(RESNORM3  -  RESNORM4)
6.7857 e-13

lsqnonneg剩余范数是最低的,可以忽略不计。然而,lsqnonneg需要最多的迭代才能收敛。

另请参阅

|

相关话题