gpt4 book ai didi

c++ - 如何在 Boosts 的 brent_find_minima() 中传递一些常量?

转载 作者:行者123 更新时间:2023-12-02 09:56:09 26 4
gpt4 key购买 nike

如何从 main() 传递 boost::math::tools::brent_find_minima() 中的一些常量?

struct func
{
template <class T>
T operator()(T const& x)
{ //
T Wnew = 20.0/9.0*720.0; // Goal is to pass it through main()
T W = 2500; // Goal is to pass it through main()
return abs(Wnew/2/x - atan(W/2/x));
}
};

int main(int argc, char **argv)
{
// How can I pass Wnew and W values while calling boost::math::tools::brent_find_minima() from main()
std::pair<double, double> r = boost::math::tools::brent_find_minima(func(), 1.0, 2000.0, std::numeric_limits<double>::digits);
std::cout.precision(std::numeric_limits<double>::digits10);
std::cout << "x at minimum = " << r.first << ", f(" << r.first << ") = " << r.second << std::endl;
}

最佳答案

我想你想要的是创建 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开始,有 lambda expressions允许仿函数更简洁的语法。

关于c++ - 如何在 Boosts 的 brent_find_minima() 中传递一些常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59992122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com