四阶Runge-Kutta算法(C语言实现)

目录

1、概述

(1)常微分初值问题

(2)泰勒公式 

(3)四阶Runge-Kutta算法 

2、案例分析及代码

(1)案例

 (2)代码

 3、结果及讨论


1、概述

(1)常微分初值问题

(2)泰勒公式 

(3)四阶Runge-Kutta算法 

                      

2、案例分析及代码

(1)案例

 (2)代码

#include <stdio.h> 
#include <math.h> 
double F(double x,double y[4],double f[4]) 
{ 
	f[1]=0*x+0*y[1]+0*y[2]+0*y[3]+1; 
	f[2]=0*x+0*y[1]+0*y[2]+1*y[3]+0; 
	f[3]=0*x+0*y[1]-1000*y[2]-100*y[3]+1000; 
	return(1); 
}
void main() 
{ 
	double F(double x,double y[4],double f[4]); 
	double h=0.0005,x=0,Y[4],k[5][4],s[4],f[4],det,m[4]={0.025,0.045,0.085,0.1}; 
	int i,j,t; 
	for(t=0;t<=3;t++) /*龙格—库塔算法*/ 
	{ 
		for(j=0;j<=3;j++) 
			Y[j]=0; //每求一组值后将初值条件还原为 0 
		for(i=1;i<=int(m[t]/h);i++) 
		{ 
			for(j=1;j<=3;j++) 
				s[j]=Y[j];
				det=F(x,s,f); 
				for(j=1;j<=3;j++) 
					k[1][j]=h*f[j]; /*四阶古典公式中的 k 值和求和的计算*/ 
				for(j=1;j<=3;j++) 
					s[j]=Y[j]+0.5*k[1][j]; 
				det=F(x+0.5*h,s,f); 
				for(j=1;j<=3;j++) 
					k[2][j]=h*f[j]; 
				for(j=1;j<=3;j++) 
					s[j]=Y[j]+0.5*k[2][j]; 
				det=F(x+0.5*h,s,f); 
				for(j=1;j<=3;j++) 
					k[3][j]=h*f[j]; 
				for(j=1;j<=3;j++) 
					s[j]=Y[j]+k[3][j]; 
				det=F(x+h,s,f); 
				for(j=1;j<=3;j++) 
					k[4][j]=h*f[j]; 
				for(j=1;j<=3;j++) 
					Y[j]=Y[j]+(k[1][j]+2*k[2][j]+2*k[3][j]+k[4][j])/6; 
				x+=h; 
				}
				for(j=1;j<=3;j++) 
					printf("y[%d](%f)=%f ",j,m[t],Y[j]); 
				printf("\n"); 
		} 
}

 3、结果及讨论

Runge_Kutta 方法的优点:
1)精度高,不必用别的方法求开始几点的函数值。
2)可根据 f’(t,y)变化的情况与需要的精度自动修改步长。
3)程序简单,存储量少。
4)方法稳定

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值