用矩形法求函数的定积分(C 语言实现)
在本程序中,先分别定义了5个C 函数f1、f2、f3、f4、f5,用来代表5个不同的函数。
然后定义了一个求定积分的函数integral 。
现在介绍矩形法求函数定积分的数学思想。
设函数f (f )在区间[a,b]上连续,在(a,b)上可导,将[a,b]之间的长度等分成n 份(n 越大计算越精确)。
于是第f 块小矩形的面积为f f ,
f i =
f −f f f (f +f −f f
f ) 所有小矩形的面积之和为 ∑f f f
f =1
实际的定积分的值
∫f (f )f f d f =lim f →∞∑f f f
f =1 所以说n 值越大,计算越精确。
源代码如下:
#include<stdio.h>//矩形法求定积分的算法
#include<math.h>
#define N 1e6
double f1(double x)
{
double y;
y=1.0+x;
return y;
}
double f2(double x) {
double y;
y=2.0*x+3;
return y;
}
double f3(double x) {
double y;
y=exp(x)+1.0;
return y;
}
double f4(double x) {
double y;
y=pow(1.0+x,2);
return y;
}
double f5(double x) {
double y;
y=pow(x,3);
return y;
}
double integral(double a,double b,double (*fun)(double))
{
int i;
double d=(b-a)/N;
double sum=0;
for(i=1;i<=N;i++)
{
sum=sum+d*(*fun)(a+i*d);//定积分近似计算公式
}//fun是指向函数的指针,该指针所指向的函数带有一个double型的形参,//同时,该函数的返回值类型为double
return sum;
}
void main()
{
double S[5];
int j;
S[0]=integral(0,1,f1);//fun指向f1
S[1]=integral(0,1,f2);//fun指向f2
S[2]=integral(0,1,f3);//fun指向f3
S[3]=integral(0,1,f4);//fun指向f4
S[4]=integral(0,1,f5);//fun指向f5
printf("输出各个函数的积分值:\n");
for(j=0;j<5;j++)
{
printf("%lf\n",S[j]);
}
}
运行结果如图所示:
可以发现,计算值与理论值十分接近,当N取的足够大时,可以获得十分精确的值,但是运算次数也会增加,本函数的时间复杂度为O(n)。
从指针的用法上来讲,本程序使用了“指向函数的指针”。
一个函数的函数名,代表了这个函数的首地址,在主函数中,5次调用integral函数,实现了对5个不同的函数求积分。
integral函数包含了三个参数,前两个参数表示被积函数的上下限。
感谢下载!
欢迎您的下载,资料仅供参考。