一:数值积分
问题描述:求
仅说明 Simpon公式,以二次曲线逼近的方式取代矩形或者提醒面积,在EXP极小的情况下可以求得近似面积解
[图片源于他人BLOG]
long double simpson(long double l,long double r)
{
long double mid=l+(r-l)/2.0;
return (r-l)*(f(l)+4.0*f(mid)+f(r))/6.0;
}
例题:HDU1724
题意:求得L,R的积分解,套用simpson公式
BUG:为什么卡long double不得解,毕竟long double的精度不低于double?
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<math.h>
#define PI acos(-1.0)
#define pb push_back
#define F first
#define S second
#define debug puts
using namespace std;
typedef long long ll;
const int N=5e3+5;
const int MOD=1e9+7;
const int INF=0x3f3f3f3f;
double a,b,l,r,eps=1e-6;
double f(double t){
return b*sqrt((1-t*t/a/a));
}
double simpson(double l,double r)
{
double mid=l+(r-l)/2.0;
return (r-l)*(f(l)+4.0*f(mid)+f(r))/6.0;
}
double solve(double l,double r,double eps){
double mid=(l+r)/2;
if(fabs(simpson(l,r)-simpson(l,mid)-simpson(mid,r))<eps) return simpson(l,r);
else return solve(l,mid,eps/2)+solve(mid,r,eps/2);
}
int main(void){
int t;
cin>>t;
while(t--){
cin>>a>>b>>l>>r;
printf("%.3f\n",2*solve(l,r,eps));
}
return 0;
}
例题:bzoj2178未完待续
二:高阶代数方程求根