2014-03-12 155 views
1

我已經描述了一個模型,我想在曲線中擬合,我在這種情況下獲得一個錯誤,請檢查它。Matlab:曲線擬合中的誤差

function c = model(t, a1, a2, a3, b1, b2, b3, td, tmax) 

c = zeros(size(t)); 

ind = (t > td) & (t < tmax); 
c(ind) = (t(ind) - td) ./ (tmax - td) * (a1 + a2 + a3); 

ind = (t >= tmax); 
c(ind) = a1 * exp(-b1 * (t(ind) - tmax))+ a2 * exp(-b2 * (t(ind) - tmax)) + a3 * exp(-b3 * (t(ind) - tmax)); 




ft = fittype('model(t, a1, a2, a3, b1, b2, b3, td, tmax)', 'independent','t'); 
fo = fit(t, c, ft,'StartPoint', [20000, 20000, 20000, 0.01, 0.01, 0.01, 10, 30],'Lower', [0, 0, 0, 0, 0, 0, 0, 0]); 
plot(t, c, 'x') 
hold all 
ts = 0:0.1:50; 
plot(ts, model(ts, fo.a1, fo.a2, fo.a3, fo.b1, fo.b2, fo.b3, fo.td, fo.tmax)) 
axis([0 50 -2000 80000]) 
xlabel time 
ylabel concentration  

end 

下面就是我獲得

Error in fittype expression ==> model(t, a1, a2, a3, b1, b2, b3, td, tmax) 
??? Expression model(t, a1, a2, a3, b1, b2, b3, td, tmax) is not a valid MATLAB 
expression, 
has non-scalar coefficients, or cannot be evaluated: 

能否請您審閱,如果我已經使用fittype表達正確

回答

1

創建包含模型中的函數的錯誤:

function c = modelfnc(t, a1, a2, a3, b1, b2, b3, td, tmax) 
...  
end 

然後將其餘的代碼放在主函數(另一個文件)中。在開始擬合過程之前,您還需要定義變量並獲取一些數據。

define c,t,... 
ft = fittype('modelfnc(t, a1, a2, a3, b1, b2, b3, td, tmax)', 'independent','t'); 
fo = fit(t, c, ft,'StartPoint', [20000, 20000, 20000, 0.01, 0.01, 0.01, 10, 30],'Lower', [0, 0, 0, 0, 0, 0, 0, 0]); 
plot(t, c, 'x')