复合梯形法的递推算式

  在实际应用中,为了既能提高结果的精度,又使算法简便且易在计算机上实现,往往采用复合求积的方法。所谓复合求积就是在小区间上使用Newton-Cotes公式计算积分的近似值,然后对这些近似值求和,从而得到所求积分的近似值。由此得到的一些具有更大实用价值的数值求积公式统称为复合求积公式。

  设f(x)在区间[a,b]上有积分。

  则其k步积分递推为:T2k = 1/2T2k-1 + (b-a)∑2^(k-1)i=1 f(a + (2i - 1) (b -a )/2^k)  (k=1,2,3****)

  现有题目如下:对1/x [1,3]进行积分,要求误差小于10^-6.

 

  代码如下:

 1 int main() {
 2     double x = 0;
 3     double y = 2.0/3;
 4     for (int i = 1; abs((y - x)) > 3E-6; i++ ) {
 5         double tem = 0;
 6         x = y;
 7         for (int j = 1; j < pow(2, i - 1); j++) {
 8             tem += 1.0 / (1 + (2 * j - 1) * 2 / pow(2, i));
 9         }
10         
11         y = x / 2 + 2.0 / pow(2, i)*(tem);
12     }
13     std::cout << y;
14 }
View Code

 

posted @ 2017-11-13 12:20  望山海  阅读(1083)  评论(0编辑  收藏  举报