00001 #include "Math/Polynomial.h"
00002 #include "Math/GSLMinimizer1D.h"
00003 #include "Math/Functor.h"
00004
00005 #include <iostream>
00006
00007
00008
00009
00010 void testMinimization1D() {
00011
00012
00013 ROOT::Math::Polynomial *polyf = new ROOT::Math::Polynomial(2);
00014
00015 std::vector<double> p(3);
00016 p[0] = 1;
00017 p[1] = -4;
00018 p[2] = 1;
00019 polyf->SetParameters(&p[0]);
00020
00021 ROOT::Math::IGenFunction & func = *polyf;
00022
00023
00024 {
00025
00026 ROOT::Math::GSLMinimizer1D min;
00027 min.SetFunction(func,1,-10,10);
00028 min.Minimize(100,0.01,0.01);
00029 std::cout << "test Min1D " << min.Name() << " Return code " << min.Status() << std::endl;
00030
00031 std::cout.precision(20);
00032
00033 std::cout << "Found minimum: x = " << min.XMinimum() << " f(x) = " << min.FValMinimum() << std::endl;
00034
00035 }
00036 {
00037
00038 ROOT::Math::GSLMinimizer1D min(ROOT::Math::Minim1D::kGOLDENSECTION);
00039 min.SetFunction(func,1,-10,10);
00040 min.Minimize(100,0.01,0.01);
00041 std::cout << "test Min1D " << min.Name() << " Return code " << min.Status() << std::endl;
00042
00043 std::cout.precision(20);
00044
00045 std::cout << "Found minimum: x = " << min.XMinimum() << " f(x) = " << min.FValMinimum() << std::endl;
00046
00047 }
00048
00049
00050 }
00051
00052
00053
00054 int main() {
00055
00056 testMinimization1D();
00057 return 0;
00058
00059 }