c语言计算定积分有几种方法,C语言用6种方法求定积分.doc

C语言用6种方法求定积分

描述问题

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

分析问题

2.1定积分

21.1定积分的定义

定积分就是求函数在区间中图线下包围的面积。即所包围的面积。这个图形称为曲边梯形,特例是曲边梯形。

(图1)

设一元函数,在区间内有定义。将区间分成个小区间。设,取区间中曲线上任意一点记做,和式

若记λ为这些小区间中的最长者。当时,若此和式的极限存在,则称这个和式是函数 在区间上的定积分。

记:  其中称为积分下限,为积分上限,为被积函数, 为被积式,∫ 为积分号。

之所以称其为定积分,是因为它积分后得出的值是确定的,是一个而不是一个函数。x轴、函数f(x)的图形及两条直线x=a,x=bx轴上方的面积取正号;在x轴下方的面积取负号。如图

2.2言实现定积分计算的算法

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

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

复合梯形公式:

[2]

具体算法如下:

算法一

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

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

3:计算步长;

4:对累加和赋初值;

5:计算累加和

6:算出积分值;

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

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

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

具体算法如下:

算法二

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

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

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

4:算出积分值;

5:输出积分近似值,完毕。

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

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

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

4:算出积分值;

5:输出积分近似值,完毕。

程序的编写

3.1程序一(左矩形公式)

3.1.1源程序

#include

#include

void main()

{double f(double x);

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

int i,n;

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

double a,b,h,;

/*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; /*步长的计算*/for(i=1;i

{s=s+f(a+i*h)*h;

}

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

}

/*以下为被积函数的定义,即函数举例*/

double f(double x)

{double y;

y=;

return (y);}

3.1.2程序一的编译运行

被积函数为f(x)=sqrt4-(x*x)的情况

先编译,再运行,屏幕显示及操作如下:

输入0+回车

输入2+回车

输入1000+回车

3.2程序二(中矩形公式)

3.2.1源程序

#include

#include

void main()

{double f(double x);

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

int i,n;

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

double a,b,h,;

/*a为积分下限,b为积分上限,h为步长*/

printf(" a:\n");

scanf("%lf",&a);

printf("积分上限 b:\n");

scanf

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值