热线电话:13121318867

登录
2019-02-15 阅读量: 746
如何将我的数据拟合到指数模型中

我是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);

0.0000
0
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子