help-gsl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Help-gsl] Fitting biexponential decay


From: Totte Karlsson
Subject: Re: [Help-gsl] Fitting biexponential decay
Date: Tue, 12 Feb 2008 17:30:51 -0800
User-agent: Thunderbird 2.0.0.9 (Windows/20071031)

Hi,
Thanks for your suggestions. I have not had time to really get started on this until yesterday. I'm not sure how to create a function of goodness of fit for my problem. If that is simple I could use the multidimensional minimizer as you suggested. However, maybe using least squares (the nonlinear least squares fitting API) is what I want to use. At least thats what I started to work with since there is an example in the manual, which is a fit of a single exponential.

        y(t) = A1exp{-lambda_1*t} + b


I wonder if it is possible to use the example and extend it to a fit of a bi-exponential?

The part that i think would have to be modified is the creation of the Jacobian matrix. For the single exponential case
it is defined (from the manual)

     /* Jacobian matrix J(i,j) = dfi / dxj, */
     /* where fi = (Yi - yi)/sigma[i],      */
     /*       Yi = A * exp(-lambda * i) + b  */
     /* and the xj are the parameters (A,lambda,b) */
     double t = i;
     double s = sigma[i];
     double e = exp(-lambda * t);
     gsl_matrix_set (J, i, 0, e/s);
     gsl_matrix_set (J, i, 1, -t * A * e/s);
     gsl_matrix_set (J, i, 2, 1/s);

I'm not that mathematical and just started to use gsl, so it looks a little tough to proceed. Wonder if anyone can help to extend the above lines to the bi-exponential case?

Also, what about independent gaussian errors, sigma_i? In my data each point can be assumed to have the same error (same sigmas). How can I calculate sigma for an experimental data set? Is it the standard deviation?

regards
-totte
BTW I'm using the single exponential fitter and it works great.

Martin Jansche wrote:
On Jan 22, 2008 9:09 AM, Totte Karlsson <address@hidden> wrote:

Now I need to find a fitter for a bi exponential decay function, i.e.

y(t) = A1exp{-lambda_1*t} + A2exp{-lambda_2*t}.

In the equation, the A1 and A2 will typically be equal ,(A1 == A2) and
initially set to 1, so the fit will be for lambda_1 and lambda_2.

You can use the multidimensional minimizer API
(http://www.gnu.org/software/gsl/manual/html_node/Multidimensional-Minimization.html)
to optimize the goodness of fit as a function of your two parameters.
You'll have to implement a function which evaluates goodness of fit
for your set of observation and choice of parameters, as well as the
two partial derivatives in lambda_i.  Your decay function has simple
partial derivatives; if your fit criterion does too, you're in very
good shape.  If your fit criterion is least squares, you can also use
the nonlinear least-squares fitting API
(http://www.gnu.org/software/gsl/manual/html_node/Nonlinear-Least_002dSquares-Fitting.html).

-- mj


reply via email to

[Prev in Thread] Current Thread [Next in Thread]