📄 wyr.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 + -