Matlab 初始目标函数评估失败。LSQNONLIN无法继续

Matlab 初始目标函数评估失败。LSQNONLIN无法继续,matlab,curve-fitting,Matlab,Curve Fitting,我正在研究两个方程的曲线拟合,它们有共同的变量和参数。代码如下: function F = myfun(params,c, tt, hh) F =[tt - params(2) - params(3) ./ (1 + params(3).^2 .* params(1).^2 .* (2.* pi.* freqs).^2),... hh +((2.* pi.* freqs) .* params(4) - params(3).^2 * params(1) .* (2.

我正在研究两个方程的曲线拟合,它们有共同的变量和参数。代码如下:

    function F = myfun(params,c, tt, hh)
    F =[tt - params(2) - params(3) ./ (1 + params(3).^2 .* params(1).^2 .* (2.* pi.* freqs).^2),...
        hh +((2.* pi.* freqs) .* params(4) - params(3).^2 * params(1) .* (2.* pi.* freqs) ./ (1 + params(3).^2 .* params(1).^2 .* (2.* pi.* freqs).^2))];
end
myfun = @(params)[tt - params(2) - ((2.* pi.* freqs).^2.*params(5).^2.*params(3))./(params(3).^2 + (2.* pi.* freqs).^2.*params(5).^2)...
    -(params(4).*(1-(2.* pi.* freqs).^2.*params(1).*params(7).*params(6).*params(4))...
    + ((2.* pi.* freqs).*params(7).*params(6).*params(4)).*((2 * pi.* freqs).*params(7).*Rp+ (2 * pi.* freqs).*params(7).*params(6)+(2 * pi.* freqs).*params(1).*params(4)))...
    ./((1-(2.* pi.* freqs).^2.*params(1).*params(7).*params(6).*params(4)).^2 +((2.* pi.* freqs).*params(7).*params(4)+ (2.* pi.* freqs).*params(7).*params(6)+(2.* pi.* freqs).*params(1).*params(4)).^2),...
    hh  +((2.* pi.* freqs).*params(5).*params(3).^2)./(params(3).^2 + (2.* pi.* freqs).^2.*params(5).^2)...
    -(params(4).*((2 * pi.* freqs).*params(7).*Rp+ (2 * pi.* freqs).*params(7).*params(6)+(2 * pi.* freqs).*params(1).*params(4)) - ((2.* pi.* freqs).*params(7).*params(6).*params(4))...
    .*(1-(2.* pi.* freqs).^2.*params(1).*params(7).*params(6).*params(4)))...
    ./((1-(2.* pi.* freqs).^2.*params(1).*params(7).*params(6).*params(4)).^2 ...
    + ((2.* pi.* freqs).*params(7).*params(4)+ (2.* pi.* freqs).*params(7).*params(6)+(2.* pi.* freqs).*params(1).*params(4)).^2)];
曲线拟合为:

lb = [0, 0, 0, 0, 1e10, 0, 0];
up = [inf,inf,inf,inf,inf,inf,inf];
params0 = [ 6e-8, 1.07e-7, 15, 10, 27e10, 0.29, 0.43e-6];

% options = optimoptions(@lsqnonlin,'Algorithm','trust-region-reflective');

params = lsqnonlin(@myfun, params0, lb, up);
错误是:

    Not enough input arguments.

Error in Untitled>myfun (line 98)
F =[real_new - params(2) - params(3) ./ (1 +
params(3).^2 .* params(1).^2 .* (2.* pi.*
freqs).^2),...

Error in lsqnonlin (line 206)
            initVals.F =
            feval(funfcn{3},xCurrent,varargin{:});

Error in Untitled (line 32)
params = lsqnonlin(@myfun, params0, lb, up);

Caused by:
    Failure in initial objective function
    evaluation. LSQNONLIN cannot continue.
我试图检查定义的函数,它应该是正确的。 如何处理错误? 任何帮助或建议都将不胜感激

通过更改
myfun
(具有更多参数和更复杂)解决的
输入参数不足问题,如下所示:

    function F = myfun(params,c, tt, hh)
    F =[tt - params(2) - params(3) ./ (1 + params(3).^2 .* params(1).^2 .* (2.* pi.* freqs).^2),...
        hh +((2.* pi.* freqs) .* params(4) - params(3).^2 * params(1) .* (2.* pi.* freqs) ./ (1 + params(3).^2 .* params(1).^2 .* (2.* pi.* freqs).^2))];
end
myfun = @(params)[tt - params(2) - ((2.* pi.* freqs).^2.*params(5).^2.*params(3))./(params(3).^2 + (2.* pi.* freqs).^2.*params(5).^2)...
    -(params(4).*(1-(2.* pi.* freqs).^2.*params(1).*params(7).*params(6).*params(4))...
    + ((2.* pi.* freqs).*params(7).*params(6).*params(4)).*((2 * pi.* freqs).*params(7).*Rp+ (2 * pi.* freqs).*params(7).*params(6)+(2 * pi.* freqs).*params(1).*params(4)))...
    ./((1-(2.* pi.* freqs).^2.*params(1).*params(7).*params(6).*params(4)).^2 +((2.* pi.* freqs).*params(7).*params(4)+ (2.* pi.* freqs).*params(7).*params(6)+(2.* pi.* freqs).*params(1).*params(4)).^2),...
    hh  +((2.* pi.* freqs).*params(5).*params(3).^2)./(params(3).^2 + (2.* pi.* freqs).^2.*params(5).^2)...
    -(params(4).*((2 * pi.* freqs).*params(7).*Rp+ (2 * pi.* freqs).*params(7).*params(6)+(2 * pi.* freqs).*params(1).*params(4)) - ((2.* pi.* freqs).*params(7).*params(6).*params(4))...
    .*(1-(2.* pi.* freqs).^2.*params(1).*params(7).*params(6).*params(4)))...
    ./((1-(2.* pi.* freqs).^2.*params(1).*params(7).*params(6).*params(4)).^2 ...
    + ((2.* pi.* freqs).*params(7).*params(4)+ (2.* pi.* freqs).*params(7).*params(6)+(2.* pi.* freqs).*params(1).*params(4)).^2)];
但新的错误是:

Local minimum possible.

lsqnonlin stopped because the final change in the sum of squares relative to 
its initial value is less than the default value of the function tolerance.

<stopping criteria details>
但它没有起作用。有什么建议吗? 随附测试数据。
提前感谢

错误消息以“输入参数不足”开头。您能验证一下吗?@JamesPhillips,谢谢您的回复!“输入参数不足”的问题已经解决,帖子也已经更新。但是关于“公差”的新错误刚刚显示出来,你有什么建议吗?我个人不使用matlab,也不能提供建议。错误消息以“输入参数不足”开头。你能验证一下吗?@JamesPhillips,谢谢你的回复!“输入参数不足”的问题已经解决,帖子也已经更新。但是关于“公差”的新错误刚刚显示出来,你有什么建议吗?我个人不使用matlab,也不能提供建议。