2014-10-02 99 views
0

我想在MatLab中定義自定義曲線擬合。是我試圖以適應曲線如下:MatLab中的自定義曲線擬合

A*exp(B*x)+C 

需要此配合的原因是因爲我的數據呈指數衰減,然而這一數據並不接近零(在這組數據,曲線應該衰減並接近零以上的數字)。使用fittype('exp2')也不是一種選擇,因爲它適合數據(當它應該保持在0以上的某個位置時,向上彎曲)。

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

然而,當我嘗試將數據擬合到這個曲線I得到以下錯誤消息::

「使用錯誤CFIT /的subsref> iDotReference(線66我使用以下代碼定義擬合類型) 名稱既不是係數也不是問題參數

cfit/subsref(第19行)中的錯誤 out = iDotReference(obj,currsubs);「

我無法弄清楚MatLab在這種情況下抱怨什麼。有時候,由於我不知道的原因,代碼會運行,但合適的只是很糟糕。我在這裏做錯了什麼?這是指數衰減到0以上的最佳方式嗎?

下面的代碼是我嘗試運行我的契合:

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

回答

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'); 

但我不知道這是否解決您的問題,因爲我不能重現你的錯誤。

+0

這確實有些幫助,但仍然適合是可怕的。奇怪的是,使用內置的exp1 fit,這個擬合是驚人的,所以看起來很奇怪,我通過嘗試合併一個常數而變得非常糟糕。當嘗試添加C術語時,是否有一個原因使得這種擬合變得如此之快? – odnanreh12 2014-10-07 18:35:52

+0

此外,我經常遇到這個錯誤: Inf由模型函數計算,擬合無法繼續。 我也會發佈一個我試圖適合的數據樣本。 x:0.6325 0.7438 0.5353 0.3303 0.1355 0.0582 0.0317 0.1173 0.0720 0.0718 0.0350 0.0803 0.0293 y:11.3333 27.1667 37.0000 46.7000 56.5000 66.1667 76.0000 90.8333 100.6667 110.3333 120.6667 130.6667 140.6667 – odnanreh12 2014-10-07 18:53:13