假设被积函数为
?
?
f
x
,积分区间为
?
?
,
a
b
,把区间
?
?
,
a
b
等分成
n
个小区间,
各个区间的长度为
h
,即
?
?
/
h
b
a
n
?
?
,称之为“步长”
。根据定积分的定义及几
何意义,定积分就是求函数
?
?
f
x
在区间
?
?
,
a
b
中图线下包围的面积。将积分
区间
n
等分,各子区间的面积近似等于梯形的面积,面积的计算运用梯形公
式求解,再累加各区间的面积,所得的和近似等于被积函数的积分值,
n
越
大,所得结果越精确。以上就是利用复合梯形公式实现定积分的计算的算法思
想。
复合梯形公式:
假设被积函数为f(x),积分区间为[a,b] ,把区间[a,b]等分成n个小区间,各个区间的长度为step,即step=(b-a)/n,称之为“步长”。根据定积分的定义及几何意义,定积分就是求函数f(x)在区间[a,b]中图线下包围的面积。将积分区间n等分,各子区间的面积近似等于梯形的面积,面积的计算运用梯形公式求解,再累加各区间的面积,所得的和近似等于被积函数的积分值n越大,所得结果越精确。以上就是利用复合梯形公式实现定积分的计算的算法思想。
复合梯形公式:
具体源代码如下:
1 #include <math.h>
2 #include <stdio.h>
3
4 double integral(double(*fun)(double x), double a, double b, int n)
5 {
6 double sum,step,result;
7 int i;
8 sum=(fun(a)+fun(b))/2;
9 step=(b-a)/n; /*积分步长*/
10 for(i=1;i<n;i++)
11 sum=sum+fun(a+i*step);
12 result=sum*step;
13 return result;/*返回积分值*/
14 }
15
16 double function(double x)
17 {
18 return (x*sin(x)); /*修改此处可以改变被积函数*/
19 }
20
21 void main()
22 {
23 double result;
24 result=integral(function,1.0,2.0,150);/*修改此处可以改变积分上下限和步长*/
25 printf("result=%f\n",result);
26 }
注:double(*fun)(double x),定义函数指针
参考:用C语言求积分