Ex8_9.cpp
上传用户:wuzhousb
上传日期:2022-07-12
资源大小:380k
文件大小:1k
源码类别:

书籍源码

开发平台:

Visual C++

  1. //【例8.9】用虚函数来实现辛普生法求函数的定积分。在梯形法中是用直线来代替
  2. //曲边梯形的曲边,在辛普生法中是用抛物线来代替,区间必须为偶数n个相等区间。
  3. #include<iostream>
  4. #include<cmath>
  5. using namespace std;
  6. class Simpson{
  7. double Intevalue,a,b;//Intevalue积分值,a积分下限,b积分上限
  8. public:
  9. virtual double fun(double x)=0;//被积函数声明为纯虚函数
  10. Simpson(double ra=0,double rb=0){
  11. a=ra;
  12. b=rb;
  13. Intevalue=0;
  14. }
  15. void Integrate(){
  16. double dx;
  17. int i;
  18. dx=(b-a)/2000;
  19. Intevalue=fun(a)+fun(b);
  20. for(i=1;i<2000;i+=2)Intevalue+=4*fun(a+dx*i);
  21. for(i=2;i<2000;i+=2)Intevalue+=2*fun(a+dx*i);
  22. Intevalue*=dx/3;
  23. }
  24. void Print(){cout<<"积分值="<<Intevalue<<endl;}
  25. };
  26. class A:public Simpson{
  27. public:
  28. A(double ra,double rb):Simpson(ra,rb){};
  29. double fun(double x){return sin(x);}
  30. };
  31. class B:public Simpson{//B也可以说明为由A派生,更利于说明动态多态性
  32. public:
  33. B(double ra,double rb):Simpson(ra,rb){};
  34. double fun(double x){return exp(x);}
  35. };
  36. int main(){
  37. A a1(0.0,3.1415926535/2.0);
  38. Simpson *s=&a1;
  39. s->Integrate();//动态
  40. B b1(0.0,1.0);
  41. b1.Integrate();//静态
  42. s->Print();
  43. b1.Print();
  44. return 0;
  45. }