2012-08-22 44 views
3

我试图用matlab中的levenberg-Marquardt最小二乘法在我的数据中拟合一个具有四个未知参数的巨大函数。我用这个命令:levenberg marquardt曲线拟合MATLAB有几个参数

[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

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

[-100:100] 

它(除非因为我上次使用MATLAB有很大变化)是201个参数向量,所以它似乎你要求MATLAB优化过201点的参数。正如@丹在下面的评论中指出的,你只有36个数据点,所以你所要求的是不合理的。你只想优化4个参数,所以你应该只输入4个开始值。您正在向限制选项传递4个向量,因此您在此处有不一致。

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

+0

我认为这个错误信息是因为matlab被要求用一个只有36个数据点的201参数定义的曲线。换句话说,201只有36个LM不能做的方程式。将[-100:100]更改为[0 0 0 0],或者如果可以计算出一个更明智的起点,几乎肯定会解决此错误。 – Dan

+0

@Dan是的,我同意。我已经更新了答案,将OP指向您的评论。 – mathematician1975