C语言_用六种方法求定积分_第1页
C语言_用六种方法求定积分_第2页
C语言_用六种方法求定积分_第3页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言实验报告求定积分班级10信息与计算科学一班戴良伟学号 20107502211.描述问题, 梯形公式, simps on利用左矩形公式,中矩形公式,右矩形公式 公式,Gauss积分公式求解定积分。2.分析问题2.1定积分21.1定积分的定义定积分就是求函数f x在区间a,b中图线下包围的面积。即y 0,x a, x b, yx所包围的面积。这个图形称为曲边梯形,特例是曲边梯形。如下图:(图1)设一元函数y f x ,在区间a,b有定义。将区间a,b分成n个小区间a,Xo , xo,% ,为公2 . Xj,b。设 x Xi x 1,取区间 Xi中曲线上任意一点 记做f i,作和式:nlim

2、f i xini 1若记入为这些小区间中的最长者。当0时,若此和式的极限存在,则称这个和式是函数f x 在区间a,b上的定积分。记作: f x dxa其中称a为积分下限,b为积分上限,f x为被积函数,f x dx为被 积式,/为积分号。之所以称其为定积分,是因为它积分后得出的值是确定的,是一个数, 而不是一个函数。21.2定积分的几何意义 它是介于x轴、函数f(x)的图形及两条直线 x=a,x=b之间的各个部分 面积的代数和。在 x轴上方的面积取正号;在 x轴下方的面积取负号。如 图2.2言实现定积分计算的算法22.1利用复合梯形公式实现定积分的计算假设被积函数为f x,积分区间为a,b,把

3、区间a,b等分成n个小区间, 各个区间的长度为h,即h ba/n,称之为“步长”。根据定积分的定义及几 何意义,定积分就是求函数f x在区间a,b中图线下包围的面积。将积分区间n等分,各子区间的面积近似等于梯形的面积,面积的计算运用梯形公 式求解,再累加各区间的面积,所得的和近似等于被积函数的积分值,n越大,所得结果越精确。以上就是利用复合梯形公式实现定积分的计算的算法思 想。复合梯形公式:n 1Tn - f a 2 f Xi f b 22i i具体算法如下:算法一1:输入积分区间的端点值 a和b ;2:输入区间的等分个数n (要求n尽可能大,以保证程序运行结果有较高的精确度);3:计算步长h

4、 b a / n ;4:对累加和赋初值Tfa fb / 2 ;5:计算累加和n 1T f xii 16:算出积分值Tn T h ;7:输出积分近似值Tn,完毕。利用Smpson公式实现定积分的计算假设被积函数为f x,积分区间为a,b,把区间a,b等分成n个小区间, 各个区间的长度为h。在复合梯形公式的基础上,构造出一种加速计算积分的方 法。作为一种外推算法,它在不增加计算量的前提下提高了误差的精度。具体算法如下:算法二1 :输入积分上限b和下限a;2:输入区间的等分个数n (要求n尽可能大,以保证程序运行结果有较高的精确度);3:利用辛甫生公式:S n 4 T 2n T n /32,实现对定

5、积分的求解(其中 T 2n , T n均为梯形公式计算所得的结果,由此可见辛甫生公式是以梯形公式 为基础的);4:算出积分值Sn ;5:输出积分近似值Sn,完毕。123利用Guass公式实现定积分计算Guass型求积公式是构造高精度差值积分的最好方法之一。他是通过让节点和 积分系数待定让函数f(x)以此取i=0,1,2.n次多项式使其尽可能多的能够精确成立来求出积分节点和积分系数。高斯积分的代数精度是2n-1,而且是最高的。通常运用的是-1-+1的积分节点和积分系数,其他积分域是通过变换x=(b-a)t/2 +(a+b)/2 变换到-1至U 1之间积分。算法三1 :输入积分上限b和下限a;2:

6、利用Guass公式,求定积分4:算出积分值Sn ;5:输出积分近似值Sn,完毕。3. 程序的编写3.1程序一(左矩形公式)源程序#i nclude<stdio.h>#in clude<math.h>void mai n()double f(double x);/*f(x)为函数举例,即被积函数*/int i,n;/*n为区间等分的个数,应尽可能大*/double a,b,h,s;/*a为积分下限,b为积分上限,h为步长*/prin tf("积分下限 a:n");sca nf("%lf",&a);prin tf("

7、积分上限 b:n");sca nf("%lf",&b);printf(" 区间等分个数n :n");sca nf("%d",&n);h=(b-a)/n; /* 步长的计算*/ s=f(a)*h;for(i=1;i <n ;i+)s=s+f(a+i*h)*h;printf("函数 f(x)的积分值为 s=%10.6fn",s);/*以下为被积函数的定义,即函数举例*/double f(double x)double y;y=sqrt(4-x*x);return (y);程序一的编译运行

8、被积函数为f(x)=sqrt4-(x*x) 的情况先编译,再运行,屏幕显示及操作如下:输入0+回车输入2+回车输入1000+回车3.2程序二(中矩形公式)源程序#i nclude<stdio.h>#in clude<math.h>void mai n()double f(double x);/*f(x)为函数举例,即被积函数*/int i,n;/*n为区间等分的个数,应尽可能大*/double a,b,h,s;/*a为积分下限,b为积分上限,h为步长*/prin tf("积分下限 a:n");sca nf("%lf",&a

