如果你想傳遞的固定值Y,Z你可以只使用一個綁定表達式:
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
。
如果情況並非如此,我不相信布倫特算法仍然是一個有效的方法。
看到它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
以下是手動函數對象:http:// coliru。 stacked-crooked.com/a/cba30664291e366e – sehe