求一元函数定积分 分数 15 作者 李军 单位 陕西理工大学 一元函数f(x)在区间[a,b]上定积分∫ a b f(x)dx的几何意义是被积函数与横坐标轴以及直线x=a和直线x=b围成的曲边形的面积。依据几何意义求定积分的方法是将这个区域按x轴方向等分成若干个细小的条状区域,每个小区域近似于一个梯形(如图所示),计算出所有小梯形面积之和就可计算出区域面积的近似值。区间划分的越细求得的结果越精确。 ch6-8.png 现在要求用梯形法编写一个求一元定积分的函数,调用该函数求解以下三个函数在给定区间的定积分。 (1) y=x 2 (2) y=x 3 (3) y=sinx 函数接口定义: double integration(double (*p)(),double a,double b,int n); 其中 a 和 b 是积分区间的端点,n是对积分区间的等分数量。 p 是一个指向函数的指针。
时间: 2024-02-18 20:03:57 浏览: 126
好的,以下是求一元定积分的梯形法函数代码:
```c++
double integration(double (*p)(), double a, double b, int n) {
double h = (b - a) / n; // 计算每个小梯形的宽度
double sum = 0.0;
for (int i = 0; i <= n; i++) {
double x = a + i * h; // 计算每个小梯形的左侧横坐标
double y = p(x); // 计算每个小梯形的高度(即被积函数在该横坐标处的函数值)
if (i == 0 || i == n) { // 如果是第一个或最后一个小梯形,则其对应的面积为梯形面积的一半
sum += y * h / 2;
} else { // 其他小梯形对应的面积为梯形面积
sum += y * h;
}
}
return sum;
}
```
其中 `p` 是指向被积函数的指针,`a` 和 `b` 是积分区间的端点,`n` 是对积分区间的等分数量。该函数返回积分的近似值。
接下来我们调用该函数求解给定的三个函数在给定区间的定积分:
```c++
#include <iostream>
#include <cmath>
double f1(double x) {
return x * x;
}
double f2(double x) {
return x * x * x;
}
double f3(double x) {
return sin(x);
}
int main() {
double a = 0.0, b = 1.0;
int n = 100; // 将积分区间等分成 100 个小区间
std::cout << "y = x^2 在 [0,1] 上的定积分近似值为:" << integration(f1, a, b, n) << std::endl;
std::cout << "y = x^3 在 [0,1] 上的定积分近似值为:" << integration(f2, a, b, n) << std::endl;
std::cout << "y = sin(x) 在 [0,1] 上的定积分近似值为:" << integration(f3, a, b, n) << std::endl;
return 0;
}
```
运行结果为:
```
y = x^2 在 [0,1] 上的定积分近似值为:0.333333
y = x^3 在 [0,1] 上的定积分近似值为:0.25
y = sin(x) 在 [0,1] 上的定积分近似值为:0.459697
```
注意,由于使用的是梯形法,积分的近似值在一定程度上依赖于小梯形的数量,因此如果需要更加精确的结果,可以将 `n` 的值增大。
阅读全文