随笔-48  评论-259  文章-1  trackbacks-0

#include"iostream.h"
#include"math.h"

double c[10][10];

double f(double x)
{
  double sum=0;
  if(x==0) return 1;
  sum=sin(x)/x;
  return sum;
}
void initcotes(double c[][10])
{
  c[1][0]=c[1][1]=0.5;
  c[2][0]=c[2][2]=1.0/6.0;c[2][1]=2.0/3.0;
  c[3][0]=c[3][3]=1.0/8.0;c[3][1]=c[3][2]=3.0/8.0;
  c[4][0]=c[4][4]=7.0/90.0;c[4][1]=c[4][3]=16.0/45.0;c[4][2]=2.0/15.0;
  c[5][0]=c[4][5]=19.0/288.0;c[5][1]=c[5][4]=25.0/96.0;c[5][2]=c[5][3]=25.0/144.0;
}
void Trapezoid(double a,double b)
{
  cout<<"梯形公式的结果:"<<(b-a)*(f(a)+f(b))/2<<endl;
}
void MidRect(double a,double b)
{
  cout<<"中矩形公式的结果:"<<(b-a)*f((b+a)/2)<<endl;
}
void NewtonCotes(double a,double b)
{
  int n,k;double h;
  cout<<"请输入n的值:";
  cin>>n;
  h=(b-a)/double(n);
  double sum=0;
  for(k=0;k<=n;k++)
   sum+=c[n][k]*f(a+k*h);
  cout<<"牛顿-柯特斯公式的结果:"<<(b-a)*sum<<endl;
}
int STrapezoid(double a,double b)

  int n,k,q;double h;
  cout<<"1--复化梯形公式"<<endl;
  cout<<"2--复化辛普森求积公式"<<endl;
  cout<<"输入你想进行的操作:";
  cin>>q; 
  cout<<"请输入n的值:";
  cin>>n;
  h=(b-a)/double(n);
  double sum=0;
  sum+=(f(a)+f(b));
  for(k=1;k<=n-1;k++)  sum+=2*f(a+k*h);
 if(q==1)
 {
  cout<<"复化梯形公式的结果:"<<(h/2)*sum<<endl;
  return 1;
 }


  for(k=0;k<n;k++)
   sum+=4*f(a+(k+0.5)*h);
  cout<<"复化辛普森求积公式的结果:"<<(h/6)*sum<<endl;
  return 1;

}

void main()
{
  double a,b;
  int p;
  cout<<"请输入积分的下、上限:";
  cin>>a>>b;
  initcotes(c);
  while(1)
  {
    cout<<"0--退出"<<endl;
 cout<<"1--梯形公式"<<endl;
 cout<<"2--中矩形公式"<<endl;
 cout<<"3--牛顿柯特斯公式:"<<endl;
 cout<<"4--复化公式"<<endl;
 cout<<"输入你想进行的操作:";
 cin>>p;
 
 switch(p)
 {
 case 1:Trapezoid(a,b);
 case 2:MidRect(a,b);
 case 3:NewtonCotes(a,b);
    case 4:STrapezoid(a,b);
 }
 if(p==0)  break;
  }
}

posted on 2007-06-08 23:27 星梦情缘 阅读(2927) 评论(2)  编辑 收藏 引用 所属分类: 数据结构的所有实现程序

评论:
# re: 数值分析--数值积分公式 2007-12-05 10:50 |
顶!!!!!!!!!!! 太强了   回复  更多评论
  
# re: 数值分析--数值积分公式 2008-12-02 11:04 | kissi
好厉害  回复  更多评论
  

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理