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,也不能提供建议。