我试图获得一个非线性最小二乘法拟合以下功能:功能可与lsqcurvefit但不nlinfit
Nloc = 250;
d = 1/Nloc;
m = 0.5; %Initial guess
ncmfun = @(m, p) arrayfun(@(p) betainc(d, Nloc*m .* p, Nloc*m .* (1 - p), 'upper'), p);
其中M是参数为合适,Nloc,d为常数,p和freq是正实数和相同长度的向量(我三重检查)。当我使用lsqcurvefit一切正常:
另外,如果我使用任何米至评估功能,一切工作正常,以及。然而,当我使用nlinfit:
[mfit,R,Jac,CovB,MSE,ErrorModelInfo] = nlinfit(p, freq, ncmfun, m)
我得到以下错误(S):
Error using betainc
Z must be real and non-negative.
Error in @(p)betainc(d,Nloc*m.*p,Nloc*m.*(1-p),'upper')
Error in
@(m,p)arrayfun(@(p)betainc(d,Nloc*m.*p,Nloc*m.*(1-p),'upper'),p)
Error in nlinfit>@(b,x)w.*model(b,x) (line 206)
modelw = @(b,x) w.*model(b,x);
Error in nlinfit>LMfit (line 486)
yfit = model(beta,X);
Error in nlinfit (line 207)
[beta,J,~,cause,fullr] = LMfit(X,yw,
modelw,beta,options,verbose,maxiter);
Error in Sloan_NCM_Parameterize_Nm (line 37)
[mfit,R,Jac,CovB,MSE,ErrorModelInfo] = nlinfit(p, freq,
ncmfun, m);
什么特别令人沮丧的是在同一个脚本是工作几个星期前。然后我尝试再次使用它,它不再有效。我试图通过,看看我是否意外地改变了一些事情,但没有记住,但我找不到任何错误。此外,我很困惑,为什么lsqcurvefit的作品,但不是nlinfit。我想使用nlinfit,因为它提供了有关错误的更多统计信息。
在此先感谢您提供的任何帮助!