#P1276. G57_1 自适应辛普森积分*【计算几何】辛普森积分
G57_1 自适应辛普森积分*【计算几何】辛普森积分
Description
【题意】试计算积分
$\displaystyle{\int_L^R (a x^2+b x+c) \mathrm{d}x}$
结果保留至小数点后 $6$ 位。
数据保证计算过程中分母不为 $0$ 且积分能够收敛。
【输入格式】
一行,包含 $5$ 个实数 $a,b,c,L,R$。
【输出格式】
一行,积分值,保留至小数点后 $1$ 位。
【样例输入】
1 2 3 4 5
【样例输出】
32.3
【提示】
$a,b,c,\in[-10,10]$,$-100\le L<R\le 100$ 且 $R-L\ge1$。
Hint
G57 自适应辛普森积分【计算几何】#include<bits/stdc++.h>//暴力模拟80分
using namespace std;
const double eps=1e-10;
double a,b,c,L,R;
double f(double x)
{
return a*x*x+b*x+c;
}
double simpson(double l,double r)
{
return (r-l)*( f(l)+f(r)+4*f( (l+r)/2 ) )/6;
}
int main()
{
//freopen("a.in","r",stdin);freopen("a.out","w",stdout);
scanf("%lf%lf%lf%lf%lf",&a,&b,&c,&L,&R);
double ans=0;
for(double i=L;i<=R; i+=0.000001)
ans+= f(i+0.0000005)*0.000001;
printf("%.1lf\n",ans );
return 0;
}
</p>
#include<bits/stdc++.h>//正解 辛普森公式
using namespace std;
const double eps=1e-10;
double a,b,c,L,R;
double f(double x)
{
return a*x*x+b*x+c;
}
double simpson(double l,double r)
{
return (r-l)*( f(l)+f(r)+4*f( (l+r)/2 ) )/6;
}
int main()
{
freopen("a.in","r",stdin);freopen("a.out","w",stdout);
scanf("%lf%lf%lf%lf%lf",&a,&b,&c,&L,&R);
printf("%.1lf\n",simpson(L,R) );
return 0;
}