📄 four.cpp
字号:
/*微分方程初值问题
y'=1/(1+x*x)-2*y*y; 0=<x<=4; y(0)=0;
解析式:y=x/(1+x*x);
*/
#include<iostream.h>
#include<stdio.h>
#include<math.h>
#include<iomanip.h>
double Funtion (double x,double y);
main()
{
double a=0,b=4,A0=0;
int n=20;
//尤拉方法
double h;
h=(b-a)/n;
double x=a,y=A0;
double You_lai[30],xi[30];
You_lai[0]=A0;
xi[0]=a;
for(int i=1;i<=n;i++)
{
y=y+h*Funtion(x,y);
x=x+h;
You_lai[i]=y;
xi[i]=x;
}
cout<<endl;
//龙库方法
x=a,y=A0;
double Long_ku[30];
Long_ku[0]=A0;
double A_da[30];
A_da[0]=A0;
double X[50],Y[50];
X[0]=a;
Y[0]=A0;
for(int j=1;j<=n;j++)
{
double K1=h*Funtion(x,y);
double K2=h*Funtion(x+h/2,y+K1/2);
double K3=h*Funtion(x+h/2,y+K2/2);
double K4=h*Funtion(x+h,y+K3);
y=y+(K1+2*K2+2*K3+K4)/6;
x=x+h;
Long_ku[j]=y;
if(j<=3)
{
X[j]=x;
Y[j]=y;
A_da[j]=y;
}
}
cout<<endl;
//阿达姆斯方法
x=a,y=A0;
for(int k=4;k<=n;k++)
{
x=X[k-1]+h;
y=Y[k-1]+(55*Funtion(X[k-1],Y[k-1])
-59*Funtion(X[k-2],Y[k-2])
+37*Funtion(X[k-3],Y[k-3])
-9*Funtion(X[k-4],Y[k-4]))*h/24;
A_da[k]=y;
X[k]= x;
Y[k]=y;
}
cout<<endl;
//解析解
x=a,y=A0;
double Jie_xi[30];
Jie_xi[0]=A0;
for(int g=1;g<=n;g++)
{
x=x+h;
y=x/(1+x*x);
//y=exp(-x)+x;
Jie_xi[g]=y;
}
cout<<" xi 解析解 尤拉 龙库 阿达姆斯"<<endl;
for(g=0;g<=n;g++)
{
printf("%3.3f %9.9f %9.9f %9.9f %9.9f"
,xi[g],Jie_xi[g],You_lai[g],Long_ku[g],A_da[g]);
cout<<endl;
}
return 0;
}
double Funtion (double x,double y)
{
return (double)1/(1+x*x)-(double)2*y*y;
//return -y+x+1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -