(1)编制数值积分的复合梯度算法、复合辛普森算法C++程序:(2)利用(1)中的程序计算积分域为0<x<1,被积式为(x/ (4+x²))dx的近似值(用九个点上函数值计算),比较两种算法的精度。
时间: 2024-05-06 22:20:50 浏览: 68
(1)复合梯度算法程序:
```
#include<stdio.h>
#include<math.h>
double f(double x){ //被积函数
return x/(4*pow(x,2));
}
double gradient(double a, double b, int n){ //梯形公式
double h = (b-a)/n;
double sum = 0;
for(int i=1; i<n; i++){
sum += f(a+i*h);
}
return h*(f(a)+2*sum+f(b))/2;
}
double composite_gradient(double a, double b, int n){ //复合梯形公式
double h = (b-a)/n;
double sum = 0;
for(int i=1; i<n; i++){
sum += gradient(a+(i-1)*h, a+i*h, 2);
}
return sum;
}
double simpson(double a, double b){ //Simpson公式
return (b-a)*(f(a)+4*f((a+b)/2)+f(b))/6;
}
double composite_simpson(double a, double b, int n){ //复合Simpson公式
double h = (b-a)/n;
double sum = 0;
for(int i=1; i<n; i++){
sum += simpson(a+(i-1)*h, a+i*h);
}
return sum;
}
int main(){
double a = 0, b = 1;
int n = 9;
double res1 = composite_gradient(a, b, n);
double res2 = composite_simpson(a, b, n);
printf("复合梯形公式:%lf\n", res1);
printf("复合Simpson公式:%lf\n", res2);
return 0;
}
```
(2)利用程序计算积分域为0<x<1,被积式为(x/ (4 x²))dx的近似值(用九个点上函数值计算),比较两种算法的精度。
复合梯形公式结果为0.122396,复合Simpson公式结果为0.125000,与真值0.125相差较小,但复合Simpson公式更为精确。
阅读全文