9、);prin tf("积分上限 b:n");sca nf("%lf",&b);printf("区间等分个数n :n");sca nf("%d",&n);h=(b-a)/n; /*步长的计算*/s=0.5*(f(a)+f(a+h)*h;for(i=1;i <n ;i+)s=s+0.5*(f(a+i*h)+f(a+(i+1)*h)*h;printf("函数 f(x)的积分值为 s=%10.6fn",s);/*以下为被积函数的定义,即函数举例*/double f(double x

10、)double y;y=sqrt(4-x*x);return (y);程序二的编译运行被积函数为f(x)=sqrt4-(x*x) 的情况先编译,再运行,屏幕显示及操作如下:输入0+回车输入2+回车输入1000+回车3.3程序三(右矩形公式)331源程序#i nclude<stdio.h>#in clude<math.h>void mai n()double f(double x);/*f(x)为函数举例,即被积函数*/int i,n;/*n为区间等分的个数,应尽可能大*/double a,b,h,s;/*a为积分下限,b为积分上限,h为步长*/prin tf("

11、;积分下限 a:n");sca nf("%lf",&a);prin tf("积分上限 b:n");sca nf("%lf",&b);printf("区间等分个数n :n");sca nf("%d",&n);h=(b-a)/n; /*步长的计算*/s=f(a+h)*h;for(i=1;i< n-1;i+)s=s+f(a+(i+1*h)*h;printf("函数 f(x)的积分值为 s=%10.6fn",s);/*以下为被积函数的定义,即函

12、数举例*/double f(double x)double y;y=sqrt(4-x*x);return (y);332程序三的编译运行被积函数为f(x)=sqrt4-(x*x) 的情况先编译,再运行,屏幕显示及操作如下:输入0+回车输入2+回车输入1000+回车3.4程序四(梯形公式)源程序#i nclude<stdio.h>#in clude<math.h>void mai n()double f(double x);/*f(x)为函数举例,即被积函数*/int i,n;/*n为区间等分的个数,应尽可能大*/double a,b,h,s;/*a为积分下限,b为积分上

13、限,h为步长*/prin tf("积分下限 a:n");sca nf("%lf",&a);prin tf("积分上限 b:n");sca nf("%lf",&b);printf("区间等分个数n :n");sca nf("%d",&n);h=(b-a)/n; /*步长的计算*/s=0.5*(f(a)+f(a+h)*h;for(i=1;i <n ;i+)s=s+0.5*(f(a+i*h)+f(a+(i+1)*h)*h;printf("函数

14、 f(x)的积分值为 s=%10.6fn",s);/*以下为被积函数的定义,即函数举例*/double f(double x)double y;y=sqrt(4-x*x);return (y);342程序四的编译运行被积函数为f(x)=sqrt4-(x*x) 的情况先编译,再运行,屏幕显示及操作如下:输入0+回车输入2+回车输入1000+回车3.5程序五(Simpson公式)源程序#i nclude<stdio.h>#in clude<math.h>void mai n()double T(double x,double y,i nt z);double a,

15、b,s;int n;prin tf("积分下限 a:n");sca nf("%lf",&a);prin tf("积分上限 b:n");sca nf("%lf",&b);printf("区间等分个数n :n");sca nf("%d",&n);s=(4*T(a,b,2* n)-T(a,b, n) )/3;/*利用辛甫生公式求解定积分*/printf("函数 f(x)的积分值为 s=%fn",s);/*以下为复合梯形公式的定义*/dou

16、ble T(double x,double y,i nt z)double h,T n;int i;double f(double t);h=(y-x)/z;Tn=(f(x)+f(y)/2;for(i=1;i<z;i+)Tn=T n+f(x+i*h);Tn=Tn *h;return (Tn);/*以下为被积函数的定义,即函数举例*/double f(double t)double s;s=sqrt(4-t*t);return (s);程序四的编译运行被积函数为f(x)=sqrt4-(x*x) 的情况先编译,再运行,屏幕显示及操作如下:输入0+回车输入2+回车输入1000+回车3.6程序六

17、(Guass公式)源程序#i nclude <stdio.h> #in elude <math.h>#defi ne N 3 float gassn tegral(float (*)(float),float,float,i nt);void mai n()float fun cti on_n ame(float);float a,b;printf(”请输入积分上限bn");sca nf("%f",&b);printf(”请输入积分下限an");sca nf("%f", &a);float an

18、s;an s=gassn tegral(fu nctio n_n ame,a,b,N);prin tf("a ns=%f",a ns);/高斯求积:代数精度为2n-1. -1-+1 之间(*fun c)(floatx), float a,float其 求丈 积系数列 表float gassn tegral(float b ,int n )/ 高斯点 及floatx11=0.0;float A11=2;floatx22=-0.5573503,0.5573503;float A22=1,1;floatx3 3=-0.7745967,0.0,0.7745967;float A3 3=0.555556,0.888889,0.555556;floatx44=0.3399810,-0.3399810,0.8611363,-0.8611363;floatA44=0.6521452,0.6521452,0.3478548,0.3478548;floatx55=0.0,0.5384693,-0.5384693,0.9061799,-0.9061799; floatA55=0.5688889,0.4786287,0.4786287,0.2369269,0.23692

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论