变步长梯形公式
fx(),输入的被积区间[a,b]a,b
,输入精度要求eps
h,[f(a),f(b)],初始化:b-ah; ax; T1 ,2
1ha,b
T1,f()T2,h=h/2,m=1 ,222
while(fasb(T2-T1)>eps)
h=h/2 ;m=m+1;S=0 T2T1 ,
for(i=1;i<=pow(2,m-1);i++)
S+f(a+(2i-1)h) S ,1
T1,hST2 ,2
fx()输出在[a,b]上的积分值T2
#include
#include
#include
double f(double x)
{
double y;
y=sin(x*x);
return y;
}
void main()
{
double a,b,h,eps,s,T1,T2;
int i,m;
printf("请输入被积区间[a,b]=");
scanf("%lf,%lf",&a,&b);
printf("请输入被积区间[a,b]的精度要求=");
scanf("%lf",&eps);
h=(b-a)/2;
T1=h/2*(f(a)+2*f((a+b)/2)+f(b));
h=h/2;m=2;
T2=1.0/2*T1+h*(f(a+h)+f(a+3*h));
while(fabs(T2-T1)>eps)
{
h=h/2;m=m+1;
T1=T2;
s=0;
for(i=0;i<=pow(2,m-1)-1;i++)
s=s+f(a+(2*i+1)*h);
T2=1.0/2*T1+h*s;
}
printf("T2=%lf\n",T2); }