C语言丨定积分的近似计算
作者:互联网
我们已经知道,定积分的几何意义是曲线和两条直线、与轴所围成的曲边梯形的面积,由此我们可以得出近似计算定积分的多种算法。下面分别介绍定积分的近似计算的三种方法:矩形法、梯形法、抛物线法。
目录
矩形法
几何意义:用窄条矩形的面积作为窄条曲边梯形面积的近似值,整体上用台阶形的面积作为曲边梯形面积的近似值。
左矩形法
数学原理:设在上连续,这时定积分存在。采取把区间等分的方法,即用将分成个长对象等的小区间,每个小区间的长为,在小区间上,用代替小区间上的函数值,有。
代码实现:
double Integral(double (*f)(double), double a, double b)//double (*f)(double)为定义的函数指针,使用函数指针可使本函数通用于任何函数的定积分计算
{
double s, h;
int n = 100, i;
s = (*f)(a);//第一个矩形的底s1=f(a)
h = (b - a) / n;//矩形的高为小区间的长度
for (i=1; i<n; i++)
{
s += (*f)(a + i * h);//累加第一个矩形的底至第n个矩形的底,相当于s=s1+...+sn
}
return s * h;//面积为s*h=(s1+...+sn)*h=(s1*h+...+sn*h)
}
右矩形法
数学原理:相应地,把左矩形法中代替一步改为用代替小区间上的函数值,有
代码实现:相应地,只需把初始条件s赋值为(*f)(b),并让循环从右端点开始加至左端点。
double Integral(double (*f)(double), double a, double b)//double (*f)(double)为定义的函数指针,使用函数指针可使本函数通用于任何函数的定积分计算
{
double s, h;
int n = 100, i;
s = (*f)(b);//第一个矩形的底s1=f(b)
h = (b - a) / n;//矩形的高为小区间的长度
for (i=1; i<n; i++)
{
s += (*f)(b - i * h);//累加第一个矩形的底至第n个矩形的底,相当于s=s1+...+sn
}
return s * h;//面积为s*h=(s1+...+sn)*h=(s1*h+...+sn*h)
}
可以证明,矩形法计算定积分的误差为。
梯形法
几何意义:和矩形法一样,将区间等分。曲线上的点记作。将曲线上的小弧段弧用直线段代替,也就是把窄条曲边梯形用窄条梯形代替。
数学原理:
显然,梯形法公式所得近似值就算是左矩形法公式和右矩形法公式所得两个近似值的平均值。
代码实现:
double Integral(double (*f)(double), double a, double b)//double (*f)(double)为定义的函数指针,使用函数指针可使本函数通用于任何函数的定积分计算
{
double s, h;
int n = 100, i;
s = ((*f)(a) + (*f)(b)) / 2;
h = (b - a) / n;//梯形的高为小区间的长度
for (i=1; i<n; i++)
{
s += (*f)(a + i * h);
}
return s * h;//面积为s*h=(s1+...+sn)*h=(s1*h+...+sn*h)
}
可以证明,梯形法计算定积分的误差为,因此比矩形法的误差更小。
抛物线法
几何意义:将曲线上的两个小弧段弧和弧合起来,用过三点的抛物线代替。
数学原理:经推导可得,以此抛物线为弧段的曲边、以为底的曲边梯形面积为。
取n为偶数,得到定积分的近似值为。
代码实现:
double Integral(double (*f)(double), double a, double b)//double (*f)(double)为定义的函数指针,使用函数指针可使本函数通用于任何函数的定积分计算
{
double s, h;
int n = 100, i;
s = (*f)(a) + (*f)(b);
h = (b - a) / n;
for (i=0; i<n-1; i+=2)
{
s += 4 * (*f)(a + h + 2 * i * h);
}
for (i=0; i<n-2; i+=2)
{
s += 2 * (*f)(a + 2 * h + 2 * i * h);
}
return s * (h / 3);
}
显然,因抛物线相较于矩形与梯形来说,与原曲线梯形的拟合度更高,用抛物线法计算定积分的误差将比矩形法与梯形法更小。
定积分的近似计算实质上采用的是微积分的重要思想:微元法。以上仅介绍了三种计算定积分的方法,感兴趣的朋友们可以自行研读微积分,寻求更多算法。
参考文献:
同济大学数学系 编,高等数学第七版上册,高等教育出版社,P229-231.
标签:double,近似计算,梯形,C语言,积分,曲边,函数指针,矩形 来源: https://blog.csdn.net/weixin_60921752/article/details/121901096