誠心求助,一点小疑问,关于梯形法与辛普森法积分的
自己写了梯形法与辛普森法积分的程序,但是对函数y=x*(x-1)*(x-2)*(x-3)*(x-4)+7在区间[-1,5]上积分;划分成n个区间求积分,当n=8/16/32...这两种方法求得的数值是一样的,而且都是等于准确值42,反而当n的值很大时才会出现误差,想问一下是怎麽回事?(试过其他函数求积分,并没有出现什么问题)
程序如下:
#include <stdio.h>
#include <math.h>
int n;
double a[6]={1.0,-10.0,35.0,-50.0,24.0,7.0};
double func(double x)
{
int i;
double sum=a[0];
for(i=1;i<6;i++)
sum=sum*x+a[i];
return sum;
}
void Trapezoid(double a,double b,int n)
{
double h, s=0.0;
int i;
h=fabs((b-a)/n);
b=a+h;
for(i=0;i<n;i++)
{
s=s+(func(a+i*h)+func(b+i*h))*h/2.0;
}
printf("%.16lf\n",s);
}
void Simpson(double a,double b,int n)
{
double h, s=0.0;
int i;
h=fabs((b-a)/n);
s=func(a)+func(b);
for(i=1;i<n;i++)
{
if(i%2==0) s=s+2*func(a+h*i);
else s=s+4*func(a+h*i);
}
s=s*h/3;
printf("%.16lf\n",s);
}
int main()
{
double a, b;
printf("Please enter a, b, n:");
scanf("%lf%lf%d",&a,&b,&n);
Trapezoid(a,b,n);
Simpson(a,b,n);
return 0;
}