如何将我的数据拟合到指数模型中,但在matlab中有一个额外的常量

问题描述 投票:1回答:2

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

matlab curve-fitting data-fitting
2个回答
2
投票

适合线性功能。试试nlfit(https://www.mathworks.com/help/stats/nlinfit.html)。 “使用鲁棒选项的非线性回归”示例基本上就是您所拥有的。它们在指数中的常数为负数,但您可以更改modelfun以使其对您的情况有利。


2
投票

根据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);

如果工具箱不可用,如果没有,您可以回退到标准MATLAB最小化qazxsw poi:

fminsearch

笔记:

  1. 您可以根据实际数据调整此代码(即修改% 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); xe分配)。
  2. 模型系数ye的初始猜测非常“原始”。如果你只考虑指数的第一项:ebx = 1 + bx +(bx)2/2 ......,你可能会得到一个更好的初始近似值,并且首先拟合该模型。简化模型拟合的结果将作为全模型拟合的初始猜测。这是否有必要是试验数据的问题。
  3. coef0通常能够在R3中最小化,但如果数据非常嘈杂,或者模型不适合数据(例如,使用指数模型拟合正弦数据),则搜索最小值可能会失败,或者模型本身允许多个本地极小。
© www.soinside.com 2019 - 2024. All rights reserved.