我需要找到特定比率之间的最大函数。下面的代码显示了“黄金比例的方法”,它可以找到函数的最大值。问题是当我在[0.,10。]中使用exp()函数时,结果大约为10,但它应该是大约20k。你知道问题出在哪里吗?你有其他方法来找到函数的最大值吗?
#include <iostream>
#include <cmath>
using namespace std;
double goldenRatioMethodMax(double(*p_pFunction)(double), double a, double b)
{
double k = (sqrt(5.) - 1.) / 2.;
double xL = b - k * (b - a);
double xR = a + k * (b - a);
while (b - a > EPSILON)
{
if (p_pFunction(xL) > p_pFunction(xR))
{
b = xR;
xR = xL;
xL = b - k*(b - a);
}
else
{
a = xL;
xL = xR;
xR = a + k * (b - a);
}
}
return (a + b) / 2.;
}
int main(int argc, char **argv)
{
cout << goldenRatioMethodMax(exp, 0.,10.);//the answer is about 10 but it should be about 20k
return 0;
}
答案 0 :(得分:1)
问题是你返回找到max的值,而不是max本身。只需将函数的最后一行更改为return p_pFunction((a + b) / 2.);
,它就会生成预期的输出。