📄 jifen.cpp
字号:
#include<iostream.h>
#include<math.h>
#define pa 3.1415926
double f1(double x);
double f2(double x);
double f3(double x);
double cT(double a,double b,int m,int k);//组合梯形求积公式,积分限a,b,对第k个函数积分
double cSimpson(double a,double b,int m,int k)//组合simpson求积公式
{
double h=(b-a)/(2*m);
double F1=0;//存放f2j-1
double F2=0;//存放f2j
double F0;
int j;
switch(k)
{
case 1:
F0=f1(a)+f1(b);
for(j=1;j<2*m;j++)
{
double Xj=a+j*h;
if(j%2==0)
F2=F2+f1(Xj);
else
F1=F1+f1(Xj);
}
break;
case 2:
F0=f2(a)+f2(b);
for(j=1;j<2*m;j++)
{
double Xj=a+j*h;
if(j%2==0)
F2=F2+f2(Xj);
else
F1=F1+f2(Xj);
}
break;
case 3:
F0=f3(a)+f3(b);
for(j=1;j<2*m;j++)
{
double Xj=a+j*h;
if(j%2==0)
F2=F2+f3(Xj);
else
F1=F1+f3(Xj);
}
break;
default:
cout<<"error!";
}
double Xf=h*(F0+2*F2+4*F1)/3;
return Xf;
}
void main()
{
/* double sf=cSimpson(0,1,10);
double tf=cT(0,1,100);
double re=pa*sqrt(2)/4;
cout<<sf;
cout<<endl;
cout<<fabs(re-sf);
cout<<endl;
cout<<tf;
cout<<endl;
cout<<fabs(tf-re);*/
double re1=pa*sqrt(2)/4;
double re2=0.5;
double re3=pa/4;
///f1//
double xfs=cSimpson(0,1,10,1);
double xft=cT(0,1,300,1);
cout<<"(1): "<<endl;
cout<<"simpson积分值: "<<xfs;
cout<<" 误差: "<<fabs(xfs-re1)<<endl;
cout<<"梯形积分值: "<<xft;
cout<<" 误差: "<<fabs(xft-re1)<<endl;
//f2//
xfs=cSimpson(0,1,1000,2);
xft=cT(0,1,4000,2);
cout<<"(2): "<<endl;
cout<<"simpson积分值: "<<xfs;
cout<<" 误差: "<<fabs(xfs-re2)<<endl;
cout<<"梯形积分值: "<<xft;
cout<<" 误差: "<<fabs(xft-re2)<<endl;
//f3//
xfs=cSimpson(0,pa/2,10,3);
xft=cT(0,pa/2,10,3);
cout<<"(3): "<<endl;
cout<<"simpson积分值: "<<xfs;
cout<<" 误差: "<<fabs(xfs-re3)<<endl;
cout<<"梯形积分值: "<<xft;
cout<<" 误差: "<<fabs(xft-re3)<<endl;
}
double cT(double a,double b,int m,int k)//组合梯形求积公式,积分限a,b,对第k个函数积分
{
double h=(b-a)/m;
double Fj=0;//
double F0;
int j;
switch(k)
{
case 1:
F0=f1(a)+f1(b);
for(j=1;j<m;j++)
{
double Xj=a+j*h;
Fj+=f1(Xj);
}
break;
case 2:
F0=f2(a)+f2(b);
for(j=1;j<m;j++)
{
double Xj=a+j*h;
Fj+=f2(Xj);
}
break;
case 3:
F0=f3(a)+f3(b);
for(j=1;j<m;j++)
{
double Xj=a+j*h;
Fj+=f3(Xj);
}
break;
default:
cout<<"error!";
}
double Xf=h*(2*Fj+F0)/2;
return Xf;
}
double f1(double x)
{
return (1+x*x)/(1+x*x*x*x);
}
double f2(double x)
{
return log(1+sqrt(x));
}
double f3(double x)
{
return 1/(pow(cos(x),2)+4*pow(sin(x),2));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -