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

📄 runge-kutta.cpp

📁 数值计算 中的各种算法: Lagrame插值,Newton迭代法,Runge-kutta,二分法求根,解线性方程组的Guass列主元消去法,自动选择步长Simpson法
💻 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 + -