c++ 分别用矩形和梯形法求积分 x⼀sinx 以100份和1000份分割

2025-03-12 22:42:34
推荐回答(1个)
回答1:

x 范围必须在 有意义 的范围内 才好求数值解。 -pi < x < pi; pi=3.14159...
#include
#include
double fun(double x){
if ( fabs(x) < 1e-12) return 1;
else return x/sin(x);
}

main(){
double xi,dx,x0,xn,yi;
double s1=0,s2=0,s3=0,s4=0;
int i;
printf("intput x0 and xn \n");
scanf("%lf %lf",&x0,&xn);
dx = (xn-x0)/100.0;
for (i=0;i<100;i++){
yi = fun(x0+dx*i);
s1 = s1 + yi;
}
s1 = s1/100 * (xn-x0);
printf("rect 100: %lf\n",s1);
dx = (xn-x0)/1000.0;
for (i=0;i<1000;i++){
yi = fun(x0+dx*i);
s2 = s2 + yi;
}
s2 = s2/1000 * (xn-x0);
printf("rect 1000: %lf\n",s2);
dx = (xn-x0)/100.0;
s3 = fun(x0) + fun(xn);
for (i=1;i<100;i++){
yi = fun(x0+dx*i);
s3 = s3 + yi*2;
}
s3 = s3/200 * (xn-x0);
printf("trapezoid 100: %lf\n",s3);
dx = (xn-x0)/1000.0;
s4 = fun(x0) + fun(xn);
for (i=1;i<1000;i++){
yi = fun(x0+dx*i);
s4 = s4 + yi*2;
}
s4 = s4/2000 * (xn-x0);
printf("trapezoid 1000: %lf\n",s4);
}

例子:
intput x0 and xn
-1.2 1.2
rect 100: 2.613781
rect 1000: 2.613727
trapezoid 100: 2.613781
trapezoid 1000: 2.613727