我有数据我想要适应二阶指数衰减,看起来它工作正常。 示例文件: https://dl.dropboxusercontent.com/u/6170801/example.mat
ty
是我的数据[x y]
。
我的健身类型
Mftype = fittype('A1*exp(-x/t1)+A2*exp(-x/t2)+y0','problem',{'t1','t2'})
;
我希望两个时间常数都能解决。我的选择:
Mfopt = fitoptions('method','nonlinearleastsquares','normalize','on','startpoint',[0 0 0 0],'lower',[0 0 0 -Inf],'upper',[Inf Inf Inf Inf]);
然后我适合:
[MfitObj MfitGdn MfitOut]=fit(ty(:,1),ty(:,2),Mftype,Mfopt,'problem',{tau tau});
问题在于,当使用fitObject中计算出的拟合系数手动计算x的特定值时,得到的y不是拟合曲线的一部分。
进入时:
figure
plot(ty(:,1),ty(:,2))
ylim([0 10]);xlim([0 1800])
hold on;plot(MfitObj)
y=MfitObj.A1*exp(-400/tau)+MfitObj.A2*exp(-400/tau)+MfitObj.y0;
hold on;plot(400,y,'o');hold off;
你看到x = 400处的手动计算值与使用相同系数的拟合函数不对应。
我的问题是:为什么? 提前致谢
编辑:我使用Matlab R2010b,曲线拟合的默认算法是Trust-Region,而不是Levenberg-Marquardt。
答案 0 :(得分:0)
我找到了这个问题的根源:如果拟合被归一化,所有系数都会得到某种偏移量,这些偏移量被加到/减去它们。但系数显示没有它,这就是为什么只有这些系数的方程是不同的。