積分分為兩種,數(shù)值積分,公式積分。
成都創(chuàng)新互聯(lián)公司是一家以成都網(wǎng)站建設(shè)公司、網(wǎng)頁設(shè)計、品牌設(shè)計、軟件運維、成都網(wǎng)站推廣、小程序App開發(fā)等移動開發(fā)為一體互聯(lián)網(wǎng)公司。已累計為成都自上料攪拌車等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開發(fā)服務(wù)。
公式積分:部分函數(shù)可以直接用公式求得其不定積分函數(shù)。C語言中可以直接用積分公式寫出其積分函數(shù)。
數(shù)值積分:按照積分的定義,設(shè)置積分范圍的步長,用梯形面積累加求得其積分。
以【f(x)=x*sin(x) 從1到2的積分】為例:
#include?math.h
#include?stdio.h
double?integral(double(*fun)(double?x),double?a,double?b,int,n){
double?s,h,y;
int?i;
s=(fun(a)+fun(b))/2;
h=(b-a)/n;?/*積分步長*/
for(i=1;in;i++)
s=s+fun(a+i*h);
y=s*h;
return?y;/*返回積分值*/
}
double?f(double?x){
return(x*sinx)??/*修改此處可以改變被積函數(shù)*/
}
int?main(){
double?y;
y=integral(f,1.0,2.0,150);/*修改此處可以改變積分上下限和步數(shù),步長=(上限-下限)/步數(shù)*/
printf("y=%f\n",y);
return?0;
}
對于一重定積分來說其求解可以使用梯形法進行求解,計算公式如下所示:
其中,f(x)為被積函數(shù),為橫坐標的兩點間的間隔,越小,則計算出的結(jié)果越精確。
對于求解此類問題可以使用C語言中的回調(diào)函數(shù)編寫通用的計算函數(shù),代碼如下:
#include?stdio.h
#include?stdlib.h
#includemath.h
//功能:返回f(x)在積分區(qū)間[a,b]的值
//參數(shù):FunCallBack?指向用于計算f(x)的函數(shù)
//??????a??積分區(qū)間的起始值
//??????b??積分區(qū)間的結(jié)束值
//??????dx?橫坐標的間隔數(shù),越小計算結(jié)果越準確
double?Calculate(double?(*FunCallBack)(double?x),
double?a,double?b,double?dx)
{
double?doui;
double?total?=?0;????????//保存最后的計算結(jié)果
for?(doui?=?a;?doui?=?b;?doui?+=?dx)
{
total?+=?FunCallBack(doui)*dx;
}
return?total;
}
double?f2(double?x)
{
return?x*x;
}
double?f(double?x)
{
return?x;
}
double?f3(double?x)
{
return?x*x*x?;
}
int?main()
{
double?total;
total?=?(Calculate(f,?2,?3,?0.000001));
printf("total?=?%lf\n",?total);
total?=?(Calculate(f2,?2,?3,?0.000001));
printf("total?=?%lf\n",?total);
total?=?(Calculate(f3,?2,?3,?0.000001));
printf("total?=?%lf\n",?total);
return?0?;
}
其中,函數(shù)f,f2,f3為自行編寫的關(guān)于x的被積函數(shù)。
運行結(jié)果:
total?=?2.500000
total?=?6.333331
total?=?16.249991
把積分算式算出來,然后用C寫。
比如[a,b]的積分上限和下限,對x積分,就是x^2/2, 代入a,b