【数值分析】微分求积:复化梯形、复化辛浦生

本科课程参见:《软件学院那些课》

复化梯形

将积分区间[a,b]划分n等分,步长,求积节点在每个小区间上应用梯形公式

然后将它们累加求和,作为所求积分I的近似值.
【数值分析】微分求积:复化梯形、复化辛浦生_第1张图片
记     
式为复化梯形求积公式,下标n表示将区间n等分。

算法流程 

【数值分析】微分求积:复化梯形、复化辛浦生_第2张图片

算法代码

[cpp] view plain copy
  1. double f(double x){  
  2.   if(x==0) return 1;  
  3.   else return (sin(x)/x);  
  4. }  
  5.   
  6. double FuhuaTixing(int n,double a,double b){  
  7.   double h = (b-a)/n;  
  8.   double x = a;  
  9.   double s = 0;  
  10.   for(int k=0; k< n-1; k++){  
  11.     x += h;  
  12.     s += f(x);  
  13.   }  
  14.   double T = (f(a)+s*2+f(b))*h/2;  
  15.   return T;  
  16. }  
  17.   
  18. int main(){  
  19.   char ans='n';  
  20.   do{  
  21.     cout<<"请输入积分区间(a,b):"<<endl;  
  22.     double a;  
  23.     double b;  
  24.     cin>>a>>b;  
  25.     cout<<"请输入等分份数n: "<<endl;  
  26.     int n; cin>>n;  
  27.     cout<<"由复化梯形公式球的结果:"<<FuhuaTixing(n,a,b)<<endl;  
  28.     cout<<"是否要继续?(y/n)";  
  29.     cin>>ans;  
  30.   }while(ans == 'y');  
  31.   return 0;  
  32. }            

复化辛复生

将积分区间[a,b]划分n等分,记子区间 的中点为 在每个小区间上应用辛普森公式,则有
【数值分析】微分求积:复化梯形、复化辛浦生_第3张图片
其中
       
记                           
式为复化辛普森求积公式。

算法流程

【数值分析】微分求积:复化梯形、复化辛浦生_第4张图片

算法代码

[cpp] view plain copy
  1. double f(double x){  
  2.   if (x==0)  
  3.      return 1;  
  4.   else return (sin(x)/x);  
  5. }  
  6.   
  7. double Xinfusheng(double a,double b,int n){  
  8.   double h = (b-a)/n;  
  9.   double x = a+1/2*h;  
  10.   double s = 4*f(x);  
  11.   for(int k=1;k<n;k++){  
  12.     x += 1/2*h;  
  13.     s += 4*f(x);  
  14.     x += 1/2*h;  
  15.     s += 2*f(x);  
  16.   }  
  17.   double T=(f(a)+s+f(b))*h/6;  
  18.   return T;  
  19. }  
  20.   
  21. int main(){  
  22.   char ans='n';  
  23.   do{  
  24.     cout<<"请输入积分区间(a,b):"<<endl;  
  25.     double a;  
  26.     double b;  
  27.     cin>>a>>b;  
  28.     cout<<"请输入等分份数n: "<<endl;  
  29.     int n;  
  30.     cin>>n;  
  31.     cout<<"由复化梯形公式球的结果:"<<Xinfusheng(a,b,n)<<endl;  
  32.     cout<<"是否要继续?(y/n)";  
  33.     cin>>ans;  
  34.   }while(ans == 'y');  
  35.   return 0;  
  36. }     

实验过程原始记录

分别用复化梯形公式和复化辛浦生公式计算定积分
取n=2,4,8,16,精确解为0.9460831
【数值分析】微分求积:复化梯形、复化辛浦生_第5张图片

实验结果及分析

1、用复化梯形公式和复化辛甫生公式都能得到较为准确的结果,且等分份数越多,结果的精度越高,梯形公式虽然在等分16份时得到精度与等分4份时相同,但已经越来越接近精确解。辛甫生公式由于C++运算中双精度数值(double)只有7位有效数字的限制,增加等分份数时不容易看出其精度的增加。
2、比较两种方法运算的结果,复化辛甫生公式等分2份时实际要计算5个点的函数值,与复化梯形公式等分4份时计算量基本相同,但得到精度明显复化辛甫生公式要精确很多。
3、复化梯形公式和复化辛甫生公式对于光滑性较差的被积函数都能得到较为精确的结果,而且公式简单,十分利于编译简单的程序由计算机运算,因而得到广泛的应用。
4、实验中的主要误差来自于计算机浮点运算中的截余。

你可能感兴趣的:(【数值分析】微分求积:复化梯形、复化辛浦生)