- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是 C++ 的新手,所以请原谅我的无知。我正在考虑使用 Boost 库来执行一维优化。我正在使用 brent_find_minima
函数,并查看了文档页面 here .但是对于 brent_find_minima
函数的输入,还需要提供另一个函数 f
。
显示了一个使用它的例子 here但它们的功能只接受一个参数。即 double f(double x){...}
,如果您想为 f
提供额外的参数,以便优化参数发生变化,例如double f(double x, int y, int z){...}
其中 y
和 z
可以改变函数的结果 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, 4
为 y, z
。
如果情况并非如此,我不相信布伦特算法仍然是一种有效的方法。
#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/
我是 C++ 的新手,所以请原谅我的无知。我正在考虑使用 Boost 库来执行一维优化。我正在使用 brent_find_minima 函数,并查看了文档页面 here .但是对于 brent_fin
如何从 main() 传递 boost::math::tools::brent_find_minima() 中的一些常量? struct func { template T operator
我试图理解为什么不能将具有构造函数的仿函数传递给算法,而没有构造函数的仿函数却可以。 对于算法 boost-brent_minima。当仿函数没有构造函数时,示例代码工作正常: #include s
This boost::math::tools::brent_find_minima 的文档页面说到它的第一个参数: The function to minimise: a function obje
我是一名优秀的程序员,十分优秀!