几周前,我开始在Matlab中从头开始编码Levenberg-Marquardt算法。我对数据的多项式拟合很感兴趣,但我一直无法达到我想要的精度水平。在我尝试了其他多项式之后,我使用了一个五阶多项式,它似乎是最好的选择。无论我尝试实现怎样的改进,算法总是收敛于同一个函数最小化。到目前为止,我还没有成功地添加以下功能。
我没有非线性最小二乘法的经验,所以我不知道有没有办法把残差再最小化,或者说这种方法是不是有更大的改进空间。我在下面附上最后一次迭代的多项式的行为图像。如果我运行代码进行更多的迭代,曲线最终在迭代中没有变化。正如观察到的那样,从时间=0到时间=12有一个很好的拟合。但我无法修正函数从时间=12到时间=20的行为。任何帮助将是非常感激的。
拟合多项式似乎不是最好的主意。你的数据集看起来像一个指数瞬态,有一个水平渐近线。强制使用多项式来计算,效果会很差。
我宁愿尝试用一个简单的模型,如
A (1 - e^(-at)).
用肉眼看。A ~ 15
. 你应该看看 log(15 - y).