自適應辛普森了解一下

2022-02-28 12:08:40 字數 1780 閱讀 3185

a 了這道超短的紫題,來發表一下自己的一些想法...

首先泰勒展開大家都聽說過吧?【霧

沒聽說過?安利某知乎回答:蒼老師教你如何更好地記憶泰勒展開

然後你就知道了,泰勒展開其實是對於某個函式在乙個點不斷去高階求導,然後用求導得到的資訊構造乙個多項式,使得這個多項式在一定範圍內幾乎和原函式擬合(可以理解為接近重合的意思吧...)

那麼其實自適應辛普森也是類似的道理,只不過它是用了分治的方法去構造這個 假 擬合 多項式(其實就是二次函式,究其原因應該就是這玩意兒比較好積分並且存在弧度,容易擬合吧...)

至於為什麼前面加了個自適應呢?因為我們考慮分治是要有終止條件的(像對於乙個序列分治的話就是分治的區間長度為 1 時停止),但是我們這裡是在實數域上擬合乙個多項式啊,不存在什麼規定的終止點...

於是我們考慮怎樣去設定終止條件?那當然是給定乙個誤差範圍(比如 1e-6),然後如果擬合函式和原函式大多數點的 y 值誤差不超過這個範圍就終止分治,直接拿當前的函式去積分就好了,當然具體怎麼比較的先別管(你看到下面之後會發現根本不需要比較兩個函式 2333 )

然後我們發現這個誤差越大答案越不準確,越小跑的越慢,那麼我們就要調整這個誤差範圍,然後這樣的過程就有點像"自適應"了

我們先將原函式約等於成乙個二次多項式:

\[f(x)≈ax^2+bx+c

\]然後題目要我們求的東西也轉化一下:

\[ans=\int_a^b f(x)dx

\]\[≈\int_a^b ax^2+bx+c

\]\[=(b^3-a^3) + (b^2-a^2) +c(b-a)

\]\[= [ 2a(b^2+ab+a^2) + 3b(b+a)+6c]

\]\[= [ (aa^2 + ba+c) + (ab^2+bb+c)+4(~a~()^2 + b ()+c)]

\]\[≈ [~ f(a) + f(b) + 4~f()~]

\]恩?你問我推導**來的? 大佬%%%

我們發現最後約回去了,a b c 都不見了,而且這時候式子裡面已經沒有積分了...

沒錯,我們發現上面其實根本不需要用到這個擬合二次函式的具體係數 a、b、c ,只需要將 f 的式子帶入計算求值就好了

但是這樣的話我們發現之前說的終止條件不見了,因為我們的擬合函式已經不需要了(而且找出來也很麻煩...)

其實我們只需要比較當前區間 \([a,b]\) 不分治時候的答案 \(ans\) 和 分治下的答案 \(ansl+ansr\) 的誤差是否超過了我們設定的精度範圍就好了

至於正確性?(我怎麼知道)

因為我們知道這個分治肯定是層數越多越精確的,所以分治的結果精確度肯定高於當前 ans 的精確度,那麼我們卡卡精度就能讓答案在誤差允許範圍內了

faq: mmp 原來真的不用比較原函式和擬合函式...

如果要比較的話又能怎麼比較呢?反正我是不會的...

**超級短!相應的我們可以知道這裡我們只需要將 f 函式改一改就能解決其他函式的積分問題了(一定精度下)

//by judge

#include#define db double

using namespace std;

db a,b,c,d,l,r;

inline db f(db x)

inline db simpson(db l,db r)

db asr(db l,db r,db eps,db ans)

inline db asr(db l,db r,db eps)

int main()

自適應辛普森

辛普森定理 對於一段函式f在 l,r 範圍內的面積 r,l f x dx,我們可以由辛普森定理得到下列式子 是積分的意思 即 r,l f x dx r l 6 f l 4f l r 2 f r 但問題是這樣做是把f x 在 l,r 範圍內看做乙個二次函式來算的,所以精度並不高。因此,我們需要一種可以...

自適應辛普森積分

寫在前面方便複習 例題 題目大意 給定 a,b l,r a,b,l,r a,b,l,r 求橢圓 x2a 2 y2 b2 1 frac frac 1 a2x2 b2y2 1 在 l,r l,r l,r 的積分 題目分析 題目所求即為 2 l rb1 x2a2 dx 2 int l rb sqrt dx...

自適應辛普森積分

乙個完全不會計算幾何的蒟蒻的自我拯救 有的時候會有一些毒瘤計算幾何題,要求的圖形面積邊緣是一段函式,而這個函式解析式通常非常繁瑣,沒辦法直接用公式積分,所以就需要用辛普森積分求近似值。辛普森積分的用途就是在精度要求不高的時候 通常是求圖形面積 求函式積分的近似值,大概步驟就是在積分區間 a,b 中不...