C语言用六种方法求定积分.docx
- 文档编号:18149998
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:15
- 大小:126.98KB
C语言用六种方法求定积分.docx
《C语言用六种方法求定积分.docx》由会员分享,可在线阅读,更多相关《C语言用六种方法求定积分.docx(15页珍藏版)》请在冰点文库上搜索。
C语言用六种方法求定积分
C语言用六种方法求定积分
C语言实验报告
求定积分
班级10信息与计算科学一班
姓名戴良伟
学号2010750221
1.描述问题
利用?
左矩形公式,?
中矩形公式,?
右矩形公式,?
梯形公式,?
simpson公式,?
Gauss积分公式求解定积分。
2.分析问题
2.1定积分
21.1定积分的定义
定积分就是求函数在区间中图线下包围的面积。
即fxab,,,,,
所包围的面积。
这个图形称为曲边梯形,特例是曲yxaxbyfx,,,,0,,,,,
边梯形。
如下图:
(图1)
设一元函数,在区间内有定义。
将区间分成个小区nyfx,ab,ab,,,,,,,
,,xxx,x间。
设,取区间中曲线上任意一axxxxxxb,,,,,......,,,,,,,,,iii,1i00112i
点记做,作和式:
f,,,i
n,,limfixi,,,,,,,,,,n1,i,,
若记λ为这些小区间中的最长者。
当时,若此和式的极限存在,,,0
则称这个和式是函数在区间上的定积分。
fxab,,,,,
b记作:
fxdx,,,a
其中称为积分下限,为积分上限,为被积函数,为被afxfxdxb,,,,积式,?
为积分号。
之所以称其为定积分,是因为它积分后得出的值是确定的,是一个数,而不是一个函数。
[1]21.2定积分的几何意义
它是介于x轴、函数f(x)的图形及两条直线x=a,x=b之间的各个部分面积的代数和。
在x轴上方的面积取正号;在x轴下方的面积取负号。
如图
2.2言实现定积分计算的算法
22.1利用复合梯形公式实现定积分的计算
假设被积函数为,积分区间为,把区间等分成个小区间,nfxab,ab,,,,,,,各个区间的长度为,即,称之为“步长”。
根据定积分的定义及几hban,,/h,,
何意义,定积分就是求函数在区间中图线下包围的面积。
将积分fxab,,,,,
区间等分,各子区间的面积近似等于梯形的面积,面积的计算运用梯形公n
式求解,再累加各区间的面积,所得的和近似等于被积函数的积分值,越n
大,所得结果越精确。
以上就是利用复合梯形公式实现定积分的计算的算法思
想。
复合梯形公式:
n,1h,,[2]2Tfafxfb,,,,,,,,,,ni,,2,,i,1
具体算法如下:
算法一1:
输入积分区间的端点值和;ab
2:
输入区间的等分个数(要求尽可能大,以保证程序运行结果有较高nn
的精确度);
3:
计算步长;hban,,/,,
4:
对累加和赋初值;Tff,,/2,,ab
5:
计算累加和
n,1
Tfx,,,,ii,1
TTh,,6:
算出积分值;n
T7:
输出积分近似值,完毕。
n
1.2.2利用Smpson公式实现定积分的计算
假设被积函数为,积分区间为,把区间等分成n个小区间,fxab,ab,,,,,,,各个区间的长度为。
在复合梯形公式的基础上,构造出一种加速计算积分的方h
法。
作为一种外推算法,它在不增加计算量的前提下提高了误差的精度。
具体算法如下:
算法二1:
输入积分上限和下限a;b
2:
输入区间的等分个数n(要求n尽可能大,以保证程序运行结果有较高
的精确度);
[2]SnTnTn,,,42/33:
利用辛甫生公式:
,实现对定积分的求解(其中,,,,,,,,
,均为梯形公式计算所得的结果,由此可见辛甫生公式是以梯形公式Tn2Tn,,,,
为基础的);
S;4:
算出积分值n
S5:
输出积分近似值,完毕。
n
1.2.3利用Guass公式实现定积分计算
Guass型求积公式是构造高精度差值积分的最好方法之一。
他是通过让节点和
积分系数待定让函数f(x)以此取i=0,1,2....n次多项式使其尽可能多的能够精确成
立来求出积分节点和积分系数。
高斯积分的代数精度是2n-1,而且是最高的。
通
+1的积分节点和积分系数,其他积分域是通过变换x=(b-a)t/2常运用的是-1---
+(a+b)/2变换到-1到1之间积分。
算法三
1:
输入积分上限和下限;ab
2:
利用Guass公式,求定积分
S4:
算出积分值;n
S5:
输出积分近似值,完毕。
n
3.程序的编写
3.1程序一(左矩形公式)
3.1.1源程序
#include
{doublef(doublex);/*f(x)为函数举例,即被积函数*/inti,n;
/*n为区间等分的个数,应尽可能大*/doublea,b,h,s;/*a为积分下限,b为积分上限,h为步长*/printf("积分下限a:
\n");scanf("%lf",&a);printf("积分上限b:
\n");scanf("%lf",&b);printf("区间等分个数n:
\n");scanf("%d",&n);h=(b-a)/n;/*步长的计算*/
s=f(a)*h;
for(i=1;i {s=s+f(a+i*h)*h;} f(x)的积分值为s=%10.6f\n",s);printf("函数 } /*以下为被积函数的定义,即函数举例*/doublef(doublex){doubley; y=sqrt(4-x*x);return(y);} 3.1.2程序一的编译运行 被积函数为f(x)=sqrt4-(x*x)的情况先编译,再运行,屏幕显示及操作如下: 输入0+回车 输入2+回车 输入1000+回车 3.2程序二(中矩形公式) 3.2.1源程序 #include {doublef(doublex);/*f(x)为函数举例,即被积函数*/ inti,n; /*n为区间等分的个数,应尽可能大*/doublea,b,h,s; /*a为积分下限,b为积分上限,h为步长*/printf("积分下限a: \n"); scanf("%lf",&a);printf("积分上限b: \n"); scanf("%lf",&b);printf("区间等分个数n: \n");scanf("%d",&n); h=(b-a)/n;/*步长的计算*/ s=0.5*(f(a)+f(a+h))*h;for(i=1;i } printf("函数f(x)的积分值为s=%10.6f\n",s); } /*以下为被积函数的定义,即函数举例*/doublef(doublex){doubley; y=sqrt(4-x*x); return(y);} 3.2.2程序二的编译运行 被积函数为f(x)=sqrt4-(x*x)的情况先编译,再运行,屏幕显示及操作如下: 输入0+回车 输入2+回车 输入1000+回车 3.3程序三(右矩形公式) 3.3.1源程序 #include {doublef(doublex);/*f(x)为函数举例,即被积函数*/inti,n; /*n为区间等分的个数,应尽可能大*/doublea,b,h,s;/*a为积分下限,b为积分上限,h为步长*/printf("积分下限a: \n");scanf("%lf",&a);printf("积分上限b: \n");scanf("%lf",&b);printf("区间等分个数n: \n");scanf("%d",&n);h=(b-a)/n;/*步长的计算*/ s=f(a+h)*h; for(i=1;i printf("函数f(x)的积分值为s=%10.6f\n",s); } /*以下为被积函数的定义,即函数举例*/doublef(doublex){doubley; y=sqrt(4-x*x); return(y);} 3.3.2程序三的编译运行 被积函数为f(x)=sqrt4-(x*x)的情况先编译,再运行,屏幕显示及操作如下: 输入0+回车 输入2+回车 输入1000+回车 3.4程序四(梯形公式) 3.4.1源程序 #include voidmain() {doublef(doublex);/*f(x)为函数举例,即被积函数*/ inti,n; /*n为区间等分的个数,应尽可能大*/doublea,b,h,s; /*a为积分下限,b为积分上限,h为步长*/printf("积分下限a: \n"); scanf("%lf",&a);printf("积分上限b: \n"); scanf("%lf",&b);printf("区间等分个数n: \n");scanf("%d",&n); h=(b-a)/n;/*步长的计算*/ s=0.5*(f(a)+f(a+h))*h;for(i=1;i } printf("函数f(x)的积分值为s=%10.6f\n",s); } /*以下为被积函数的定义,即函数举例*/doublef(doublex){doubley; y=sqrt(4-x*x); return(y);} 3.4.2程序四的编译运行 被积函数为f(x)=sqrt4-(x*x)的情况先编译,再运行,屏幕显示及操作如下: 输入0+回车 输入2+回车 输入1000+回车 3.5程序五(Simpson公式) 3.5.1源程序 #include #include voidmain() {doubleT(doublex,doubley,intz); doublea,b,s; intn; printf("积分下限a: \n"); scanf("%lf",&a); printf("积分上限b: \n"); scanf("%lf",&b); printf("区间等分个数n: \n");scanf("%d",&n); s=(4*T(a,b,2*n)-T(a,b,n))/3; /*利用辛甫生公式求解定积分*/ printf("函数f(x)的积分值为s=%f\n",s);} /*以下为复合梯形公式的定义*/ doubleT(doublex,doubley,intz) {doubleh,Tn; inti; doublef(doublet); h=(y-x)/z; Tn=(f(x)+f(y))/2;for(i=1;i return(Tn); } /*以下为被积函数的定义,即函数举例*/doublef(doublet){doubles; s=sqrt(4-t*t);return(s);} 3.5.2程序四的编译运行 被积函数为f(x)=sqrt4-(x*x)的情况先编译,再运行,屏幕显示及操作如下: 输入0+回车 输入2+回车 输入1000+回车 3.6程序六(Guass公式) 3.6.1源程序 #include #include #defineN3 floatgass_integral(float(*)(float),float,float,int);voidmain() { floatfunction_name(float); floata,b; printf("请输入积分上限b\n"); scanf("%f",&b); printf("请输入积分下限a\n"); scanf("%f",&a); floatans; ans=gass_integral(function_name,a,b,N); printf("ans=%f",ans); } //高斯求积: 代数精度为2n-1.-1---+1之间 floatgass_integral(float(*func)(floatx),floata,floatb,intn){ //高斯点及其求积系数列表 ----------------------------------------------------------------------------------- -------- floatx1[1]={0.0};floatA1[1]={2}; floatx2[2]={-0.5573503,0.5573503};floatA2[2]={1,1}; floatx3[3]={-0.7745967,0.0,0.7745967};floatA3[3]={0.555556,0.888889,0.555556}; floatx4[4]={0.3399810,-0.3399810,0.8611363,-0.8611363}; floatA4[4]={0.6521452,0.6521452,0.3478548,0.3478548};floatx5[5]={0.0,0.5384693,-0.5384693,0.9061799,-0.9061799}; float A5[5]={0.5688889,0.4786287,0.4786287,0.2369269,0.2369269}; //--------------------------------------------------------------------------------- -------------------------------------------------float*p,*t; switch(n) {case1: p=x1;t=A1;break; case2: p=x2;t=A2;break; case3: p=x3;t=A3;break; case4: p=x4;t=A4;break; case5: p=x5;t=A5;break; default: printf("intputwrong! ");} floatg=0; for(inti=0;i {g+=(*func)((b-a)*p[i]/2+(a+b)/2)*t[i];}g*=(b-a)/2; returng; } floatfunction_name(floatx) {return(sqrt(4-x*x)); } 3.6.2程序四的编译运行 被积函数为f(x)=sqrt4-(x*x)的情况 先编译,再运行,屏幕显示及操作如下: 输入2+回车 输入0+回车 4误差分析 手工计算结果为: 3.156173.,左矩形公式误差: 0.39%,中矩形公式误差: 0.46%,右矩形公式误差: 0.52%,梯形公式误差: 0.46%,辛普森公式和高斯公式误差几乎等于0,六个程序运行结果对比,在计算相同的函数f(x)=sqrt(4-x*x)的定积分,Simpson公式和Guass公式比矩形和梯形公式更可行,更有效。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 用六种 方法 积分