黄金分割法具体思路看这个 看懂之后看代码是秒懂 纯纯的三分进化版,思路和三分一毛一样,只是取的两个三分点变成了两个黄金分割点,每次缩小的范围比三分点稍微大一点点
#include <bits/stdc++.h>
using namespace std;
const double gold = (sqrt(5)-1)/2;//黄金分割率
const double eps = 1e-8;//正常题目要求精度+2
const int MA = 15;
double xi[MA];//所存系数
int n;
double de_sum(double x){//求多项式的和
double sum = 0;
for (int i = 0; i <= n; i++){
sum = sum*x + xi[i];
}
return sum;
}
int main()
{
double l,r;
scanf("%d%lf%lf",&n,&l,&r);
for (int i = 0 ; i <= n; i++){
scanf("%lf",&xi[i]);//从大到小好计算
}
while(fabs(r-l) > eps){
double Gold = (r-l) * gold;
double rmid = l + Gold;
double lmid = l + r - rmid;
if(de_sum(lmid) > de_sum(rmid) ) r = rmid;
else l = lmid;
}
printf("%.5lf",l);
return 0;
}