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 Exchange で Interpolation についてさらに検索

質問済み:

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