四阶龙格-库塔法求解常微分方程的初值问题
算法原理和程序框图
龙格—库塔法是一种求其准确解y(x)在一系列点xi处y(xi)的近似值yi的方法,yi称为数值解。经典的四阶龙格库塔法方程如下:
y'=f(t,y),y(t0)=y0输出按如下求解yn+1=yn+h(k1+2k2+3k3+4k4)/6其中 k1=f(tn,yn)
k2=f(tn+h/2,yn+hk1/2)
k3=f(tn+h/2,yn+hk2/2)
k4=f(tn+h,yn+hk3)
4.2程序使用说明
本程序单独编写了一阶初值问题单独求解和高阶常微分方程的求解问题。常微分方程的阶数,x的上下限和步长直接输入就好。常微分方程则在系统提示input后再输入,并且按照y(1,1)=y,y(2,1)=y’,y(3,1)=y’’的格式输入,然后输入初始条件f(x),f’(x),f’’(x)等计算结果。最后求得所要的函数值。
4.3计算实例展示
例题为课本304页计算实习9.2。计算y(1)的结果如下:
ans =
-1.000000000000000
-0.847436458333333
-0.689482936121419
-0.525724908067489
-0.355719511320969
-0.178993729355764
0.004957535888930
0.196673510288970
0.396729719312157
0.605740292781225
0.824360410550626
1.053288897488131
1.293270976642268
1.545101189994835
1.809626496745704
2.087749559656611
% ** 文件名:Runge_Kutta.m
%
% ** 创建人:**
%
% ** 日 期:2016.12.14
%
% ** 描 述:四级四阶龙格-库塔法求解常微分方程的初值问题
%
% ** 函数:第304 页计算实习 9.2
%
% ** 参考教材:《数值分析》李乃成,梅立泉,科学出版社
%
clear
clc
format long
% % % m=input('请输入常微分方程的阶数m=');
% % % a=input('请输入x下限a=');
% % % b=input('请输入x上限b=');
% % % h=input('请输入步长h=');
% % % ym=input('令y(1,1)=y,y(2,1)=y’,y(3,1)=y’’...请输入ym=','s'); %输入的时候必须按照这个形式输入y1=y(1,1);m=3;
a=0;
b=1;
h=0.05;
%ym=y(3,1)+y(2,1)-y(1,1)+2*x-3;
ym=input('令y(1,1)=y,y(2,1)=y’,y(3,1)=y’’...请输入ym=','s'); %输入的时候必须按照这个形式输入y1=y(1,1);
% if m==1 %一阶初值问题单独求解
% mm=(b-a)/h;
% y(1,1)=input('请输入在初值点的函数值f(a)=');
% x=a;
% y11(1)=y(1,1);
% for k1=2:(mm+1)
% y1=y(1,1);
% K(1,1)=h*(eval(ym)); %计算K1
% x=x+h/2;
% y(1,1)=y1+K(1,1)/2;
% y1=y(1,1);
% K(1,2)=h*(eval(ym)); %计算K2
% x=x;
% y(1,1)=y1+K(1,2)/2-K(1,1)/2;
% y1=y(1,1);
% K(1,3)=h*(eval(ym)); %计算K3
% x=x+h/2;
% y(1,1)=y1+K(1,3)-K(1,2)/2;
% y1=y(1,1);
% K(1,4)=h*(eval(ym)); %计算K4
% y11(k1)=y11(k1-1)+(K(1,1)+2*K(1,2)+2*K(1,3)+K(1,4))/6;
% y(1,1)=y11(k1);
% x=a+(k1-1)*h;
%
% end
% y11
% else %高阶初值问题mm=(b-a)/h; %一共要求解mm个数据点for k2=1:m %读取初值条件fprintf('请输入%d阶导数的初值f(%d)(a)=\n',(k2-1),(k2-1));y(k2,1)=input('=');endfor k2=1:m y22(1,k2)=y(k2,1); %先把初值保存在矩阵y22(m,n)中,m表示第几个所求点,n表示第n阶初值end
%%%%初值% y22(1,1)=-1;
% y22(1,2)=3;
% y22(1,3)=2;x=a;for k4=2:(mm+1) %求解mm个数据点的循环for k=1:(m-1) %计算K1,包括每一阶的K1K(k,1)=h*y(k+1,1); %y(k+1,1)中k+1表示第k+1阶,1表示第一个点;K(k,1)中k表示阶数,1表示K1endK(m,1)=h*(eval(ym));x=x+h/2; %求解K1之前,先重新对x和y赋值for k3=1:m y(k3,1)=y(k3,1)+K(k3,1)/2;endfor k=1:(m-1) %计算K2K(k,2)=h*y(k+1,1);endK(m,2)=h*(eval(ym));x=x;for k3=1:my(k3,1)=y(k3,1)-K(k3,1)/2+K(k3,2)/2;endfor k=1:(m-1) %计算K3K(k,3)=h*y(k+1,1);endK(m,3)=h*(eval(ym));x=x+h/2;for k3=1:my(k3,1)=y(k3,1)+K(k3,3)-K(k3,2)/2; %这里容易出错endfor k=1:(m-1) %计算K4K(k,4)=h*y(k+1,1);endK(m,4)=h*(eval(ym));for k5=1:my22(k4,k5)=y22(k4-1,k5)+(K(k5,1)+2*K(k5,2)+2*K(k5,3)+K(k5,4))/6; %这里,除了要求出下一个点的数值,还要求出相应的导数值endfor k6=1:m %除了对y(1,1)重新赋值外,还要对y(2,1)等重新赋值y(k6,1)=y22(k4,k6); end x=a+(k4-1)*h;endy22(:,1)
%end
四阶龙格-库塔法求解常微分方程的初值问题相关推荐
- 经典龙格-库塔法(四阶龙格-库塔法)求解求一阶常微分方程相应的特解的Python程序
基本原理 例题 代码 #四阶龙格-库塔法 #求一阶常微分方程,相应的特解 #x变量的区间 a = 0 b = 1 #已知条件 X = [0] Y = [1] h = 0.2 #设置步长 n = (b- ...
- 一阶欧拉近似matlab,MATLAB改进欧拉法与四阶龙格-库塔求解一阶常微分方程.doc
MATLAB改进欧拉法与四阶龙格-库塔求解一阶常微分方程 姓名:樊元君 学号:2012200902 日期:2012.11.06 一.实验目的 掌握改进欧拉法与四阶龙格-库塔求解一阶常微分方程的初值问题 ...
- 常微分方程的数值解-欧拉、四阶龙格-库塔法等C语言
*题目描述:*求常微分方程y'=y-2x/y && y(0)=1的数值解.解析解为:y=sqrt(1+2x) 编译环境vc++6.0: 代码如下: /* 1.y'=y-2x/y &am ...
- python解常微分方程龙格库_求解常微分方程组初值问题的龙格库塔法分析及其C代码...
求解常微分方程组初值问题的 龙格库塔法分析及其 C 代码 1 .概 述 由高等数学的知识可知,一些特殊类型的常微分方程(组)能够求出给定初 始值的解析解, 而在科学与工程问题中遇到的常微分方程 (组) ...
- 有确定项微分方程的matlab程序,微分方程的数值解法matlab四阶龙格—库塔法课件...
<微分方程的数值解法matlab四阶龙格-库塔法课件>由会员分享,可在线阅读,更多相关<微分方程的数值解法matlab四阶龙格-库塔法课件(36页珍藏版)>请在人人文库网上搜索 ...
- 蹦极模型matlab仿真,科学网—蹦极的数学建模及其龙格-库塔法求解方法 - 赵也非的博文...
论文: 蹦极的数学建模及其龙格-库塔法求解方法 在"华东师范大学首届研究生数学建模竞赛"中,获得二等奖. 发表日期: 2007年5月 摘要: 本文通过参照题中给出的数据,对蹦极者在 ...
- 欧拉法、改进的欧拉法、龙格-库塔法求解初值问题
求解初值问题 简介 前期准备 欧拉法 改进的欧拉法 龙格-库塔法 标准四阶显式Kutta公式 三级三阶显式公式 四级四阶显式Kutta公式 四级四阶显式Gill公式 示例 MATLAB代码 结果 简介 ...
- 【Runge-Kutta】龙格-库塔法求解微分方程matlab仿真
1.软件版本 MATLAB2013b 2.算法理论 龙格-库塔法(Runge-Kutta)是用于模拟常微分方程的解的重要的一类隐式或显式迭代法.龙格库塔法的家族中的一个成员如此常用,以至于经常被称为& ...
- 四阶龙格库塔法的基本思想_数值常微分方程-欧拉法与龙格-库塔法
大三时候在跳蚤市场闲逛,从一位数学院的学长那里买了一些闲书,最近翻出来刚好有李荣华.刘播老师的<微分方程数值解法>和王仁宏老师的<数值逼近>,结合周善贵老师的<计算物理& ...
最新文章
- lombok几个基本注解的使用及遇到的坑点
- 数学建模 匈牙利算法求解整数规划基本原理与编程实现
- 单链表的创建、插入、删除、倒置操作
- CICD详解(九)——gitlab简单使用
- heuristic algorithm(启发式算法)
- 蓝桥杯省赛C++A组B组题解整理(第十、九、八、七、六、五、四、三届)
- ESET NOD32最新单机、企业中、英文版 + 个人专有ID(90天使用期)申请方法
- C语言新手入门练习之三子棋
- 程序员如何看待实力与运气
- Windows安装Android软件,win7系统安装安卓软件WindowsAndroid的方法
- 如何去爱一个人[转]
- 数据分析思维(《数据分析思维:分析方法和业务知识》)
- Revit导入CAD图纸,要提前优化图纸,你做到了吗?
- 【东哥视觉】做人做事禁忌
- 多媒体计算机主要有哪些基本特性,多媒体计算机的基本特性
- Visual Studio Code 是啥?
- win10命令行cd进入到指定目录
- 超市收银系统c语言,C语言超市收银系统.docx
- 台湾清华大学计算机网络--003 WLAN
- mysql 联表 delete
热门文章
- 雷军:从苦逼撸代码到年入上百亿,成为商界领袖,改变现状,只靠单纯写代码远远不够
- ccsa安学网小程序_CCSA安学网安全题库完整
- KSO - Vue2的生命周期的个人理解
- 手机解除移动宽带屏蔽_家用宽带为什么Wifi比有线网速快很多?是谁偷走了你的带宽?...
- vue进入页面执行的钩子函数_vue中各选项及钩子函数执行顺序详解
- 计算机英语论文题目,英语专业毕业论文题目集锦
- html盒子里的内容溢出,[经验] HTML页面中子盒子溢出了怎么办
- poj-2905 The Pilots Brothers' refrigerator
- (copy)真正的程序员,请你站出来---结论:戒骄戒躁,脚踏实地
- SpringBoot+Vue实现邮箱登录注册找回密码(附接口文档)