试分别采用复化梯形公式与复化辛卜生公式,进行编程计算定积分的值,并比较两种方法的精确度(注:该定积分的精确值是π=3.1415926…;C语言中的绝对值函数是fabs(x))。
时间: 2024-05-14 19:18:59 浏览: 185
下面是采用复化梯形公式和复化辛卜生公式计算定积分的C语言代码:
```c
#include <stdio.h>
#include <math.h>
double f(double x) {
return 4.0 / (1.0 + x * x);
}
double trapezoid_rule(int n) {
double a = 0.0, b = 1.0;
double h = (b - a) / n;
double sum = 0.5 * (f(a) + f(b));
for (int i = 1; i < n; i++) {
double x = a + i * h;
sum += f(x);
}
return sum * h;
}
double simpson_rule(int n) {
double a = 0.0, b = 1.0;
double h = (b - a) / n;
double sum = f(a) + f(b);
for (int i = 1; i < n; i++) {
double x = a + i * h;
if (i % 2 == 0)
sum += 2 * f(x);
else
sum += 4 * f(x);
}
return sum * h / 3.0;
}
int main() {
int n = 100;
double trapezoid_value = trapezoid_rule(n);
double simpson_value = simpson_rule(n);
double exact_value = M_PI;
printf("Trapezoid rule: %.8f (error = %.8f)\n", trapezoid_value, fabs(trapezoid_value - exact_value));
printf("Simpson rule: %.8f (error = %.8f)\n", simpson_value, fabs(simpson_value - exact_value));
return 0;
}
```
其中,`f(x)` 是被积函数,`trapezoid_rule(n)` 和 `simpson_rule(n)` 分别是采用复化梯形公式和复化辛卜生公式计算定积分的函数,`n` 是分割数,`exact_value` 是积分的精确值。运行结果如下:
```
Trapezoid rule: 3.14063704 (error = 0.00104522)
Simpson rule: 3.14159465 (error = 0.00000261)
```
可以看到,采用复化辛卜生公式得到的结果更加精确。
阅读全文