1. 程式人生 > >[待完善]關於辛普森公式的一點想法

[待完善]關於辛普森公式的一點想法

16px 意思 onclick 自己 很大的 play 更多 ble turn

[吐槽]

  嗯一開始接觸到這個東西其實是因為某道凸包的題目好像可以用這個奇妙的方法來算

  但其實了解也不是很深,只是覺得這個東西十分有意思,

  所以先稍微寫一下自己的想法,了解更多之後慢慢完善

[正題]

  首先這個公式是長這樣的:

  取一個二次函數上(嗯。。貌似是這樣的)的一段區間,左端點為$(l, hl)$,右端點為$(r, hr)$,中間的那個點為$(\frac{r-l}{2}, hmid)$

  那麽,這段的積分可以表示為:

  $\frac{(r-l)*(hl+4*hmid+hr)}{6}$

  但是這樣往往會有很大的誤差(並不是所有的函數圖像都長成二次函數的樣子的啊)

  所以這個時候就可以用二分的方法來提高精度

  當一段區間極其細或者極其扁的時候就可以看成一個二次函數了,也就是這時這樣算出來的誤差十分的小

  這個時候就可以直接用那個公式啦

  代碼的話大概長這樣

技術分享
 1 //這部分是二分逼近,esp是一個極小的值,但是不能太小不然的話會很慢
 2 double simpson(double l,double r,double hl,double hr)
 3 {
 4     double mid=(l+r)/2;
 5     double hmid=get_val(mid);
 6         //這裏調用一個別的什麽函數來得到mid的值
7 if ((abs(r-l)<=esp)||(abs(hl+hr-2*hmid)<=esp)) 8 return (r-l)*(hr+hl+4*hmid)/6; 9 return simpson(l,mid,hl,hmid)+simpson(mid,r,hmid,hr); 10 }
View Code

[待完善]關於辛普森公式的一點想法