实验六-数值积分-数值分析-实验报告
位置: 首页 >文书 > 检讨书 > 文章内容

实验六-数值积分-数值分析-实验报告

2020-08-29 07:13:32 投稿作者: 点击:

 山 西 大 学 计 算 机 与 信 息 技 术 学 院 实

 验

 报

 告 姓

 名

 学号

 班级 08 计科 课程名称 计算方法 实验日期 2010 年 12 月 6 日 实验名称 实验六

 数值积分 成绩

  一、实验目的 利用复化梯形公式,复化辛普生公式和龙贝格数值积分公式计算a( )bxf x d的近似值。

 二、实验方法

 (1)

 将[a,b]区间 n 等分,记分点为 ,( , 0,1,..., )ib ax a ih h i nn    ,并在每个小区间[1,i ix x]上应用梯形公式

  11[ ( ) 2 ( ) ( )]2nn iihT f a f x f b  

  (2)在每个小区间[1,i ix x]上应用辛普生公式

  1 111 12[ ( ) 4 ( ) 2 ( ) ( )]6n nn iii ihS f a f x f x f b      

 式中,12ix为[1,i ix x]的中点,即1212iix x h  。

 (3)先用梯形公式计算 ( )/ 2*[ ( ) ( )]iT b a f a f b    ,然后,将求积区间(a,b)逐次折半的方法,令区间长度 ( )/ 2 ( 0,1,2....)ih b a i    。

  计算211/ 2* / 2* ( *( 1/ 2))nn nkT T h f a h k   ,式中 2 i n  。

  于是,得到辛普生公式2 2( )/3n n n nS T T T    。

 科特斯求积公式2 2( )/15n n n nC S S S   

  最后,得到龙贝格求积公式2 2( )/63n n n nR C C C   

  利用上述各式计算,直到相邻两次的积分结果之差满足精度要求。

  三、实验内容 利用复化梯形公式,复化辛普生公式和龙贝格数值积分公式计算

 221xxe xe d   和12041xdx  的近似值,要求误差为71*102 ,将计算结果与精度值比较,并对计算结果进行分析。

 四、实验程序

 #include"stdio.h" #include"math.h" #include"iostream.h" #include"iomanip.h"

 double

 f1(double x) {

 return x*exp(x); } double f2(double x) {

 return 4/(1+x*x); } //.............梯形公式.............................. double

 T(double a,double b,int n) {

  double x[20000];

 double h=(b-a)/n;

 for(int i=0;i<n;i++) {

  x[i]=a+i*h;

 }

 double m=0;

 for(i=1;i<=n-1;i++) {

  m=m+f1(x[i]);

 }

 return h/2*(f1(a)+2*m+f1(b)); } void teT()

 {

 int a=1,o=0;

 double q=T(1,2,a);

 double w=T(1,2,2*a);

 while(fabs(w-q)>0.00000005){

 o++;

 a=a*2;

  q=T(1,2,a);

  w=T(1,2,2*a);

 }

  printf("%d

  ",o);

 printf("T=%15.10f",T(1,2,2*a)); } double T1(double a,double b,int n) {

 double x[10000];

 double h=(b-a)/n;

 for(int i=0;i<n;i++){

  x[i]=a+i*h;

 }

 double m=0;

 for(i=1;i<=n-1;i++){

  m=m+f2(x[i]);

 }

  return h/2*(f2(a)+2*m+f2(b)); } void teT1() {

 int b=1,p=0;

 double s=T1(0,1,b);

 double d=T1(0,1,2*b);

 while(fabs(s-d)>0.00000005) {

  p++;

  b=b*2;

  s=T1(0,1,b);

  d=T1(0,1,2*b);

 }

 printf("\n%d

  ",p);

 printf("T1=%15.10f",T1(0,1,b)); } //......................辛普生公式........................................ double S(double a,double b,int n){

 double h=(b-a)/n;

  double s=f1(a)-f1(b);

 double x;

 x=a;

 for(int i=0;i<n;i++){

  x=x+h/2;

  s=s+4*f1(x);

  x=x+h/2;

  s=s+2*f1(x);

 }

 s=s*h/6;

 return s; } void teS(){

  int c=1,l=0;

  double g=S(1,2,c);

  double h=S(1,2,2*c);

 while(fabs(h-g)>0.00000005){

  l++;

  c=c*2;

  g=S(1,2,c);

  h=S(1,2,2*c);

 }

 printf("\n%d

  ",l);

 printf("S=%15.10f",S(1,2,c)); } double S1(double a,double b,int n){

 double h=(b-a)/n;

 double s=f2(a)-f2(b);

 double x;

 x=a;

 for(int i=0;i<n;i++){

  x=x+h/2;

  s=s+4*f2(x);

  x=x+h/2;

  s=s+2*f2(x);

 }

 s=s*h/6;

 return s; } void teS1(){

  int m=1,v=0;

 double j=S1(0,1,m);

 double k=S1(0,1,2*m);

 while(fabs(k-j)>0.00000005){

 v++;

  m=m*2;

  j=S1(0,1,m);

  k=S1(0,1,2*m);

 }

 printf("\n%d

  ",v);

 printf("S1=%15.10f\n",S1(0,1,m)); } //.................龙贝格公式........................... void

 L(double a,double b){

 double h=b-a;

 double t1=(f1(a)+f1(b))*h/2,t2;

 int k=1;

 double d=0;

 double r1=0,r2=1;

 double c1,c2;

 double s1=0,x,s2;

 while(1){

 if(fabs(r2-r1)<0.00000005)

  break ;

  s1=0;

 x=a+h/2;

 while(x<b){

  s1=s1+f1(x);

  x=x+h;

 }

 t2=t1/2+h/2*s1;

 s2=t2+1/3*(t2-t1);

 if(k==1){

  k=k+1;

  h=h/2;

  t1=t2;

  continue;

 }

  c2=s2+1/15*(s2-s1);

 if(k==2){

  c1=c2;

  k=k+1;

  h=h/2;

  t1=t2;s1=s2;

  continue;

 }

 r1=d;r2=c2+1/63*(c2-c1);

 if(k==3){

 d=r2;

  c1=c2;

  h=h/2;k=1;t1=t2;s1=s2;

  continue;

 }

 }

  printf("

 L=%15.10f\n",r2); } void main(){

  teT();

  teT1();

  teS();

 teS1();

 L(1,2); } 五、实验结果

  六、结果分析

 在对积分区间作同样分割或利用同样个数的函数值的条件下, 复化辛普生公式比复化梯形公式的计算精度高。

 在利用复合求积公式计算积分之前,必须给出适当的步长 b ahn 。步长太大,精度难以保证;步长太小,则会导致计算量的增加。而计算之前给出一个恰当的步长,往往非常困难,因此采用了变步长的方法——龙贝格算法。

猜你喜欢
推荐图文
毕业设计
  • 办公表格
    办公表格

    打开文本图片集摘要:我国经济快速的发展,各方面都取得了优异的成...

  • 谈判技巧
    谈判技巧

    从古至今,地图作为人类文明的产物,一直是人们认知现实世界、探索...