00001 // @(#)root/minuit2:$Id: SimplexParameters.cxx 20880 2007-11-19 11:23:41Z rdm $ 00002 // Authors: M. Winkler, F. James, L. Moneta, A. Zsenei 2003-2005 00003 00004 /********************************************************************** 00005 * * 00006 * Copyright (c) 2005 LCG ROOT Math team, CERN/PH-SFT * 00007 * * 00008 **********************************************************************/ 00009 00010 #include "Minuit2/SimplexParameters.h" 00011 00012 namespace ROOT { 00013 00014 namespace Minuit2 { 00015 00016 00017 void SimplexParameters::Update(double y, const MnAlgebraicVector& p) { 00018 // update the SimplexParameter object with a new value y = FCN(p) 00019 fSimplexParameters[Jh()] = std::pair<double, MnAlgebraicVector>(y, p); 00020 if(y < fSimplexParameters[Jl()].first) fJLow = Jh(); 00021 00022 unsigned int jh = 0; 00023 for(unsigned int i = 1; i < fSimplexParameters.size(); i++) { 00024 if(fSimplexParameters[i].first > fSimplexParameters[jh].first) jh = i; 00025 } 00026 fJHigh = jh; 00027 00028 return; 00029 } 00030 00031 MnAlgebraicVector SimplexParameters::Dirin() const { 00032 // find simplex direction (vector from big to smaller parameter points) 00033 MnAlgebraicVector dirin(fSimplexParameters.size() - 1); 00034 for(unsigned int i = 0; i < fSimplexParameters.size() - 1; i++) { 00035 double pbig = fSimplexParameters[0].second(i), plit = pbig; 00036 for(unsigned int j = 0; j < fSimplexParameters.size(); j++){ 00037 if(fSimplexParameters[j].second(i) < plit) plit = fSimplexParameters[j].second(i); 00038 if(fSimplexParameters[j].second(i) > pbig) pbig = fSimplexParameters[j].second(i); 00039 } 00040 dirin(i) = pbig - plit; 00041 } 00042 00043 return dirin; 00044 } 00045 00046 } // namespace Minuit2 00047 00048 } // namespace ROOT