/* Template for a User fit function. Calculates a polynomial of degree 1 (i.e. a straight line). The user function should return one of the following return codes, defined in the include file "fitusr.h": number of function parameters if FITFCT_NPAR FITUSR_OK if all OK, deriv.s are provided FITUSR_NODERIV if all OK, deriv.s are not provided FITUSR_SYS run time system error (e.g. calloc() failed) FITUSR_UNPHYSICAL unphysical region entered FITUSR_OFLOFCT function not calculable FITUSR_OFLODERIV derivatives not calculable /mk/ $Log: usrfct.txt,v $ Revision 1.2 2005/12/16 11:09:44 kraemer MacOSX (darwin) support added Revision 1.1 2005/11/11 10:10:56 kraemer *** empty log message *** $Id: usrfct.txt,v 1.2 2005/12/16 11:09:44 kraemer Exp $ */ #include "fitusr.h" #define DDPAR(iPar,iX) ddPar[ (iPar) * nX + (iX) ] int usrfct( void *pFitFct, double *dPar, /* function parameters */ double *ddPar, /* switch=FITFCT_VAL: ddPar[iPar*2+0] = lower limit ddPar[iPar*2+1] = upper limit switch=FITFCT_DERIV: ddPar[nPar*nX+iX] switch=else ddPar undefined */ double *dX, double *dY, int nPar, int nX, int iSwitch ) { int iRC = FITUSR_OK; /* return code */ int ii; switch( iSwitch ) { case FITFCT_NPAR: /* return # of parameters */ iRC = 2; break; case FITFCT_VAL: /* return start values */ dPar[0] = 0E0; dPar[1] = 0E0; ddPar[0*2+0] = -1E6; /* lower limit first parameter */ ddPar[0*2+1] = 1E6; /* upper limit first parameter */ ddPar[1*2+0] = -1E6; /* lower limit second parameter */ ddPar[1*2+1] = 1E6; /* upper limit second parameter */ break; case FITFCT_FCT: /* return function values only */ case FITFCT_DISP: /* return function values only, for display */ case FITFCT_RESULT: /* function is called for computation of results */ for ( ii=0; ii