三分其实是每次取L,R的终点mid,把mid左边一点点的函数值和右边一点点的函数值比较,舍弃一边的区间,这样不断缩小区间直到满足精度要求(一般eps取0.1*精度),但我们都喜欢取三等分点,其实只要是左边一点点和右边一点点就行了。
多项式求值还有个秦九韶算法,可以把2n+1次乘法n次加法简化为n次乘法和n次加法
浅记录一下吧~(当个笔记来用)文章来源:https://www.toymoban.com/news/detail-606492.html
#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~文章来源地址https://www.toymoban.com/news/detail-606492.html
到了这里,关于P3382 【模板】三分法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!