# How can I find the equation of an exponential equation given a set of points?

I know the equation that fits the given points is exponential. What is the best way to find the equation?

-

If you have an equation of the form $y=ae^{bx}$, you can think of it similarly as the points $(x,\log{(a)}+bx)$ and run a linear regression on this to find the choices of $(a,b)$.

Edit: You're running a linear regression on $(x, \log{(y)})$, which there are many methods. Once you get your $\log{(y)}$ values, just exponentiate them.

-
This is a simple method, but not recommended for serious use. For an example of what can go wrong, see mathworks.com/products/statistics/demos.html?file=/products/…. – Hans Lundmark Jun 29 '11 at 14:47

Perhaps you'll want to consider an exponential regression. Here is an online tool (very easy to use).

-
Quoting from that link: "This page allows you to work out exponential regressions, also known as exponential least squares fittings. For the relation between two variables, it finds the exponential function that best fits a given set of data points". – Shai Covo Jun 28 '11 at 19:38
Thank you for that tool! – Lennard Fonteijn Feb 12 at 19:53

While taking the logarithm of the data and then doing a linear regression as suggested in aengle's answer above will give you a quick and dirty answer much of the time, the logarithmic transformation of the data changes the underlying statistical distribution of noise such that it may violate an important assumption underlying least squares methods, namely that the noise is approximately Gaussian-distributed. Also, if the data contains a zero, the logarithm is undefined and therefore you can't do the curve fit.

In practice, a nonlinear least squares fit is usually done instead. The method of Levenberg-Marquardt and "trust region" methods are fairly popular for this kind of fit, although there are many many ways to do it. Here is some example Mathematica code to fit the initial signal S0 and the rate constant R to the model S(t) = S0*e^(R*t) given a set of five data points and using a "trust region" method. Note that if you have good initial estimates of S0 and R, you should use them.

In[42]:= FindFit[{{0.001, 1268.5565625472284}, {0.002933333333333333, 840.0515614029605}, {0.004866666666666667, 581.1715538716999}, {0.0068, 374.3637645280635}, {0.008733333333333333, 360.71242247849415}}, S0*Exp[R*t], {{S0, 1000}, {R, 1.0}}, {t}, MaxIterations -> 50, Method -> {"Newton", StepControl -> "TrustRegion"}, AccuracyGoal -> 3, PrecisionGoal -> 3, WorkingPrecision -> MachinePrecision]

Out[42]= {S0 -> 1512.55, R -> -191.072}

-