C中曲线下的面积

让我们面对现实吧,进行积分并不总是很有趣,但是编码却很有趣。 随着微积分课程中对集成的需求的增加,我决定应用我在C语言中学到的知识来提出一个可以为我集成的程序!

曲线下的面积可以通过在间隔之间取该曲线的函数的确定积分来获得。 由于不能使用C直接集成函数,因此必须使用梯形规则,该规则将曲线下的面积分成多个梯形。 然后,计算每个梯形的面积,并对所有单个面积求和,得出曲线下的总面积,即定积分的值。

我将问题分为三个部分以获得解决方案。 首先,我需要在不同的变量处获得多项式的值。 其次,我需要能够计算出梯形的面积,最后,我需要在指定间隔内将曲线下所有梯形的面积相加。

这似乎很多,但是当将其分解成几部分时,就会降低复杂性。

第1部分:计算多项式

要获得梯形的长度(f(x0),f(x1),…),我们需要获得函数的值x0,x1 …,如下图所示。

为此,应采用多项式的公式。

f(x)=ax²+ bx + c

其中a,b和c的值将由用户输入。 这在C中看起来像:

  fx = a * pow(x,2)+ b * x + c; 

第2部分:梯形区域

我们首先将曲线下的are划分为梯形,其中梯形的面积可以计算为:

A =(fx1 + fx0)(x6-x0)/ 2

x6代表区间的上限,x0代表区间的下限。 就C而言:

  area_trap =(fx1 + fx2)*(x_high-x_low)/ 2; 

第3部分:所有梯形面积的总和

用户将n的值指定为将曲线分成梯形的分区数。 嵌套步骤是计算每个梯形的宽度(即间隔)。 然后,我们使用第2部分中的函数来计算曲线下每个梯形的面积,并将它们加起来。 for循环非常适合此操作! 别忘了,随着曲线的前进,每次迭代都需要更新x_high和x_low的值。 在C中将是:

 间隔=(x_high-x_low)/份; 
for(int k = 0; k <parts; k ++){
x1 =间隔* k + x_low;
x2 =间隔*(k + 1)+ x_low;
y1 = compute_polynomial(a,b,c,x1);
y2 = compute_polynomial(a,b,c,x2);
面积+ =梯形面积(x1,x2,y1,y2);
}

编译完函数f(x)=2x²+ 3x + 5的代码后,在1到9之间的间隔中有500个分区-曲线下的面积为645.33,可以看到!

对于那些想要自己进行测试的人,最终的代码是:

  #include <stdio.h 
#include
  //函数声明 
  double compute_polynomial(double,double,double,double); 
双梯形区域(double,double,double,double);
double auc_polynomial(double,double,double,int,double,double);
  int main(void){ 
双a,b,c,x_low,x_high,x1,x2;
int分区;

printf(“输入三个多项式系数:”); //要求用户输入
scanf(“%lf%lf%lf”,&a,&b,&c);

printf(“ Enter x interval:”);
scanf(“%lf%lf”,&x_low,&x_high);

printf(“输入分区数:”);
scanf(“%d”,&partitions);

//打印出返回最终结果的函数
printf(“ AUC =%.2lf”,auc_polynomial(a,b,c,partitions,x_low,x_high));

返回0;
}
  //函数定义 
  double compute_polynomial(double a,double b,double c,double x){ 
双fx;
fx = a * pow(x,2)+ b * x + c;
返回fx;
}
双梯形区域(双x_low,双x_high,双fx1,双fx2){
double area_trap;
fx1 = fabs(fx1);
fx2 = fabs(fx2);
area_trap =(fx1 + fx2)*(x_high-x_low)/ 2;
返回area_trap;

}
double auc_polynomial(double a,double b,double c,int parts,double x_low,double x_high){
双倍x1,x2,y1,y2,间隔,区域= 0;
间隔=(x_high-x_low)/份;
for(int k = 0; k <parts; k ++){
x1 =间隔* k + x_low;
x2 =间隔*(k + 1)+ x_low;
y1 = compute_polynomial(a,b,c,x1);
y2 = compute_polynomial(a,b,c,x2);
面积+ =梯形面积(x1,x2,y1,y2);
}
返回区域;
}