我正在尝试获得适合以下函数的非线性最小二乘:
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 时,一切正常:
[mfit,resnorm,] = lsqcurvefit(ncmfun, m, p, freq, 0, 1)
此外,如果我使用任何 m 来评估函数,那么一切正常。但是,当我使用 nlinfit 时:
[mfit,R,Jac,CovB,MSE,ErrorModelInfo] = nlinfit(p, freq, ncmfun, m)
我收到以下错误:
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 因为它为我提供了有关错误的更多统计信息。
提前感谢您提供的任何帮助!