📄 runge-kutta.cpp
字号:
//黄泳晞 2003402054529 四阶Runge-Kutta算法
//按照课本P192页例题
#include <iostream.h>
#include<iomanip.h>
class Runge_Kutta
{
public:
float F(float Y){//函数
return (200-50*Y*Y*Y-100*Y)/3;
};
float Kutta(float A,float B,float Y0,float H);
};
float Runge_Kutta::Kutta(float A,float B,float Y0,float H){//四阶Runge-Kutta
float Y[100],K[4];
int N=int((B-A)/H);
float H1=H/2,H2=H/6,x=0;
int j=0;
Y[0]=Y0;
for(int i=0;i<=N;i++){
K[0]=F(Y[i]);
A=A+H1;
K[1]=F(Y[i]+H1*K[0]);
K[2]=F(Y[i]+H1*K[1]);
A=A+H1;
K[3]=F(Y[i]+H*K[2]);
Y[i+1]=Y[i]+H2*(K[0]+2*K[1]+2*K[2]+K[3]);
}
cout<<"\n运算结果如下:\n";
for(i=0;i<=N+1;i++){
j++;
cout<<"Y("<<setw(5)<<x<<")"<<"= "<<setw(8)<<Y[i];
if (j>2){
cout<<"\n";j=0;
}
else
cout<<" ";
x=x+H;
}
cout<<endl;
return 0;
}
void main()
{
float A,B,Y0,H;
Runge_Kutta T;
cout<<"四阶Runge-Kutta算法\n";
cout<<"请输入:\n";
cout<<"起始区间a: ";cin>>A;
cout<<"终止区间b: ";cin>>B;
cout<<"初值Yo: ";cin>>Y0;
cout<<"迭代步长H: ";cin>>H;
cout<<endl<<"输入参数如下: "<<endl<<"区间--"<<setw(10)<<"t=["<<A<<","<<B<<"]"<<endl;
cout<<"初值--"<<setw(10)<<"Yo="<<Y0<<endl<<"步长--"<<setw(9)<<"H="<<H<<endl;
T.Kutta(A,B,Y0,H);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -