三分其实是每次取L,R的终点mid,把mid左边一点点的函数值和右边一点点的函数值比较,舍弃一边的区间,这样不断缩小区间直到满足精度要求(一般eps取0.1*精度),但我们都喜欢取三等分点,其实只要是左边一点点和右边一点点就行了。
多项式求值还有个秦九韶算法,可以把2n+1次乘法n次加法简化为n次乘法和n次加法
浅记录一下吧~(当个笔记来用)
#include<bits/stdc++.h>
using namespace std;
const double eps=1e-7;//其实一般精度*0.1=1e-6就可以了
int n;
double L,R;
double a[15];
//普通的求多项式
/*double F(double x)
{double f=0;for(int i=n;i>=0;i--){double t=1;for(int j=1;j<=i;j++)t*=x;f+=a[i]*t;}return f;
}*/
//秦九韶算法从里到外逐层计算一次多项式的值
double F(double x)
{double sum=0;for(int i=n;i>=0;i--)sum=sum*x+a[i];return sum;
}
int main()
{cin>>n>>L>>R;for(int i=n;i>=0;i--) cin>>a[i];while(fabs(L-R)>=eps){double mid=(L+R)/2;if(F(mid+eps)>F(mid-eps)) L=mid;//舍弃左区间else R=mid;//舍弃右区间}printf("%.5lf",R);return 0;
}
over~