3

我正在尝试使用 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 点数据?

我会很感激任何评论。

4

1 回答 1

4

根据这个http://www.mathworks.co.uk/help/toolbox/optim/ug/lsqcurvefit.html,第二个参数是您希望优化的参数的起始值。你传入

 [-100:100]

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

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

于 2012-08-22T09:33:22.190 回答