参考资料:【上海交大】最优化方法 18讲视频教程
二分法算法

例题

例题代码
#include <iostream>
// C++默认小数为double类型,为避免类型转换麻烦,故将x定义为double类型
double f(double x) {
return (8*x*x*x - 2*x*x - 7*x + 3);
}
// 函数名即为函数首地址,故要以指针类型传入
/*!
* 实现二分查找
* @param f 需要优化的函数
* @param a 优化区间下界
* @param b 优化区间上界
* @param epsilon 最终所得区间长度最大值
* @return
*/
double dichotomous_search(double(*f)(double), double a, double b, double epsilon) {
double c, x1, x2, interval, precise;
interval = b - a;
precise = epsilon * 0.1; // 该精度供C++对比用
while (interval - epsilon > precise) {
c = (a + b) / 2;
x1 = c - epsilon/2;
x2 = c + epsilon/2;
if (f(x1) <= f(x2)) {
b = x2;
} else {
a = x1;
}
interval = b - a;
std::cout << a << ", " << b << std::endl;
}
return (a + b)/2;
}
int main() {
double x = dichotomous_search(f, 0, 1, 0.1);
std::cout << "x* = " << x << std::endl;
return 0;
}
所得结果

本文介绍了使用C++实现二分法查找凸函数最小值的方法,结合【上海交大】最优化方法课程中的例题,详细阐述了算法过程,并提供了例题代码及最终计算结果。
2140

被折叠的 条评论
为什么被折叠?



