Hello! I have a set of data (x,y) which describes a function y=f(x). I would like to fit this function with a biexponential function made like this : f(x) = a*exp(-x/b)+c*exp(-x/d)+e and retrieve the values of a,b,c,d,e. Can you help me to do this? Thank you!

 採用された回答

Mischa Kim
Mischa Kim 2014 年 3 月 21 日
編集済み: Mischa Kim 2014 年 3 月 21 日

0 投票

Aurc89, does this help?
a = 1; b = 1; c = 1; d = 1; e = 1;
x = (0:0.1:2)';
y = a*exp(-x/b)+c*exp(-x/d)+e + 0.1*rand(length(x),1);
f = fit(x,y,'exp2');
plot(f,x,y)
The fitting coefficients are accessed, e.g., via
f.a

8 件のコメント

aurc89
aurc89 2014 年 3 月 21 日
Sorry, maybe I couldn't explain well... I already have both x and y data which describes a generic function y(x), different from f(x). Then I want to fit my data y=y(x) with the function f(x) = a*exp(-x/b)+c*exp(-x/d)+e and retrieve a,b,c,d,e coefficients.
Mischa Kim
Mischa Kim 2014 年 3 月 21 日
I got that, I just made up x- and y-values to show the feature in action. So essentially you only need the fit command. Coefficients are retrieved as outlined above, f.a, f.b, etc.
aurc89
aurc89 2014 年 3 月 21 日
Ok, but there is something I don't understand: I write this code, where x and y are my data I want to fit:
---------------------------------------------------
x=[1 2 3 4 5 6 7 8 9];
y=[0.4 0.6 0.8 0.9 0.92 0.94 0.96 0.98 0.989];
plot(x,y)
a=1; b=1; c=1; d=1; f=1;
x=x';
y = a*exp(-x/b)+c*exp(-x/d)+f+0.1*rand(length(x),1);
f = fit(x,y,'exp2');
figure
plot(f,x,y)
-----------------------------------------------------
This is the (x,y) plot (first plot)
while this is the fit (second plot)
which is not a fit of the first curve, i.e. of the raw data... what's wrong?
Mischa Kim
Mischa Kim 2014 年 3 月 21 日
As mentioned above, if you have x- and y-values you only need the fit command:
x = [1 2 3 4 5 6 7 8 9];
y = [0.4 0.6 0.8 0.9 0.92 0.94 0.96 0.98 0.989];
f = fit(x',y','exp2');
plot(f,x,y)
John D'Errico
John D'Errico 2014 年 3 月 21 日
Note that in your examples, adding error created from rand is a terribly poor thing to do, as rand produced uniform deviates with a mean of 0.5. To generate random noise, use randn.
aurc89
aurc89 2014 年 3 月 21 日
Ah ok, so I don't need to specify the expression of the biexponential function... Thank you very much!
Mischa Kim
Mischa Kim 2014 年 3 月 21 日
編集済み: Mischa Kim 2014 年 3 月 21 日
Aurc89: You're welcome.
John: I was not trying to generate random noise, thanks for the polite pointer, though.
aurc89
aurc89 2014 年 3 月 21 日
Sorry, the last question: this kind of command gives me the fit with the function f(x) = a*exp(b*x) + c*exp(d*x). Instead, I woud like to have a fit with this kind of function: f(x) = a*exp(b*x) + c*exp(d*x) + g. I need the constant term g also, because the time constants of the biexponential changes with g (because I am differently close to zero axis by changing 'g', so b and d are different). Is there an authomatic way to do this? Thank you very much in advance

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeGet Started with Curve Fitting Toolbox についてさらに検索

質問済み:

2014 年 3 月 21 日

コメント済み:

2014 年 3 月 21 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by