Hi Wolfgang, just do: root [0] .L a1.c root [1] lfit() (I guess you tried to execute your macro instead - .x a1.c ...) Pasha. P.S. It would be nice if postings like the one below contain not only a bunch of code, but the commands you issued as well. It makes much more easy to figure out what is going wrong. -------------------------------------------------------------------------------- Wolfgang Korsch writes: > Hi again, > I still have problems with the fitiing: > > Here is my code: > > > { > > Float_t z[5],x[5],y[5],errorz[5]; > > void lfit() > { > //the z values > z[0]=1; > z[1]=0.96; > z[2]=0.89; > z[3]=0.85; > z[4]=0.78; > // The errors on z values > Float_t error = 0.01; > errorz[0]=error; > errorz[1]=error; > errorz[2]=error; > errorz[3]=error; > errorz[4]=error; > // the x values > x[0]=1.5751; > x[1]=1.5825; > x[2]=1.6069; > x[3]=1.6339; > x[4]=1.6706; > // the y values > y[0]=1.0642; > y[1]=0.97685; > y[2]=1.13168; > y[3]=1.128654; > y[4]=1.44016; > > TMinuit *gMinuit = new TMinuit(5); > //initialize TMinuit with a maximum of 5 params > gMinuit->SetFCN(fcn); > > Double_t arglist[10]; > Int_t ierflg = 0; > > arglist[0] = 1; > gMinuit->mnexcm("SET ERR", arglist ,1,ierflg); > > // Set starting values and step sizes for parameters > static Double_t vstart[4] = {3, 1 , 0.1 , 0.01}; > static Double_t 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); > > // Now ready for minimization step > arglist[0] = 500; > arglist[1] = 1.; > gMinuit->mnexcm("MIGRAD", arglist ,2,ierflg); > > // Print results > Double_t amin,edm,errdef; > Int_t nvpar,nparx,icstat; > gMinuit->mnstat(amin,edm,errdef,nvpar,nparx,icstat); > gMinuit->mnprin(3,amin); > } > > void fcn(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag) > { > const Int_t nbins = 5; > Int_t i; > > //calculate chisquare > > Double_t chisq = 0; > Double_t delta; > > for (i=0;i<nbins; i++) { > delta = (z[i]-func(x[i],y[i],par))/errorz[i]; > chisq += delta*delta; > } > f = chisq; > } > > Double_t func(float x,float y,Double_t *par) > { > Double_t value=( (par[0]*par[0])/(x*x)-1)/ ( > par[1]+par[2]*y-par[3]*y*y); > return value; > } > > } > > > and here is the error message: > > Limitation: Can not define body of function in tempfile > FILE:/usr/users/root/./a1.c LINE:6 > *** Interpreter error recovered *** > > > Thanks again for your help. > > Wolfgang
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:26:20 MET