MatLab中的自定义曲线拟合

时间:2014-10-02 21:14:01

标签: matlab curve-fitting

我正在尝试在MatLab中定义自定义曲线拟合。我想要适应的曲线如下:

A*exp(B*x)+C

需要这种拟合的原因是因为我的数据呈指数衰减,但是这个数据不接近零(在这个数据集中,曲线应该衰减并接近零以上的某个数字)。使用fittype(' exp2')也不是一个选项,因为它会过度拟合数据(当曲线应该在0以上保持平坦时向上弯曲)。我使用以下代码定义拟合类型:

ft = fittype('(A*exp(B*x)) + C','coefficients', {'A', 'B', 'C'});

但是,当我尝试将数据拟合到此曲线时,我收到以下错误消息:

"使用cfit / subsref> iDotReference时出错(第66行) 名称既不是系数也不是问题参数。

cfit / subsref中的错误(第19行) out = iDotReference(obj,currsubs);"

在这种情况下,我无法弄清MatLab究竟在抱怨什么。有时候,由于我不知道的原因,代码会运行,但是适合性很糟糕。我在这里做错了吗?这是指数衰减到0以上的指数的最佳方法吗?

以下代码是我尝试运行的方式:

[cf, gof] = fit(time', testArray', fittype);

1 个答案:

答案 0 :(得分:0)

提供初步猜测有助于适应性很强。我发现初始值的正确符号尤其重要。

无论如何,如果我运行此代码,我不会遇到问题:

ft = fittype('(A*exp(B*x)) + C', 'coefficients', {'A', 'B', 'C'});

time = 0:0.1:20;
testArray = (4*exp(-.2*time) + 10) + normrnd(0,1,size(time));
[cf, gof] = fit(time', testArray', ft, 'StartPoint', [17 -.6 100]);

% check:
figure(1)
clf
hold on
plot(time,testArray,'k.')
plot(time, cf.A*exp(cf.B*time) + cf.C, 'r');

但我不知道这是否解决了你的问题,因为我无法重现你的错误。