C语言:编写一个用梯形法求一元函数f(x)在〔a,b〕上积分近似值的函数过程。并就 f(x)=sin(2x)+x,当[a,b]=[0,3.14159]、小区间数n=10和n=20时,分别计算并输出积分的近似值s1和s2,保留3位小数。
时间: 2024-12-28 08:36:29 浏览: 5
在C语言中,我们可以使用梯形法则(也称为矩形法则的推广)来估算一元函数的定积分。这个过程涉及到将区间分成n个等宽的小段,每个小段对应一个梯形,然后对这些梯形面积求和得到积分的近似值。
首先,我们需要定义一个辅助函数`function`来计算给定点的函数值,然后用另一个函数`trapezoidal_rule`实现梯形法则:
```c
#include <stdio.h>
#include <math.h>
// 定义函数
double function(double x) {
return sin(2 * x) + x;
}
// 梯形法则求积分
double trapezoidal_rule(double a, double b, int n) {
double h = (b - a) / n, sum = 0.5 * function(a);
for (int i = 1; i < n; i++) {
sum += function(a + i * h);
}
sum += 0.5 * function(b); // 添加右端点的面积
return sum * h;
}
int main() {
double a = 0, b = M_PI, s1, s2;
// 使用n=10计算积分
int n1 = 10;
s1 = trapezoidal_rule(a, b, n1);
printf("积分的近似值 (n = %d): %.3lf\n", n1, s1);
// 使用n=20计算积分
int n2 = 20;
s2 = trapezoidal_rule(a, b, n2);
printf("积分的近似值 (n = %d): %.3lf\n", n2, s2);
return 0;
}
```
运行此程序会输出两个积分的近似值`s1`和`s2`,分别是使用10个小区间和20个小区间的梯形法结果,保留三位小数。
阅读全文