参考课本:最优化方法 - 孙文瑜等
根据课本P110算法3.2.1(0.618法计算步骤)编写C++代码,例题为P137第4题(1)(2)
0.618法代码
#include <iostream>
#include <cmath>
double f(double t) {
return exp(-t) + exp(t);
}
/*!
* 实现0.618法
* @param f 需要优化的函数
* @param a 优化区间下界
* @param b 优化区间上界
* @param epsilon 最终所得区间长度最大值
* @return
*/
double golden_section(double(*f)(double), double a, double b, double epsilon) {
double lambda = a + 0.382 * (b - a);
double mu = a + 0.618 * (b - a);
int k = 0; // 记录迭代次数
double result = 0; // 储存返回值
while (true) {
if (f(lambda) < f(mu)) {
// step 3
if (b - lambda <= epsilon) {
result = mu;
break;
} else {
a = lambda;
lambda = mu;
mu = a + 0.618 * (b - a);
}
} else {
// step 4
if (mu - a < epsilon) {
result = lambda;
break;
} else {
b = mu;
mu = lambda;
lamb