#include "TH1.h" #include "TF1.h" #include "TStopwatch.h" #include "TMinuit.h" #include "TVirtualFitter.h" #include "TCanvas.h" #include "TF2.h" #include "TH1F.h" #include "TCanvas.h" #include "TH2F.h" #include "TLegend.h" #include "math.h" #include "TSystem.h" #include "TStyle.h" #include void RosenbrockCurvedValley(Int_t & /*nPar*/, Double_t * /*grad*/ , Double_t &fval, Double_t *x, Int_t /*iflag */ ) { fval = 100*(x[1] - x[0]*x[0])*(x[1] - x[0]*x[0]) + (1 - x[0])*(1 - x[0]); return; } void DoFit(const char *fitterType="Minuit2",double par1 = 0, double par2 = 0) { Double_t foundMinimum[2]; Double_t arglist[100]; arglist[0] = 0; // create fitter instance using type fitter TVirtualFitter::SetDefaultFitter(fitterType); TVirtualFitter * minuit2 = TVirtualFitter::Fitter(0,2); arglist[0] = 1; // set print level minuit2->ExecuteCommand("SET PRINT",arglist,1); // set initial prameters minuit2->SetParameter(0, "x", par1, 0.1, 0,0); minuit2->SetParameter(1, "y", par2, 0.1, 0,0); // set function to minimize minuit2->SetFCN(RosenbrockCurvedValley); // minimize minuit2->ExecuteCommand("MIGRAD",arglist,0); // get minimum values foundMinimum[0] = minuit2->GetParameter(0); foundMinimum[1] = minuit2->GetParameter(1); std::cout << " " << fitterType << " :" << " minimum values for " << par1 << "," << par2 << std::endl; std::cout << " par0 = " << foundMinimum[0] << std::endl; std::cout << " par1 = " << foundMinimum[1] << std::endl; } void testRosenbrockCurvedValley() { DoFit("Minuit2",5,5); } #ifndef __CINT__ int main() { testRosenbrockCurvedValley(); } #endif