数值分析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;
}

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陌意随影

您的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值