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

📄 wyr.cpp

📁 方程的数值计算方法
💻 CPP
字号:
//第五章数值积分与数值微分
//由于初始都取步长为区间长度,所以对x和y的等分个数一直相等
#include<iostream.h>
#include<math.h>//引用了tan(x)的函数定义和指数函数
#define N 9999
double a,b,c,d;//子函数中也要用所以定义成全局变量
double x[N];
double y[N];
double Fnctn(double x,double y)
{
	double value;
	value=pow(x,2)+pow(y,2);
	double f=tan(value);
	return f;
}
void ChangeArray(double x[N],double y[N],double h,double k,int NodeNum)
{
	for(int i=0;i<=NodeNum;i++)
	{
		x[i]=a+i*h;
		y[i]=c+i*k;
	}
}
double TResult(double h,double k,int nodeNum)
{
	int i=0;
	int j=0;
	double Tvalue=0;
	double resultT=0;
	for(i=0;i<nodeNum;i++)
	{
		for(j=0;j<nodeNum;j++)
		{
			Tvalue=Fnctn(x[i],y[j])+Fnctn(x[i],y[j+1])+Fnctn(x[i+1],y[j])+Fnctn(x[i+1],y[j+1]);
			resultT+=Tvalue;
		}
	}
	return resultT*h*k/4;
}
void main()
{
	cout<<"********本程序实现定上下限的重积分的数值计算结果********\n";
	double w;
	int nodeNum=1;			//节点下标z最大值
	double HforX;
	double KforY;			//步长
	double Tixing1;
	double Tixing2;			//计算过程中对结果的比较
	//取得x积分上下限
	cout<<"请输入第一重积分对x的积分上限:";
	cin>>b;
	cout<<"\n请输入第一重积分对x的积分下限:";
	cin>>a;
	while(a>=b)
	{
		cout<<"\n输入积分上下限错误,请输入第一重积分对x的积分上限:";
		cin>>a;
		cout<<"\n请输入第一重积分对x的积分下限:";
		cin>>b;
	}
	x[0]=a;
	x[1]=b;
	//取得y积分上下限
	cout<<"\n请输入第二重积分对y的积分上限:";
	cin>>d;
	cout<<"\n请输入第二重积分对y的积分下限:";
	cin>>c;
	while(c>=d)
	{
		cout<<"\n输入积分上下限错误,请输入第二重积分对y的积分上限:";
		cin>>a;
		cout<<"\n请输入第二重积分对y的积分下限:";
		cin>>b;
	}
	y[0]=c;
	y[1]=d;
	cout<<"请输入误差限制:";
	cin>>w;
	
	Tixing2=(b-a)*(d-c)*(Fnctn(a,c)+Fnctn(a,d)+Fnctn(b,c)+Fnctn(b,d))/4;
	Tixing1=0;
	cout<<Tixing2<<'\n';
	while(fabs(Tixing2-Tixing1)>w)
	{
		Tixing1	=Tixing2;
		nodeNum	=2*nodeNum;		//等分区间,获得新的自变量的下标最大值,即等分区间数
		HforX=(b-a)/nodeNum;
		KforY=(d-c)/nodeNum;
		ChangeArray(x,y,HforX,KforY,nodeNum);
		Tixing2	=TResult(HforX,KforY,nodeNum);
	}
	cout<<"满足条件的积分结果为:"<<Tixing2<<'\n';
}

⌨️ 快捷键说明

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