Exemple #1
0
double search_interval(double x0,double& L, double& R, slice_function& g,double logy)
{
  //  assert(g(x0) > g(L) and g(x0) > g(R));
  assert(g(x0) >= logy);
  assert(L < R);
  assert(L <= x0 and x0 <= R);

  double L0 = L, R0 = R;

  // std::cerr<<"**    L0 = "<<L0<<"   x0 = "<<x0<<"   R0 = "<<R0<<std::endl;
  for(int i=0;i<200;i++)
  {
    double x1 = L + uniform()*(R-L);
    double gx1 = g(x1);
    //   std::cerr<<"    L  = "<<L <<"   x = "<<g.current_value()<<"   R  = "<<R<<std::endl;
    //   std::cerr<<"    logy  = "<<logy<<"\n"; //  logy_x0 = "<<logy_x0<<" logy_current = "<<g()<<std::endl;

    if (gx1 >= logy) return x1;

    if (x1 > x0) 
      R = x1;
    else
      L = x1;
  }
  std::cerr<<"Warning!  Is size of the interval really ZERO?"<<std::endl;
  double logy_x0 = g(x0);  
  std::cerr<<"    L0 = "<<L0<<"   x0 = "<<x0<<"   R0 = "<<R0<<std::endl;
  std::cerr<<"    L  = "<<L <<"   x = "<<g.current_value()<<"   R  = "<<R<<std::endl;
  std::cerr<<"    logy  = "<<logy<<"  logy_x0 = "<<logy_x0<<"  logy_current = "<<g()<<std::endl;

  std::abort();

  return x0;
}
Exemple #2
0
double slice_sample(slice_function& g, double w, int m)
{
  double x0 = g.current_value();
  return slice_sample(x0,g,w,m);
}