0

几周前,我开始在 Matlab 中从头开始编写 Levenberg-Marquardt 算法。我对数据的多项式拟合很感兴趣,但我无法达到我想要的准确度。在我尝试了其他多项式之后,我使用了五阶多项式,这似乎是最好的选择。无论我尝试实施何种改进,该算法总是收敛到相同的函数最小化。到目前为止,我没有成功添加以下功能:

  • 测地线加速度项作为二阶校正
  • 更新阻尼参数的延迟满足
  • 增益因子更接近高斯-牛顿方向或最陡下降方向,具体取决于迭代。
  • 有限差分法的中心差分和前向差分

我没有非线性最小二乘的经验,所以我不知道是否有办法进一步最小化残差,或者这种方法是否没有更多的改进空间。我在下面附上最后一次迭代的多项式行为的图像。如果我运行代码进行更多迭代,曲线最终不会在迭代之间发生变化。据观察,从时间 = 0 到时间 = 12 非常适合。但我无法修复从时间 = 12 到时间 = 20 的函数行为。任何帮助将不胜感激。

数据点和各种拟合曲线

4

1 回答 1

0

拟合多项式似乎不是最好的主意。您的数据集看起来像一个指数瞬态,具有水平渐近线。强制一个多项式的效果会很差。

我宁愿尝试一个简单的模型,例如

A (1 - e^(-at)).

用肉眼,A ~ 15. 你应该看看log(15 - y).

于 2020-06-09T15:21:09.697 回答