辛普森積分(自適應辛普森公式求積分)

2021-08-08 02:16:46 字數 1990 閱讀 8385

自適應辛普森公式求積分

第一回接觸辛普森積分,至於這個辛普森是幹嘛的呢,在這裡就有必要好好地講一講了。

應用:立體幾何中用來求擬柱體體積的公式。

這裡就不詳細說辛普森公式了,有需要的朋友可以看這裡

接下來我們好好的說說自適應辛普森公式求積分自適應辛普森公式求積分是很重要的乙個知識點,弄懂了自適應辛普森公式求積分就能明白辛普森積分是幹嘛的了,

下面的內容是重點!!!:

假設我們求以下積分:

比較特殊的情況,就是可以推導出來最後的形式。但是比較一般的情況是,我們只能大致得到乙個xy座標系裡的曲線,我們求的就是曲線和x軸所圍成的面積。

因此我們有自適應辛普森公式,他會根據實際情況來自動的調整精度。

它的大致過程就是,給定乙個要求達到的精度eps,演算法就會根據實際情況遞迴的劃分區間。容易近似的地方少劃分,不容易近似的地方多劃分幾份。

具體來講,我們在以下情況下直接返回結果,否則遞迴劃分區間:

具體參考部落格:

下面舉個例題:hdu-1724

題目大意:題目就是求兩條線所夾的橢圓的面積。這是個標準的橢圓,其中心在原點。我好像看到了題目連橢圓面積公式都給了,然而並沒有任何用,直接上辛普森!

根據橢圓的對稱性,我們求x軸上方的面積然後乘以2就是答案。根據橢圓方程x2a2+y2b2=1,建構函式y=。。。其中y>0,然後對此函式進行自適應辛普森積分就可以了。

寫完程式過了樣例後立馬交,tle,1000ms。結果發現是eps取的太小了,取了1e-10,隨著遞迴下去,eps不斷除以2,導致不斷遞迴劃分,做的次數很多就超時了。這題只要求保留3位小數,所以精度沒有太大問題,將eps改為1e-5立馬就ac了,109ms。

ac**:

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ri(n) scanf("%d",&n)

#define oi(n) printf("%d\n",n)

#define rl(n) scanf("%lld",&n)

#define ol(n) printf("%lld\n",n)

#define rep(i,l,r) for(i=l;i<=r;i++)

#define rep1(i,l,r) for(i=l;iusing

namespace

std;

typedef

long

long ll;

const

int inf=0x3f3f3f3f;

const

double eps=1e-5;//這裡的eps是整個辛普森應用的關鍵,至於取多大,得依題目而定

double a,b,l,r;

double f(double x)//這裡的f函式是自己根據題目推導出來的,主要還是x有關y的函式

double simpson(double a,double b)//這裡是辛普森公式

double ars(double a,double b,double eps)//這裡就是遞迴求辛普森最重要的一段函式了,

int main()

return

0;}

自適應辛普森公式求積分

假設我們求以下積分 b af x dx 比較特殊的情況,就是可以推導出來最後的形式。但是比較一般的情況是,我們只能大致得到乙個xy 座標系裡的曲線,我們求的就是曲線和 x 軸所圍成的面積。因此我們有自適應辛普森公式,他會根據實際情況來自動的調整精度。它的大致過程就是,給定乙個要求達到的精度eps,演...

自適應辛普森積分

寫在前面方便複習 例題 題目大意 給定 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 中不...