levenberg-marquardt曲线拟合MATLAB中的几个参数



我正试图用Matlab中的levenberg-Marquardt最小二乘法将一个具有四个未知参数的巨大函数拟合到我的数据中。我使用了这个命令:

[x, resnorm]=lsqcurvefit(@myfun1,[-100:100], xdata, ydata, ...
                         [-inf, -inf, -1.5, -inf], [inf, inf, 1.5, inf], options)

这意味着我有兴趣约束第三个参数。但我面临的问题是:

??? Error using ==> lsqncommon at 102
Levenberg-Marquardt and Gauss-Newton algorithms do not handle bound constraints and trust-region-reflective algorithm
requires at least as many equations as variables; aborting.
Error in ==> lsqcurvefit at 258
[xCurrent,Resnorm,FVAL,EXITFLAG,OUTPUT,LAMBDA,JACOB] = ...

我认为这个错误表明我的数据很小,因为它们是36点,或者可能有太多未知参数,但我认为四个未知参数用于拟合是可以的!

那么,你觉得呢?这是否意味着MATLAB无法将我的函数与这36点数据相匹配?

如果有任何意见,我将不胜感激。

根据http://www.mathworks.co.uk/help/toolbox/optim/ug/lsqcurvefit.html第二个参数是要优化的参数的起始值。您正在中通过

 [-100:100]

它(除非matlab自上次使用以来发生了很大变化)是一个201个参数的向量,所以你似乎在要求matlab优化201个参数。正如@Dan在下面的评论中指出的那样,你只有36个数据点,所以你的要求是不合理的。您只想在4个参数上进行优化,因此您应该只输入4个起始值。您正在为限制选项传递长度为4的向量,因此这里存在不一致性。

我建议只为您的参数输入一个4个起始值的向量作为第二个参数,看看它是否会产生您期望的结果。

最新更新