单峰函数,使用三分
#include<bits/stdc++.h>
using namespace std;
int n;
double l,r,ee=1e-9;
double arr[15]={0};
double f(double x);
double power(double x,int c);
int main()
{
cin>>n>>l>>r;
for(int i=0;i<n+1;i++)
{
cin>>arr[i];
}
while(r-l>ee)
{
double k=(r-l)/3.0;
double mid1=l+k;
double mid2=r-k;
if(f(mid1)>f(mid2))
{
r=mid2;
}
else
{
l=mid1;
}
}
printf("%.5f",l);
}
double power(double x,int c)
{
double ans=x;
for(int i=0;i<c-1;i++)
{
ans=ans*x;
}
if(c==0)
{
return 1;
}
return ans;
}
double f(double x)
{
double ans=0;
for(int i=n;i>=0;i--)
{
ans+=arr[n-i]*power(x,i);
}
return ans;
}

京公网安备 11010502036488号