c语言用六种方法求定积分

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言实验报告

求定积分

班级10信息与计算科学一班姓名戴良伟

学号 21

1.

描述问题 利用①左矩形公式,②中矩形公式,③右矩形公式 ,④梯形公式,⑤simpson 公式,⑥Gauss 积分公式求解定积分。

2. 分析问题

定积分

定积分的定义

定积分就是求函数()f x 在区间[],a b 中图线下包围的面积。即()0,,,y x a x b y f x ====所包围的面积。这个图形称为曲边梯形,特例是曲边梯形。如下图:

(图1)

设一元函数()y f x =,在区间[],a b 内有定义。将区间[],a b 分成n 个小区间[][][][]00112,,,,,......,i a x x x x x x b 。设1i i i x x x -∆=-,取区间i x ∆中曲线上任意一点记做()i f ξ,作和式:

()1lim n n i f i xi ξ→+∞=⎛⎫∆ ⎪⎝⎭

∑ 若记λ为这些小区间中的最长者。当0λ→时,若此和式的极限存在,则称这个和式是函数()f x 在区间[],a b 上的定积分。

记作:()b

a f x dx ⎰ 其中称a 为积分下限,

b 为积分上限,()f x 为被积函数,()f x dx 为被积式,∫ 为积分号。

之所以称其为定积分,是因为它积分后得出的值是确定的,是一个数,而不是一个函数。

定积分的几何意义[1]

它是介于x 轴、函数f(x)的图形及两条直线x=a ,x=b 之间的各个部分面积的代数和。在x 轴上方的面积取正号;在x 轴下方的面积取负号。如图

言实现定积分计算的算法

利用复合梯形公式实现定积分的计算

假设被积函数为()f x ,积分区间为[],a b ,把区间[],a b 等分成n 个小区间,各个区间的长度为h ,即()/h b a n =-,称之为“步长”。根据定积分的定义及几何意义,定积分就是求函数()f x 在区间[],a b 中图线下包围的面积。将积分区间n 等分,各子区间的面积近似等于梯形的面积,面积的计算运用梯形公式求解,再累加各区间的面积,所得的和近似等于被积函数的积分值,n 越大,所得结果越精确。以上就是利用复合梯形公式实现定积分的计算的算法思想。

复合梯形公式:

()()()1122n n i i h T f a f x f b -=⎛⎫=++ ⎪⎝⎭

∑[2] 具体算法如下:

算法一

1:输入积分区间的端点值a 和b ;

2:输入区间的等分个数n (要求n 尽可能大,以保证程序运行结果有较高的精确度);

3:计算步长()/h b a n =-;

4:对累加和赋初值()/2a b T f f =-;

5:计算累加和

()1

1n i i T f x -==∑

6:算出积分值n T T h =⨯;

7:输出积分近似值n T ,完毕。

1.2.2利用Smpson 公式实现定积分的计算

假设被积函数为()f x ,积分区间为[],a b ,把区间[],a b 等分成n 个小区间,各个区间的长度为h 。在复合梯形公式的基础上,构造出一种加速计算积分的方法。作为一种外推算法, 它在不增加计算量的前提下提高了误差的精度。 具体算法如下:

算法二

1:输入积分上限b 和下限a ;

2:输入区间的等分个数n (要求n 尽可能大,以保证程序运行结果有较高的精确度);

3:利用辛甫生公式:[][][]()42/3S n T n T n =⨯-[2],实现对定积分的求解(其中[]2T n ,[]T n 均为梯形公式计算所得的结果,由此可见辛甫生公式是以梯形公式为基础的);

4:算出积分值S n ;

5:输出积分近似值S

,完毕。

n

利用Guass公式实现定积分计算

Guass型求积公式是构造高精度差值积分的最好方法之一。他是通过让节点和积分系数待定让函数f(x)以此取i=0,1,2....n次多项式使其尽可能多的能够精确成立来求出积分节点和积分系数。高斯积分的代数精度是2n-1,而且是最高的。通常运用的是-1---+1的积分节点和积分系数,其他积分域是通过变换x=(b-a)t/2 +(a+b)/2 变换到-1到1之间积分。

算法三

1:输入积分上限b和下限a;

2:利用Guass公式,求定积分

4:算出积分值S

n

5:输出积分近似值S

,完毕。

n

3.程序的编写

程序一(左矩形公式)

源程序

#include<>

#include<>

void main()

{double f(double x);

/*f(x)为函数举例,即被积函数*/

int i,n;

/*n为区间等分的个数,应尽可能大*/

double a,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;

}

printf("函数 f(x) 的积分值为 s=%\n",s);

相关文档
最新文档