題面傳送門
眾所周知,定積分可以推公式求。
但是如果我們推不出來不想推怎麼辦呢?
作為oi競賽肯定不會讓你寫個什麼輸出根號之類的,肯定會有絕對誤差或相對誤差不大於多少多少。那麼我們就可以用自適應辛普森法。
就是二次函式擬合,沒別的。
但是如果乙個亂七八糟的函式直接二次函式擬合會很奇怪的東西出來。
所以我們採用分治策略,如果乙個區間擬合的答案和子區間擬合的答案相差不多,那麼可以認為擬合的差不多了,直接返回。
如果不行繼續擬合即可。
code:
#include#define i inline
#define abs(x) ((x)>0?(x):-(x))
#define re register
#define ri re int
#define ll long long
#define db double
#define lb long db
#define n 200000
#define m 5
#define mod 1000000007
#define mod 998244352
#define eps (1e-8)
#define u unsigned int
#define it iterator
#define gc() getchar()
#define me(x,y) memset(x,y,sizeof(x))
#define d(x,y) (n*(x-1)+(y))
#define r(n) (rand()*rand()%(n)+1)
using namespace std;
int n,m,k;db a,b,c,d,l,r;
i db f(db x)
i db simpson(db l,db r)
i db calc(db l,db r)
int main()
luogu P4525 自適應辛普森法1
link 自適應辛普森法1 觀察題目 這個東西 憑藉我們的數學知識應該是化簡不了的。可以直接認為是乙個函式 求定積分直接使用辛普森就行辣.一種寫法 double a,b,c,d double f double x 區間 a,b 上的辛普森值 double simpson double a,doubl...
Luogu4525 模板 自適應辛普森法1
題面 洛谷 講一講這東西吧。自適應辛普森法的原理就是用二次函式來擬合所給函式,然後計算二次函式的積分得到近似答案,這裡首先給出二次函式的積分公式 也就是所謂的辛普森公式 並證明。int f x x int ax 2 bx c x fracr 3 fracr 2 cr fracl 3 fracl 2 ...
洛谷P4525 模板 自適應辛普森法1
傳送門 我似乎連積分都不太熟練 總之就是對於乙個原函式,我們找乙個二次函式來近似它,那麼有 begin int a bf x dx frac b 3 a 3 frac b 2 a 2 c a b frac 2a b 2 ab a 2 3b b a 6c frac 2ab 2 2aab 2aa 2 3...