加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

变步长梯形/辛普森积分公式C语言编程

(2011-09-27 13:12:45)
标签:

c语言

辛普森

变步长

梯形

it

分类: C/Cpp/Asm

#include"stdio.h"
#include "math.h"
#define PI 3.1415926525
#define E  1e-06

 
double f(double x)
{ double y;
  if (x==0.0)y=1;
  else y=sin(x)/x;
  return (y);
}


void CS_Trapezoid()
{ double a, b, h, t1, t,p, s,x;  int i, n=1;
  clrscr();
  puts("Change  step  Trapezoid \n\n");
  puts(" input a, b:");
  scanf("%lf%lf", &a, &b);
  h=b-a; t1=h*(f(a)+f(b))/2.0;  p=E+1.0;
   while(p>=E)
   {
     s=0.0;
     for(i=0;i<=n-1;i++)
     { x=a+(i+0.5)*h;
       s+=f(x);
      }
    t=(t1+h*s)/2.0;
    p=fabs(t1-t);
    t1=t; n=n+n; h=h/2.0;
   }
  printf("T=%.8lf     n=%d\n", t, n/2);
     getch();
    return;
}


void CS_Simpson()
{ double t1, t2, a, b, h, s1, s2, x,eps,p;   int i, n=1;
  clrscr();
  puts("Change  step  Simpson  \n\n");
   puts("input a, b:");
   scanf("%lf%lf",&a, &b);
  h=b-a;  t1=h*(f(a)+f(b))/2;
   s1=t1;  eps=E+1.0;
   while(eps>=E)
    {
     p=0.0;
     for(i=0;i<=n-1;i++)
      { x=a+(i+0.5)*h;
        p=p+f(x);
       }
     t2=(t1+h*p)/2.0;
     s2=(4.0*t2-t1)/3.0;
     eps=fabs(s2-s1);
     t1=t2;s1=s2;n=n+n;h=h/2.0;
    }
 printf("S=%.8lf   n=%d\n", s2, n/2);
     getch();
     return;
}


void  Trapezoid()
{ double a, b, h, s; int i,n;
  clrscr();
  puts("Trapezoid   \n\n");
  puts("input a, b, n:");
  scanf("%lf%lf%d", &a, &b, &n);
  h=fabs((b-a)/n);
  s=(f(a)+f(b))/2;
  for (i=1; i<n; i++)
    s+=f(a+i*h);
  s=s*h;
  printf("�(x)dx=%.8lf\n", 244,s);
  getch();
    return;
}


void Simpson()
{ double a, b, h, s, s1, s2;  int i, n;
  clrscr(); puts("Simpson   \n\n");
  puts("input a, b, n:");
  scanf("%lf%lf%d", &a, &b, &n);
  h=fabs((b-a)/n); s1=s2=0;
  s=f(a)-f(b);
  for (i=1; i<=n; i++)
  { s1+=f(a+h*i-h/2);
    s2+=f(a+h*i); }
  s+=4*s1+2*s2; s*=h/6;
  printf("�(x)dx=%.8lf\n", 244, s);
   getch();
  return;
}


void main()
{
  int c;
 while (1)
{ clrscr();
 puts("  Jifen:\n");
 puts(" 1. Trapezoid\n ");
 puts(" 2. Simpson \n");
 puts(" 3. Change step Trapezoid \n");
 puts(" 4. Change step Simpson\n ");
 puts(" 0. exit.\n");
 puts(" choice: ");
     c=getchar();
  switch(c)
    { case '1':   Trapezoid();break;
      case '2':   Simpson();break;
      case '3':   CS_Trapezoid();break;
      case '4':   CS_Simpson();  break;
      case '0':   clrscr(); exit(0);
      default:    break;
    }
  }
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有