首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

这是关于用变步长辛普生积分的c++代码,该如何处理

2014-01-01 
这是关于用变步长辛普生积分的c++代码#includeiostream.h#includemath.hclass F{public:virtual doubl

这是关于用变步长辛普生积分的c++代码
#include<iostream.h>
#include<math.h>
class F
{
public:
virtual double operator ()(double x)const=0;
};
class Integral
{
public:
virtual double operator ()(double a,double b,double eps) const=0;
};
class simpson:public Integral
{
public:
simpson(const F&ff):f(ff)
{}
virtual double operator()(double a,double b,double exps) const;
private:
const F&f;
};
double simpson::operator()(double a,double b,double exps) const
{
int done(0);
int n;
double h,Tn,T2n,In,I2n;
n=1;
h=b-a;
Tn=h*(f(a)+f(b))/2.0;
In=Tn;
while(!done)
{
double temp(0.0);
for(int k=0;k<=n-1;k++)
{
double x=a+(k+0.5)*h;
temp+=f(x);
}
T2n=(Tn+h*temp)/2.0;
I2n=(4.0*T2n-Tn)/3.0;
if(fabs(I2n-In)<exps)
done=1;
else
{
Tn=T2n;
n*=2;
h/=2;
In=I2n;
}
}
return I2n;
}

class Function:public F
{
public:
virtual double operator()(double x) const
{
return log(1.0+x)/(1.0+x*x);
}
};
void main()
{
Function f;
simpson simp(f);
cout<<simp(0,2,1E-7)<<endl;
}



题目为对log(1+x)/(1+x^2)的1到2上的积分;
请大家讨论一辛普生积分到底怎么回事,求大神分析 C++
[解决办法]

#include<iostream.h> 

  #include"ff.h" 

  #include"xinpusheng.h" 

  void main() //主函数 

  { 

  cout<<"分别输入函数的下限,上限以及划分的区间个数n "<<endl; 

  double a,b; 

  int n; 

  cin>>a>>b>>n; //输入数据 

  double intesum1=integrals(a,b,n,f1),intesum2=integrals(a,b,n,f2); 

  cout<<"用辛普生法: "<<endl; 

  cout<<"f1从"<<a<<"到"<<b<<"的积分约为"<<intesum1<<endl;//输出结果 

  cout<<"f2从"<<a<<"到"<<b<<"的积分约为"<<intesum2<<endl; 

  }

热点排行