Matlab自定义拟合失败

时间:2016-08-08 16:32:58

标签: matlab data-fitting

我有一堆数据,我必须使用以下公式:[x*sin(1/x)]^2。我真的不知道要为这样一个函数选择什么系数,我试过了:

model = fittype('a*((xx/b)*sin(b/xx))^2+c','independent',{'xx'},'dependent',{'FF_norm(:,i)'}, 'coefficients', {'a','b','c'});
opt=fitoptions(model);
myfit=fit(xx,FF_norm(:,i),model, opt);
myfit
plot(myfit,xx,FF_norm(:,i))

我总是看起来像一条直线。我知道也可能更好地输入起点,但我不知道如何选择这些因为我不知道Matlab如何解释它们以及它们实际意味着什么。当我尝试一些数字时,它总是给我错误。

1 个答案:

答案 0 :(得分:0)

我不确定您遇到的问题是什么,但我尝试使用此代码重现您的问题:

xx = (0.1:0.1:10).';
error = rand(size(xx)).*2;
data = 5.*((xx./6).*sin(6./xx)).^2+7+error;
model = fittype('a.*((xx./b)*sin(b./xx)).^2+c','independent',{'xx'},'dependent'...
    ,{'data'}, 'coefficients', {'a','b','c'});
opt = fitoptions(model);
opt.StartPoint = [1 1 1];
[myfit,gof] = fit(xx,data,model,opt)
plot(myfit,xx,data);

它给了我这个输出:

myfit = 
     General model:
     myfit(xx) = a.*((xx./b)*sin(b./xx)).^2+c
     Coefficients (with 95% confidence bounds):
       a =        5.18  (4.846, 5.514)
       b =       6.318  (5.84, 6.796)
       c =       7.995  (7.777, 8.213)

这是非常正确的,情节也很好看: fitting model

事实上,它并不总是在第一次尝试时起作用,但你应该尝试几次,直到你得到一些好的东西。我的方法是使用while循环和gof函数的fit(拟合度)输出来搜索模型的适当参数。对于上面的结果:

gof = 
           sse: 27.757
       rsquare: 0.91357
           dfe: 97
    adjrsquare: 0.91178
          rmse: 0.53493

这个过程取决于你拥有多少数据,但这个事实总是如此。