关于MINPACK使用和消息的一些问题

计算科学 优化 非线性规划 回归
2021-11-28 16:22:20

我正在尝试使用MINPACK的非线性拟合例程来将相当复杂的状态方程拟合到一组实验数据。数据的一个子集与 EoS 的简化形式相当吻合,这让我相信该实施原则上是有效的。然而,将整个数据集拟合到 EoS 的扩展形式似乎是不可能的,尽管数据集非常平滑且质量很好,尽管我最初的猜测接近预期的解决方案并且已经给出了不错的拟合。

这里最让我恼火的是:INFO 参数编码的拟合的返回状态并不太清楚。我的印象是 INFO=1 或 2 被认为是可以的;根据代码中的注释,它的意思是“算法估计平方和中的相对误差最多为 tol= 0.149E-07”或“算法估计 x 与解决方案之间的相对误差最多为 tol= 0.149 E-07",分别。但是,对于非常不同的解决方案(使用不同的起始猜测),我得到了这个返回状态。然后是状态 INFO=4,“fvec 与 jacobian 到机器精度的列正交”,我不太明白。我经常在只有 5 次迭代时得到它(对于 4 个拟合参数,其中似乎 4 次迭代单独改变每个参数少量以探测解决方案的局部环境)。这可能发生在不同的初始猜测中,接近或不太接近预期解决方案以获得良好拟合。

有人可以解释这种行为并告诉我是否有可能,例如,改变每个参数的初始测试变化的大小或对每个参数的范围施加约束(界限)?我现在所做的只是在 lmdif1 每次调用模型函数之前强制每个参数位于 max 和 min 语句的给定边界之间。

托马斯

1个回答

您还没有说您使用哪个MINPACK 例程来解决您的最小二乘问题。我假设您使用的是 LMDIF1 (它使用有限差分逼近衍生物,并自动确定有限差分导数的步长。)

这也可能是用户提供的函数在有限差分近似中使用的步长尺度上的不平滑的结果。特别是,如果您的函数评估涉及任何近似值(例如,将积分评估为某个有限精度或仅以单精度而不是双精度完成),因此它们不能精确到全双精度,那么这可能会导致INFO=4 失败。

如果这是你的问题,那么考虑使用 LMDIF 函数并提供一个参数来告诉MINPACK 你的函数评估有多不精确。