help-gsl
[Top][All Lists]
Advanced

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

Re: [Help-gsl] least-squares fitting or minimization with constrained pa


From: Max Belushkin
Subject: Re: [Help-gsl] least-squares fitting or minimization with constrained parameters
Date: Mon, 12 Dec 2005 14:51:14 +0100
User-agent: Thunderbird 1.5 (X11/20051025)

The way I personally do it is as follows. Two examples given.
Let's imagine we have two values (functions of the parameter vector) we want to constrain. F1(p) and F2(p). F1(p) must lie close to a value f1, and F2(p) must lie between f2_min and f2_max.

We have a function chi_squared(p) we're minimizing. We change that to minimize_this (p) = chi_squared(p) + constrain (p), where

const double f1 = x.y;
const double f2_min = a.b;
const double f2_max = c.d;

double constrain (const gsl_vector* v) {
  double val_f1 = F1(v);
  double val_f2 = F2(v);
  double strength_1=1.0,strength_2=100.0;
  double ret=0;
  ret+=pow(strength_1*(val_f1-f1),2)*exp(pow(strength_1*(val_f1-f1),2);
  if (val_f2<f2_min)

ret+=pow(strength_2*(val_f2-f2_min),2)*exp(pow(strength_2*(val_f2-f2_min),2);
  if (val_f2>f2_max)

ret+=pow(strength_2*(val_f2-f2_max),2)*exp(pow(strength_2*(val_f2-f2_max),2);

  return ret;
};

  Works fine for me so far...

Frank Küster wrote:
Hi,

I am wondering whether (and how) it is possible to use the least-squares
fitting, or alternatively minimization functions of gsl with constrained
parameters.  What I mean with this is that I want to force the function
into the correct local minimum by supplying information which parameter
values are physically meaningful for these particular data, or which of
two degenerate minima I would like (to be able to compare different
fits).  For example, if the function is the sum of two exponentials, I
would like to perform a least-squares fit to some data with the
constrain that the first of them has the shorter relaxation time.

Is this possible, and how would that be implemented?

TIA, Frank





reply via email to

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