C程式設計案例(矩形法求定積分問題)
阿新 • • 發佈:2018-12-05
矩形法求定積分問題
程式碼實現:
#include<stdio.h>
#include<math.h>
float fsin(float x);
float func(float (*p)(float),float a,float b,int n);
int main(){
float a,b; //積分上下限
int n; //將積分割槽域劃分為n個格(n越大,精確度越高)
printf("請輸入積分下限、上限:");
scanf("%f %f",&a,&b);
printf("請輸入n:");
scanf ("%d",&n);
float result=func(fsin,a,b,n);
printf("積分結果為:%f\n",result);
return 0;
}
float func(float (*p)(float),float a,float b,int n){
float sum=0;
float dis=(a-b)/n;//n越大,精確度越高
float x=a;
for(int i=0;i<n;i++){
sum+=(*p)(x+(i-1)*dis+dis/2)*dis;
}
return sum;
}
float fsin(float x){
return sin(x);
}
程式碼註解:
- 求解定積分的原理其實和數學裡面極限的思想是一樣的,將積分割槽域分為很多的非常小的區域,這樣這些區域就可以近似的看成一個點,然後用這個區域的長度乘以它對應的這點的函式值,最後進行累加就可以解決。
- n的值越大,分的區域越多,精度越高。
- 矩形法:
- 同理,梯形法求積分:
- 第一個:
- 第 個: