3-自适应梯形求积公式

作者在 2008-05-10 21:07:24 发布以下内容

#include "stdio.h"
#include "conio.h"
#include "math.h"
#define EPS 1e-6

main()
{
    double s;
    double f(double);
    double AutoTrap(double(*)(double),double,double,double);
    s = AutoTrap(f , 0.0 , 1.0, EPS);
    getch();
}

double f(double x) { return  4/(1+x*x);} /* f(x)表达式 */

double AutoTrap(double(*f)(double),double a,double b,double eps)
{  /* a , b 为积分上、下限, eps 为绝对误差限 */
   int  n=1,k;
   double h;
   double T1,Tn,sum ;

   h= (b-a)/2; /* h为变步长 */
   Tn = h*( f(a) + f(b) );
   printf("T(\t%d) =\t%f",n,Tn);

   do{
         T1 = Tn;
         sum = 0.0 ;
         for( k =1 ; k<= n; k++)
           sum = sum + f( ( a+(2*k-1)*h ) ); /*区间【a,b】n等分,记分点为 x = Xk = a + k*h */

         Tn = (T1/2)+( h*sum );/* 复合梯形公式的转变 */

         n=n*2;
         h=h/2;
         printf("\nT(\t%d) =\t%f",n,Tn);

     } while( fabs(Tn - T1) > eps ); /* 误差不超过 1e-6 时输出,否则不输出 */

   return Tn;
}

 

大小: 994 B
版本: V1.0
出品: 本站原创
来源: 本地
语言: 简体中文
授权: 免费
默认分类 | 阅读 1010 次
文章评论,共0条
游客请输入验证码
文章分类
文章归档