- 21
- 0
- 约3.2千字
- 约 4页
- 2017-12-20 发布于河南
- 举报
Exp22_继承与多态(二)
实验 继承与多态(二)
一、实验目的
实验内容
梯形法(ladder)积分近似计算公式为:
辛普生法(simpson)积分近似计算公式(n为偶数)为:
被积函数用派生类引入,被积函数定义为纯虚函数。
基类(integer)成员数据包括:积分上下限b和a;分区数n;步长step=(b-a)/n,积分值result。定义积分函数integerate()为虚函数,它只显示提示信息。
派生的矩形法类(rectangle)重定义integerate(),采用矩形法作积分运算。
派生的梯形法类(ladder)和辛普生法(simpson)类似。
请编程,用三种方法对下列被积函数
sin(x),下限为0.0和上限为π/2;
exp(x),下限为0.0和上限为1.0;
4.0/(1+x*x),下限为0.0和上限为1.0。
进行定积分计算,并比较积分精度。
#includeiostream
#includecmath
const double pi=3.14;
using namespace std;
class integer{
double a;
double b;
int n;
double step;
double result;
public:
double Geta(){return a;}
double Getb(){return b;}
double Getstep(){return step;}
int Getn(){return n;}
double Getresult(){return result;}
integer(double ra=0.0,double rb=0.0,int rn=0){
a=ra;
b=rb;
n=rn;
step=(b-a)/n;
result=0.0;
}
virtual double fun(double x)=0;
virtual void integerate(){cout进行定积分计算endl;}
};
class rectangle:public integer{
public:
rectangle(double ra,double rb,int rn):integer(ra,rb,rn){};
void integerate();
};
void rectangle::integerate(){
int i,j=Getn();
double Result=Getresult();
double dx=Getstep(),A=Geta(),B=Getb();
for(i=0;ij;i++)
Result+=fun(A+dx*i);
Result*=dx;
integer::integerate();
cout用矩形法进行定积分计算的值为Resultendl;
}
class ladder:public integer{
public:
ladder(double ra,double rb,int rn):integer(ra,rb,rn){};
void integerate();
};
void ladder::integerate(){
int i,j=Getn();
double Result=Getresult();
double dx=Getstep(),A=Geta(),B=Getb();
Result+=fun(A);
Result+=fun(B);
for(i=1;ij;i++)
Result+=2*fun(A+dx*i);
Result*=dx/2;
integer::integerate();
cout用梯形法进行定积分计算的值为Resultendl;
}
class simpson:public integer{
public:
simpson(double ra,double rb,int rn):integer(ra,rb,rn){};
void integerate();
};
void simpson::integerate(){
int i,j=Getn();
double Result=Getresult();
double dx=Getstep(),A=Geta(),B=Getb();
Result+=fun(A);
Result+=fun(B);
for(i=1;ij;i+=2)
Result+=4*fun(A+dx*i);
for(i=2;ij;i+=2)
Result+=2*fun(A+dx*i);
Result*=dx/3;
integer::integerate();
cout用辛普生法进行定积分
原创力文档

文档评论(0)