Полагаю, вам нужно создать разные экземпляры func
с разными значениями W
и Wnew
. Вы почти у цели, просто задайте своему func
какое-то состояние:
struct func
{
double Wnew;
double W;
func(double Wnew, double W) : Wnew(Wnew),W(W) {}
double operator()(double const& x)
{
return abs(Wnew/2/x - atan(W/2/x));
}
};
И затем создайте такой пример:
double Wnew = 1.0;
double W = 2.0;
auto r = boost::math::tools::brent_find_minima(func(Wnew,W), 1.0, 2000.0, std::numeric_limits<double>::digits);
// ^^
Я был немного озадачен вашим operator()
будучи шаблоном и изменил это. Если у вас были веские причины для этого, просто сделайте его снова шаблоном.
PS: Начиная с C ++ 11, существуют лямбда-выражения , которые допускают гораздо более краткий синтаксис для функторов.