#pragma once #include #include #include #include using namespace std; double ybot(double R); double ytop(double R); double local_ratio(double y, double z); double next_cost(double y, double z); double revert_exp_integral(double y); double compute_R0(); double contiguous_ratio(double R); double dichotomy( const function& f, double c, double epsilon, double a, double b, bool is_increasing = true ); // Ternary search for a single parameter double ternary_search( const function&)>& func, vector& params, vector& valid_params, int param_index, double left, double right, int max_iter = 100, double ternary_precision = 1e-8 ); // Multidimensional ternary search vector multidimensional_ternary_search( const function&)>& func, vector> ranges, int max_iter = 1000, double iter_precision = 1e-6, double ternary_precision = 1e-8 );