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

📄 自动选择步长simpson法.cpp

📁 数值计算 中的各种算法: Lagrame插值,Newton迭代法,Runge-kutta,二分法求根,解线性方程组的Guass列主元消去法,自动选择步长Simpson法
💻 CPP
字号:
//黄泳晞  2003402054529
//P.147 算法4.1 自动选择步长Simpson法
#include <iostream.h>
#include <math.h>
#define EPS 0.000001
class Simpson{
public:
	float FUNCTION(float X);
	float APSIMP(float A,float B);

};
float Simpson::FUNCTION(float X){
	float result;
	result=exp(-X*X);
	return result;
}
float Simpson::APSIMP(float A,float B){
	float Y1,Y2,CONST,X,H,Er,S,P=0,OLD=0,NEW[100]={0};
	int N=1,K=1,j;
	Y1=FUNCTION(A);
	Y2=FUNCTION(B);
	CONST=Y1+Y2;
	while (1){
		H=(B-A)/N;
		for (j=1;j<=N;j++){
			X=A+(2*j-1)*H/2;
			NEW[K]=NEW[K]+FUNCTION(X);
		}
		if (K>1)
			OLD=OLD+NEW[K-1];
		S=H*(CONST+4*NEW[K]+2*OLD)/6;
		Er=fabs(S-P)/15;
		if (Er>EPS){
			K=K+1;P=S;N=N+N;
		}else break;
	}
	cout<<"近似值S= "<<S<<endl<<"步长H= "<<H<<endl;
	return 0;
}
void main(){
	Simpson T;float A,B;
	cout<<"Simpson公式求积分的近似解"<<endl<<"请输入积分上限A和下限B"<<endl<<"A= ";
	cin>>A;
	cout<<"B= ";
	cin>>B;
	T.APSIMP(A,B);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -