⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jifen.cpp

📁 数值积分算法的c++语言实现 编译器 vc6.0 希望对大家有用
💻 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 + -