黄金比例的方法

时间:2014-01-15 17:31:25

标签: c++ function

我需要找到特定比率之间的最大函数。下面的代码显示了“黄金比例的方法”,它可以找到函数的最大值。问题是当我在[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;
}

1 个答案:

答案 0 :(得分:1)

问题是你返回找到max的值,而不是max本身。只需将函数的最后一行更改为return p_pFunction((a + b) / 2.);,它就会生成预期的输出。