gpt4 book ai didi

c++ - 向 brent_find_minima 添加额外的参数

转载 作者:搜寻专家 更新时间:2023-10-31 01:05:46 25 4
gpt4 key购买 nike

我是 C++ 的新手,所以请原谅我的无知。我正在考虑使用 Boost 库来执行一维优化。我正在使用 brent_find_minima 函数,并查看了文档页面 here .但是对于 brent_find_minima 函数的输入,还需要提供另一个函数 f

显示了一个使用它的例子 here但它们的功能只接受一个参数。即 double f(double x){...},如果您想为 f 提供额外的参数,以便优化参数发生变化,例如double f(double x, int y, int z){...} 其中 yz 可以改变函数的结果 f 对于相同的 x 是否可以在 brent_find_minima 阶段指定它?

鉴于我是 C++ 的新手,任何展示这是如何完成的示例/更改链接中给出的示例以接受超过 1 个参数都将非常有帮助。

最佳答案

如果你想为 y,z 传递固定值,你可以只使用绑定(bind)表达式:

double f(double x, int y, int z) 
{ return (y*sin(x) + z + x * cos(x)); }

brent_find_minima(std::bind(f, _1, 3, 4), 3.0, 4.0, 20);

3, 4y, z

如果情况并非如此,我不相信布伦特算法仍然是一种有效的方法。

查看 Live On Coliru

#include <iostream>
#include <sstream>
#include <string>

#include <functional> // functional
using namespace std::placeholders;

#include <boost/math/tools/minima.hpp>

double f(double x, int y, int z)
{ return (y*sin(x) + z + x * cos(x)); }

int main(int argc, char** argv)
{
typedef std::pair<double, double> Result;
// find a root of the function f in the interval x=[3.0, 4.0] with 20-bit precision
Result r2 = boost::math::tools::brent_find_minima(std::bind(f, _1, 3, 4), 3.0, 4.0, 20);
std::cout << "x=" << r2.first << " f=" << r2.second << std::endl;
return 0;
}

// output:
// x=3.93516 f=-0.898333

关于c++ - 向 brent_find_minima 添加额外的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22119072/

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