设为首页 加入收藏

TOP

C语言实现定积分求解方法(二)
2013-09-24 09:20:37 来源: 作者: 【 】 浏览:434
Tags:语言 实现 积分 求解 方法

 

  /*辛普生公式求定积分,公式为:S[n]=(4*T[2*n]-T[n])/3,其中T[2n],T[n]为梯形公式计算结果*/

  double Simposn(double down, double up, int n)

  {

  double s;

  /*辛普生公式*/

  s = (4*T(down, up, 2*n) - T(down, up, n))/3;

  return s;

  }

  /*高斯公式求定积分*/

  double Gass(double (*func)(double x), double a, double b, int n)

  {

  int i = 0;

  //高斯点及其求积系数列表

  float x1 ={0.0};

  float A1 ={2};

  float x2 ={-0.5573503,0.5573503};

  float A2 ={1,1};

  float x3 ={-0.7745967,0.0,0.7745967};

  float A3 ={0.555556,0.888889,0.555556};

  float x4 ={0.3399810,-0.3399810,0.8611363,-0.8611363};

  float A4 ={0.6521452,0.6521452,0.3478548,0.3478548};

  float x5 ={0.0,0.5384693,-0.5384693,0.9061799,-0.9061799};

  float A5 ={0.5688889,0.4786287,0.4786287,0.2369269,0.2369269};

  float *p, *t;

  switch (n)

  {

  case 1:

  p = x1;

  t = A1;

  break;

  case 2:

  p = x2;

  t = A2;

  break;

  case 3:

  p = x3;

  t = A3;

  break;

  case 4:

  p = x4;

  t = A4;

  break;

  case 5:

  p = x5;

  t = A5;

  break;

  default :

  printf("intput wrong!");

  }

  float g = 0;

  for (i=0; i<n; i++)

  {

  g += (*func)((b-a)*p[i]/2+(a+b)/2)*t[i];

  }

  g *= (b-a)/2;

  return g;

  }

  int main(int argc, char *argv[])

  {

  printf("随机点法积分值%f\n", Darts(10000));

  double down, up;

  int n;

  double sum = 0;

  printf("积分下限:\n");

  scanf("%lf", &down);

  printf("积分上限:\n");

  scanf("%lf", &up);

  printf("分隔数目:\n");

  scanf("%d", &n);

  sum = LeftRect(down, up, n);

  printf("左矩形法积分值为:%f\n", sum);

  sum = Trape(down, up, n);

  printf("梯形公式积分值为:%f\n", sum);

  sum = Simposn(down, up, n);

  printf("辛普生公式积分值为:%f\n", sum);

  sum = Gass(fun, down, up, N);

  printf("高斯公式积分值为:%f\n", sum);

  return 0;

  }

      

首页 上一页 1 2 3 4 5 下一页 尾页 2/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C/C++中如何精确计时 下一篇C语言枚举类型enum

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: