gpt4 book ai didi

c++ - 如何在Boost C++中对具有多个参数的函数使用二等分方法

转载 作者:行者123 更新时间:2023-12-01 14:19:57 26 4
gpt4 key购买 nike

我在C++中具有以下功能

#include <cmath>
#include <utility>
#include <iostream>
#include <boost/math/tools/roots.hpp>

double my_fn(double x, double y)
{
return x*x - y - 1;
};

int main() {
double min_x = 0.0; // min value of domain of x
double max_x = 10.0; // max value of domain of x
double y = 1;

// how to use boost's bisection to find solution of my_fn for y = 1
return (0);
}
如您所见, my_fn接受2个参数 xy。但是我想找到给定 y = 1的此功能的解决方案。
您可以使用 bisection方法帮助找到解决方案吗?

最佳答案

#include <cmath>
#include <utility>
#include <iostream>
#include <boost/math/tools/roots.hpp>

double my_fn(double x, double y)
{
return x*x - y - 1;
};

int main() {
double min_x = 0.0; // min value of domain of x
double max_x = 10.0; // max value of domain of x
double y = 1;
auto x = boost::math::tools::bisect(
[y](double x){ return my_fn(x,y); },
min_x,
max_x,
[](double x,double y){return abs(x-y) < 0.01;}
);
std::cout << "The minimum is between x=" << x.first << " and x=" << x.second;
// how to use boost's bisection to find solution of my_fn for y = 1
return (0);
}
bisect是模板。第一个参数是可调用的(最小化函数),然后是初始括号(最小和最大),最后一个参数是可调用的,用于评估停止条件。
或者,您可以编写一个函数:
double my_fn_y1(double x) {
return my_fn(x,1);
}
并将其最小化。
PS:该函数不会返回解决方案 ,而是返回使停止条件为true的最终间隔。真正的解决方案是在此间隔内的某个位置。

关于c++ - 如何在Boost C++中对具有多个参数的函数使用二等分方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63728238/

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