Octave 八度非线性拟合

Octave 八度非线性拟合,octave,data-fitting,Octave,Data Fitting,目前我正在使用GNU Octave'optim'包中的nonlin_curvefit函数来拟合数据。但这一次,我确实需要返回参数的不确定性来确定拟合的质量。阅读完文档后,我使用函数curvefit\u stat进行了绑定。 然而,每当我使用这个函数出现错误时,我就无法理解错误消息。我使用的是Ubuntu18.04默认存储库中的Octave 4.2.2 下面是独立的最小示例和错误消息。启动参数init_cvg通常产生良好的结果,而使用init_dvg通常会导致拟合不良: 1; x = linsp

目前我正在使用GNU Octave'optim'包中的
nonlin_curvefit
函数来拟合数据。但这一次,我确实需要返回参数的不确定性来确定拟合的质量。阅读完文档后,我使用函数
curvefit\u stat
进行了绑定。 然而,每当我使用这个函数出现错误时,我就无法理解错误消息。我使用的是Ubuntu18.04默认存储库中的Octave 4.2.2

下面是独立的最小示例和错误消息。启动参数
init_cvg
通常产生良好的结果,而使用
init_dvg
通常会导致拟合不良:

1;

x = linspace(-2*pi, 2*pi, 600);
ydata = 3.4*sin(1.6*x) + rand(size(x))*1.3;

f = @(p, x) p(1)*sin(p(2).*x);
function y  = testfun(p ,x)
  y = p(1).*sin(p(2).*x);
endfunction

init_cvg = [1; 1.1];
init_dvg = [1; 1.0];

[pc, mod_valc, cvgc, outpc] = nonlin_curvefit(f, init_cvg, x, ydata);
[pd, mod_vald, cvgd, outpd] = nonlin_curvefit(f, init_dvg, x, ydata);


hold off
plot(x, yd, "b.");
hold on;
plot(x, mod_valc, "r-");
plot(x, mod_vald, "color", [0.9 0.4 0.3]);

settings = optimset("ret_covp", true);
covpc = curvefit_stat(f, pc, x, ydata, settings);
covpd = curvefit_stat(f, pd, x, ydata, settings);

puts("sqrt(diag(covpc))")
sqrt(diag(covpc))

puts("sqrt(diag(covpd))")
sqrt(diag(covpd))
第一条错误消息出现在我将
f
用作模型函数时,第二条错误消息出现在我改用
testfun
时:

有人能证实这个错误吗

如果有任何帮助,我将不胜感激。

我发现了这个问题。 我需要添加“abjf_type”、“wls”作为optimset的参数

>> curvefit_stat_TEST
error: label of objective function must be specified
error: called from
    __residmin_stat__ at line 566 column 7
    curvefit_stat at line 56 column 7
    curvefit_stat_TEST at line 25 column 7
>> curvefit_stat_TEST
error: 'p' undefined near line 8 column 7
error: called from
    testfun at line 8 column 5
    curvefit_stat_TEST at line 25 column 7
>>