求单峰函数的最值点
#include <bits/stdc++.h>using namespace std;const int N = 15;const double eps = 1e-12;int n;double a[N];double cal(double x) {double pow = 1, res = 0;for (int i = n+1; i >= 1; i--) {res += a[i]*pow;pow *= x;}return res;}signed main() {double l, r;cin >> n >> l >> r;for (int i = 1; i <= n+1; i++)scanf("%lf", &a[i]);while (r-l >= eps) {double m1 = l+(r-l)/3;double m2 = r-(r-l)/3;//此处求的是最大值,最小值改为<=即可if (cal(m2)-cal(m1) >= eps) {l = m1;} else {r = m2;}}printf("%.5lf\n", l);return 0;}
