Young87

SmartCat's Blog

So happy to code my life!

游戏开发交流QQ群号60398951

当前位置:首页 >跨站数据测试

数值分析C++实现用四阶龙格-库塔(Runge-Kutta)方法求解常微分方程初值问题

问题:用四阶龙格-库塔(Runge-Kutta)方法求解常微分方程初值问题。
算法描述
算法的程序框图:在这里插入图片描述
具体算法:
(1)读取a,b,n,f
(2)计算步长h = (b-a)/n,x0=a,y0=f
(3)从i = 1开始每次i++,重复以下操作,直到i=n退出循环
3.1 计算x1=x0+h, k1 =f(x0,y0);k2=f(x0+h/2,y0+hk1 /2);
k3 =f(x0+h/2,y0+h
k2 /2);
K4=f(x0,y0+hk3);
y1=y0+ h
(k1+2k2+2k3+k4)/6
3.2打印x1,y3
3.3 x0=x1;y0 = y1;
源程序代码及运行结果截图

#include<iostream>
using namespace std;
/*
@param x :获取自变量x,y对应的函数值
*/
float getRugeKuttaFunction(float x, float y)
{

	return 0.0f - y;
}

void  getRugeKuttaResult(float x0, float y0, float h, int n)
{
	for (int i = 0; i < n; i++)
	{
		
		//计算k1的值
		float k1 = getRugeKuttaFunction(x0,y0);
		//计算k2的值
		float k2 =getRugeKuttaFunction(x0+0.5*h, y0+0.5*h*k1);
		//计算k3的值
		float k3 = getRugeKuttaFunction(x0 + 0.5*h, y0 + 0.5*h*k2);
		//计算k4的值
		float k4 = getRugeKuttaFunction(x0 + h, y0 + h*k3);
		float y = y0 + h / 6 * (k1+2*k2+2*k3+k4);
		//重新赋值进行迭代
		x0 = x0+h;
		y0 = y;
		cout << "x:" << x0 << "-----> y:" << y << endl;
	}
}
int main()
{
	//初始值x0
	float x0;
	//初始值y0
	float y0;
	//循环次数
	int n;
	//步长
	float h;
	
	/*测试数据*/
	getRugeKuttaResult(0, 1, 0.1f, 10);
	system("pause");
	return 0;
}

在这里插入图片描述

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: OpenMesh中文教程入门版

下一篇: 数值分析C++实现用二分法求方程f(x)=0的根

精华推荐