*
矩形法,梯形法,辛普生法,科特斯法,龙贝格法 ,对 y=x*x 求定积分
版本:1.0
*/
#include
#include
void
print();
int
main()
{
long
n;
double
a,b;
printf("请输入积分下限,积分上限,步数:");
scanf("%lf,%lf,%d",&a,&b,&n);
if(n<0)exit(0);
print(a,b,n);
//
system("pause");
return(0);
}
void
print(double a,double b, long n)
{
double
Rn(double a,double b, long n);
double
Cn(double a,double b, long n);
double
Sn(double a,double b, long n);
double
Tn(double a,double b, long n);
double
Jn(double a,double b, long n);
printf("\n================================================================================\n");
printf("函数X
* X在积分下限是%f,积分上限是%f,步长是%d的积分近似值是:\n",a,b,n);
printf("--------------------------------------------------------------------------------\n");
printf("矩形法的近似值为:.9f\n",Jn(a,b,n));
printf("梯形法的近似值为:.9f\n",Tn(a,b,n));
printf("辛普生法的近似值:.9f\n",Sn(a,b,n));
printf("科特斯法的近似值:.9f\n",Cn(a,b,n));
printf("龙贝格法的近似值:.9f\n",Rn(a,b,n));
printf("================================================================================\n");
}
double Rn(double a,double b, long n)
{
double
Cn(double a,double b, long n);
double
Rn;
Rn=(64*Cn(a,b,2*n)-Cn(a,b,n))/63;
return(Rn);
}
double Cn(double a,double b, long n)
{
double
Sn(double a,double b, long n);
double
Cn;
Cn=(16*Sn(a,b,2*n)-Sn(a,b,n))/15;
return(Cn);
}
double Sn(double a,double b, long n)
{
double
Tn(double a,double b, long n);
double
Sn;
Sn=(4*Tn(a,b,2*n)-Tn(a,b,n))/3;
return(Sn);
}
double Tn(double a,double b, long n)
{
double
F(double x);
int
i;
double
h,Tn;
h=(b-a)/n;
Tn=(F(a)+F(b))/2;
for(i=1;i
{
Tn=Tn+F(a+i*h);
}
Tn=Tn*h;
return
(Tn);
}
double Jn(double a,double b, long n)
{
double
F(double x);
int
i;
double
h,Jn=0.0;
h=(b-a)/n;
for(i=1;i
{
Jn+=F(a+i*h+h/2);
}
Jn=Jn*h;
return
(Jn);
}
double F(double x)
{
double
F;
F=x*x;
return(F);
}