首页 > 解决方案 > 如何比较 lsqnonlin() 正在解决的算法

问题描述

我有多种算法试图使用 lsqnonlin 解决相同的问题。最后 3 个固定一个参数。我如何在这里阅读输出。

a) funCount 是什么意思?

b) 步长越小是否意味着结果越好?

c) 如果 firstOrderOpt 更接近于 0,是不是更好的结果?

算法 迭代 FunCount 步长 一阶选择
1 10 69 4.00E-10 3.00E-07
2 10 68 2.00E-09 2.00E-07
3 12 65 6.00E-11 1.00E-08
4 10 69 4.00E-10 3.00E-07
5 10 68 2.00E-09 2.00E-07
6 12 65 6.00E-11 1.00E-08

标签: matlab

解决方案


文档lsqnonline中,输出的字段是

字段名称 意义
第一顺序选择 一阶最优性的度量
迭代 迭代次数
函数计数 功能评估次数
重复 PCG 迭代总数(仅限于信任区域反射算法)
步长 x 中的最终位移
算法 使用的优化算法
信息 退出消息

具体解决您的问题,

a) funcCount是评估输入函数以获得结果的次数。

b)当您接近最佳解决方案时,可能需要更小的步长以避免直接“跳过”它。这并不是一个衡量“更好结果”的好方法,但你应该期望它很小(否则你可能会跳过最优值)但不会小到你会陷入函数中数值精度误差的噪音.

较小的步长也会减慢求解器的速度,并可能导致更多的迭代 - 您可以在结果表中看到这一点,因为具有顺序步长的两行1e-11比其他行具有更多的迭代。

StepSize在某种程度上取决于问题,有关公差和停止标准的相关 MathWorks 文档可能会有所帮助。

c)请阅读有关一阶最优性度量的 MathWorks 文档。

一阶最优性是对点 x 与最优值的接近程度的度量。大多数 Optimization Toolbox™ 求解器都使用此度量,尽管它对不同算法有不同的定义。一阶最优性是必要条件,但不是充分条件。换句话说:

  • 一阶最优性度量必须至少为零。
  • 一阶最优性为零的点不一定是最小值。

因此,较小的firstOrderOpt表示更好的结果,但不一定对真正的最佳值进行估计 - 如果我们有,那么我们可能已经知道真正的答案而无需优化器!

OptimalityTolerance有一个选项lsqnonlin,因此您可以控制求解器停止的一阶最优性必须有多小。再次,请参阅文档


推荐阅读