我有一堆数据,我必须使用以下公式:[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如何解释它们以及它们实际意味着什么。当我尝试一些数字时,它总是给我错误。
答案 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)
事实上,它并不总是在第一次尝试时起作用,但你应该尝试几次,直到你得到一些好的东西。我的方法是使用while
循环和gof
函数的fit
(拟合度)输出来搜索模型的适当参数。对于上面的结果:
gof =
sse: 27.757
rsquare: 0.91357
dfe: 97
adjrsquare: 0.91178
rmse: 0.53493
这个过程取决于你拥有多少数据,但这个事实总是如此。