我是matlab的新手,我不知道如何使我的数据点适合我选择的模型。我的数据点不是完全指数的,我想将我的数据拟合到这样的模型中:y = a * e ^(bx)+ c,因为对于大的x值,数据不会对0反而是去一个常数,c不是0。
我的代码用于查找我的数据并将其设置为数字,然后将其拟合到指数模型,这是:
time = datafile(61608:63907,1);
time = table2array(time);
time = datenum(time).*(24*60*60);
time = time - time(1);
conc = datafile(61608:63907,2);
conc = table2array(conc);
f = fit(time,conc,'exp1');
plot(f,time,conc)
我不知道如何将我的数据拟合到我自己的模型中:y = a * e ^(bx)+ c
解决办法:根据Suhas C使用MATLAB统计工具箱中的nlinfit的想法,这里有一个代码片段,可以作为指南:
% experimental data
xe = []; % replace [] with column vector abscissa
ye = []; % replace [] with column vector ordinate
% model function ::= y=a*e^(bx)+c, coef ::= [a,b,c]
y = @(coef,x) coef(1) .* exp(coef(2).*x) + coef(3);
% initial guess for coefficients (degenerate exponential)
coef0 = [mean(ye) - min(ye), 0, min(ye)];
% do fitting
coef = nlinfit(xe, ye, y, coef0);
或者,可能希望使用Optimization Toolbox中的lsqnonlin。目标函数(其范数需要最小化)是与实验数据相比的模型残差:
% experimental data
xe = []; % replace [] with column vector abscissa
ye = []; % replace [] with column vector ordinate
% residual function ::= r=a*e^(b*xe)+c-ye, coef ::= [a,b,c]
r = @(coef) coef(1) .* exp(coef(2).*xe) + coef(3) - ye;
% initial guess for coefficients (degenerate exponential)
coef0 = [mean(ye) - min(ye), 0, min(ye)];
% do fitting
coef = lsqnonlin(r, coef0);
如果没有工具箱可用,则可以回退到标准MATLB最小化器fminsearch:
% experimental data
xe = []; % replace [] with column vector abscissa
ye = []; % replace [] with column vector ordinate
% residual function ::= rn=||a*e^(b*xe)+c-ye||, coef ::= [a,b,c]
rn = @(coef) norm(coef(1) .* exp(coef(2).*xe) + coef(3) - ye);
% initial guess for coefficients (degenerate exponential)
coef0 = [mean(ye) - min(ye), 0, min(ye)];
% do fitting
coef = fminsearch(rn, coef0);








暂无数据