Having data of an exponential decay available, I would like to fit a curve through it. How can I do that in Matlab?
Asked
Active
Viewed 4.7k times
3
-
4There is a nice demo on the Statistics Toolbox product page that discusses problems that can occur if you transform a nonlinear model to a linear one. http://www.mathworks.com/products/statistics/demos.html?file=/products/demos/shipping/stats/xform2lineardemo.html The preferred method is to use nonlinear regression; deriving a set a "smart" starting conditions using the "linearize, least squares, delinearize" technique. – richard willey Mar 24 '11 at 17:40
-
3The comment by Richard Willey should really be the (accepted) answer. Linearizing and applying least squares as recommended in some of the answers is not a good idea since the transformation will give too much weight to small values. Better use nlinfit. – Lukas Mar 26 '12 at 12:54
-
Link from @richardwilley has been broken by The MathWorks. Updated version appears to be [here](http://www.mathworks.com/help/stats/examples/curve-fitting-and-distribution-fitting.html). – horchler May 15 '15 at 20:41
5 Answers
5
Try this:
ft=fittype('exp1');
cf=fit(time,data,ft)
This is when time
and data
are your data vectors; time is the independent variable and data is the dependent variable.
This will give you the coefficients of the exponential decay curve.
-
-
@Adiel When i tried this I get an error as `Undefined function 'diff' for input arguments of type 'cfit'. Error in cfit/plot (line 64) if any(diff(xdata)<0) Error in slopeFirst2hours (line 6) plot(time, cf, 'r') ` Can you tell me what I am doing wrong – clarkson Sep 05 '17 at 11:23
-
@clarkson You are right. It should be plotted with a single command- `plot(cf,time,data)` – Adiel Sep 05 '17 at 12:06
0
Matlab has a function called polyfit. It can fit curve to a data which can be represented in the form a*X^n+b*X^(n-1)+.....z. However if you are sure that the data is of some exponential decay you can try taking logarithm of the data first and then using the polyfit function. I thing that will work.
0
Linearise, least squares, delinearise :-)

regularfry
- 3,248
- 2
- 21
- 27
-
You are right, although I thought there might be a package that does that for me automatically it is probably less time consuming to just do it manually rather than searching for it :) – Ingo Mar 23 '11 at 10:10
-
This is pretty short for an answer, but I upvoted it from -1 because it is helpful for users without the Curve Fitting toolbox. – FvD Jan 06 '15 at 08:11