假設被積函數為
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語言求積分