matlab - 如何比较 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 |
解决方案
从文档lsqnonline
中,输出的字段是
字段名称 | 意义 |
---|---|
第一顺序选择 | 一阶最优性的度量 |
迭代 | 迭代次数 |
函数计数 | 功能评估次数 |
重复 | PCG 迭代总数(仅限于信任区域反射算法) |
步长 | x 中的最终位移 |
算法 | 使用的优化算法 |
信息 | 退出消息 |
具体解决您的问题,
a) funcCount
是评估输入函数以获得结果的次数。
b)当您接近最佳解决方案时,可能需要更小的步长以避免直接“跳过”它。这并不是一个衡量“更好结果”的好方法,但你应该期望它很小(否则你可能会跳过最优值)但不会小到你会陷入函数中数值精度误差的噪音.
较小的步长也会减慢求解器的速度,并可能导致更多的迭代 - 您可以在结果表中看到这一点,因为具有顺序步长的两行1e-11
比其他行具有更多的迭代。
这StepSize
在某种程度上取决于问题,有关公差和停止标准的相关 MathWorks 文档可能会有所帮助。
c)请阅读有关一阶最优性度量的 MathWorks 文档。
一阶最优性是对点 x 与最优值的接近程度的度量。大多数 Optimization Toolbox™ 求解器都使用此度量,尽管它对不同算法有不同的定义。一阶最优性是必要条件,但不是充分条件。换句话说:
- 一阶最优性度量必须至少为零。
- 一阶最优性为零的点不一定是最小值。
因此,较小的firstOrderOpt
表示更好的结果,但不一定对真正的最佳值进行估计 - 如果我们有,那么我们可能已经知道真正的答案而无需优化器!
OptimalityTolerance
中有一个选项lsqnonlin
,因此您可以控制求解器停止的一阶最优性必须有多小。再次,请参阅文档。
推荐阅读
- angular - Within subscription event emitter?
- javascript - Setting style based on php return through ajax
- tensorflow - bazel server terminated abruptly (error code :14, error message: '',log file: 'c:\users\lee\_bazel_lee\zjiu63sl/server/jvm.out
- python - Finding euclidean distance given an index array and a pytorch tensor
- swift - iOS Swift 4 的 TableView 中的字母排序
- firebase - Firebase Functions on Firebase Hosting: 404
- python - 为端点使用单个处理程序会违反 REST 原则吗?
- javascript - 关于快速 ES6 学习的 Object Literals Pluralsight 课程
- javascript - 如何使用 event.target 获取元素的子元素
- asp.net - 无效的对象名称“我的表名”asp.net