The fitting function fcn is a simple chisquare function The data consists of 5 data points (arrays x,y,z) + the errors in errorsz More details on the various functions or parameters for these functions can be obtained in an interactive ROOT session with:
**********
** 1 **SET ERR 1
**********
PARAMETER DEFINITIONS:
NO. NAME VALUE STEP SIZE LIMITS
1 a1 3.00000e+00 1.00000e-01 no limits
2 a2 1.00000e+00 1.00000e-01 no limits
3 a3 1.00000e-01 1.00000e-02 no limits
4 a4 1.00000e-02 1.00000e-03 no limits
**********
** 2 **MIGRAD 500 1
**********
FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4.
START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03
FCN=90047.1 FROM MIGRAD STATUS=INITIATE 14 CALLS 15 TOTAL
EDM= unknown STRATEGY= 1 NO ERROR MATRIX
EXT PARAMETER CURRENT GUESS STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE
1 a1 3.00000e+00 1.00000e-01 1.00000e-01 2.81614e+05
2 a2 1.00000e+00 1.00000e-01 1.00000e-01 -2.73395e+05
3 a3 1.00000e-01 1.00000e-02 1.00000e-02 -3.08505e+05
4 a4 1.00000e-02 1.00000e-03 1.00000e-03 3.53925e+05
MIGRAD MINIMIZATION HAS CONVERGED.
MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX.
EIGENVALUES OF SECOND-DERIVATIVE MATRIX:
-6.7561e-05 7.2947e-05 4.1376e-02 3.9586e+00
MINUIT WARNING IN HESSE
============== MATRIX FORCED POS-DEF BY ADDING 0.004026 TO DIAGONAL.
FCN=10.3986 FROM HESSE STATUS=NOT POSDEF 23 CALLS 112 TOTAL
EDM=0.11462 STRATEGY= 1 ERR MATRIX NOT POS-DEF
EXT PARAMETER APPROXIMATE STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE
1 a1 2.51776e+00 4.70562e-02 6.10330e-06 1.74962e+00
2 a2 1.39551e+00 8.92752e-02 1.31410e-05 6.70438e+00
3 a3 2.53639e-01 9.47123e-02 1.16109e-05 4.39325e+00
4 a4 6.07417e-02 4.27990e-02 9.90333e-06 -3.17219e+00
MIGRAD MINIMIZATION HAS CONVERGED.
MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX.
COVARIANCE MATRIX CALCULATED SUCCESSFULLY
FCN=5.83333 FROM MIGRAD STATUS=CONVERGED 232 CALLS 233 TOTAL
EDM=0.000806142 STRATEGY= 1 ERROR MATRIX ACCURATE
EXT PARAMETER STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE
1 a1 2.15261e+00 1.03165e-01 3.03942e-06 4.51214e+00
2 a2 8.11243e-01 2.53869e-01 5.62214e-06 -2.40936e+00
3 a3 1.71312e-01 4.00610e-01 4.93858e-06 -2.98669e+00
4 a4 1.01582e-01 1.60361e-01 4.18094e-06 3.54136e+00
EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=1
1.064e-02 1.057e-02 1.069e-02 2.338e-03
1.057e-02 6.445e-02 -7.905e-02 -3.417e-02
1.069e-02 -7.905e-02 1.605e-01 6.360e-02
2.338e-03 -3.417e-02 6.360e-02 2.572e-02
PARAMETER CORRELATION COEFFICIENTS
NO. GLOBAL 1 2 3 4
1 0.99974 1.000 0.404 0.259 0.141
2 0.99985 0.404 1.000 -0.777 -0.839
3 0.99995 0.259 -0.777 1.000 0.990
4 0.99980 0.141 -0.839 0.990 1.000
float z[5],
x[5],
y[5],errorz[5];
double func(
float x,
float y,
double *par)
{
double value=( (par[0]*par[0])/(
x*
x)-1)/ ( par[1]+par[2]*
y-par[3]*
y*
y);
return value;
}
void fcn(
int &npar,
double *gin,
double &
f,
double *par,
int iflag)
{
const int nbins = 5;
int i;
double chisq = 0;
double delta;
for (i=0;i<nbins; i++) {
delta = (z[i]-func(
x[i],
y[i],par))/errorz[i];
chisq += delta*delta;
}
}
void Ifit()
{
z[0]=1;
z[1]=0.96;
z[2]=0.89;
z[3]=0.85;
z[4]=0.78;
float error = 0.01;
errorz[0]=error;
errorz[1]=error;
errorz[2]=error;
errorz[3]=error;
errorz[4]=error;
double arglist[10];
int ierflg = 0;
arglist[0] = 1;
gMinuit->mnexcm(
"SET ERR", arglist ,1,ierflg);
static double vstart[4] = {3, 1 , 0.1 , 0.01};
static double step[4] = {0.1 , 0.1 , 0.01 , 0.001};
gMinuit->mnparm(0,
"a1", vstart[0], step[0], 0,0,ierflg);
gMinuit->mnparm(1,
"a2", vstart[1], step[1], 0,0,ierflg);
gMinuit->mnparm(2,
"a3", vstart[2], step[2], 0,0,ierflg);
gMinuit->mnparm(3,
"a4", vstart[3], step[3], 0,0,ierflg);
arglist[0] = 500;
arglist[1] = 1.;
gMinuit->mnexcm(
"MIGRAD", arglist ,2,ierflg);
double amin,edm,errdef;
int nvpar,nparx,icstat;
gMinuit->mnstat(amin,edm,errdef,nvpar,nparx,icstat);
}