二阶龙格库塔公式推导_连续系统数值仿真方法——龙格库塔法
在决策理论与方法最后一课中,老师讲了连续系统建模与仿真,事实上在本科就已经接触过许多,在这里我把数值仿真方法中的龙格库塔法给详细介绍一下,这是个比较有趣,同时也比较实用的方法。在求解常微分方程初值问题的数值解经常会用到。本文主要参考书为马东升等主编的 《数值计算方法》,机械工业出版社出版。
初值问题
等价于
龙格库塔法的基本思路是用 $f(x,y)$ 在几个不同点的数值加权平均代替 $f(x_n+theta h,y(x_n+ theta h))$ 的值,而使截断误差的阶数尽可能高。也就是说,取不同点的斜率加权平均作为平均斜率,从而提高方法的阶数。这样龙格库塔法保留了泰勒展开法所具有的高阶局部截断误差,同时避免了计算函数 $f(x,y)$ 的高阶函数。
其中,$phi (x_n,y_n,h)$ 是 $f(x,y)$ 在一些点的线性组合,解释为 $f(x,y)$ 的平均斜率。上式中计算了 $r$ 个 $f$ 的函数值,称该式为 $r$ 级的龙格库塔法。这里系数 $c_i,lambda_i,mu_{ij}$ 均为常数,其选取原则是使 $y_{n+1}$ 得展开表达式
与微分方程的解 $y(x_{n+1})$ 在 $(x_n,y_n)$ 处的泰勒展开式
有尽可能多的项相重合,以减少局部截断误差。
经典龙格库塔法
二阶龙格库塔法
已知
适当选取 $alpha,beta,w_1,w_2$ 的值,使局部截断误差 $y(x_{n+1})-y_{n+1}$ 的阶数尽可能高。这里仍假定 $y_n=y(x_n)$,显然 $k_1=y’(x_n)$ 。
由二元函数的泰勒展开
将 $k_1,k_2$ 的表达式代入
为使 $y(x_{n+1})-y_{n+1}=O(h^3)$
比较 $y(x_{n+1})$ 和 $y_{n+1}$ ,可得
这是四个未知数三个方程的不定方程组。任一未知数可设为自由变量,求出其余三个未知数,这样每一组未知数的组合就确定了一种二阶龙格库塔式。
当取 $w_1=frac{1}{4}$ 时,$w_2=frac{3}{4},alpha=beta=frac{2}{3}$ ,则有
这种方法称为休恩公式。
当取 $w_1=frac{1}{2}$ 时,$w_2=frac{1}{2},alpha=beta=1$ ,此即为改进欧拉公式。
当取 $w_1=0$ 时,$w_2=1,alpha=beta=frac{1}{2}$ ,此时称为变形欧拉公式,
三阶和四阶龙格库塔法
推导过程如下,我们同理可得常用的三阶龙格库塔式为:
常用的四阶龙格库塔公式:
经典的龙格库塔法每一步需要4次计算函数值 $f(x,y)$ ,它具有四阶精度,即局部截断误差是 $O(h^5)$ .
许多计算实例表明,要达到相同的精度,经典公式的步长可以比二阶方法的步长大十倍,而经典公式每步的计算量仅比二阶方法大一倍,所以总的计算量仍比二阶方法小。正是由于上述原因,工程上常用四阶经典龙格库塔法,高于四阶的方法由于每步计算量增加较多,而精度提高不快,因此使用得比较少。
举个例子
某地区某病菌传染的系统动力学模型为
式中,$x_1$ 表示可能受到传染的人数,$x_2$ 表示已经被传染的病人数,$x_3$ 表示已治愈的人数。使用matlab进行编程,对其进行仿真研究,并绘制出对应的时间相应曲线。
解:直接给出matlab代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18clear
x0=[620,10,70]; # 设置状态变量初值
tspan=[0,30]; # 设置仿真时间区间
[t,x]=ode45('funXX',tspan,x0); #调用ode45求仿真解
# 用不同的线型绘制仿真结果曲线
plot(t,x(:,1),t,x(:,2),‘--’,t,x(:,3),‘:’);
xlabel('time(天) t0=0, tf=30'); # 对t-x轴进行标注
ylabel('x(人):x1(0)=620,x2(0)=10,x3(0)=70');
legend('x1','x2','x3');
grid;
# funXX 保存为函数m文件
function xdot=funXX(t,x)
xdot1(1)=-0.001*x(1)*x(2); # 第一个微分方程
xdot1(2)=0.001*x(1)*x(2)-0.072*x(2); # 第二个微分方程
xdot1(3)=0.072*x(2);# 第三个微分方程
xdot=xdot1';
结果作图如下:
参考文献
二阶龙格库塔公式推导_连续系统数值仿真方法——龙格库塔法相关推荐
- 二阶龙格库塔公式推导_[常微分方程的数值解法系列五] 龙格-库塔(RK4)法
在惯性导航以及VIO等实际问题中利用IMU求解位姿需要对IMU测量值进行积分得到需要的位置和姿态,其中主要就是求解微分方程.但之前求解微分方程的解析方法主要是应用于一些简单和特殊的微分方程求解中,对于 ...
- 二阶龙格库塔公式推导_二阶龙格—库塔公式.PPT
二阶龙格-库塔公式 第一节 常微分方程 第二节 欧拉方法 第三节 龙格-库塔法 在上一节中,我们得到了一些求微分方程近似解的数值方法,这些方法的局部截断误差较大,精度较低,我们希望得到有更高阶精度的方 ...
- 二阶龙格库塔公式推导_[数学]龙格-库塔法
原理思想 要想求出非常近似的值,有种神器叫做泰勒公式 .泰勒给出了任意一个函数都可以用多项式逼近的方法求出函数值.这与常微分方程的数值方法的思想类似,就是已知初始值,借助导数这个工具,将其近似成求另一 ...
- 二阶龙格库塔公式推导_数值常微分方程-欧拉法与龙格-库塔法
大三时候在跳蚤市场闲逛,从一位数学院的学长那里买了一些闲书,最近翻出来刚好有李荣华.刘播老师的<微分方程数值解法>和王仁宏老师的<数值逼近>,结合周善贵老师的<计算物理& ...
- 二阶龙格库塔公式推导_带你走进最美数学公式
同学们,我们先来跟老师欣赏一下数学中最优美的式子吧? 是什么魔力让以上几个似乎毫不相干的数学中最特殊的数字能如此优美的写在同一个式子呢? 是欧拉,是数学. 0和1--老师就不用介绍啦, e是自然常数( ...
- 二阶龙格库塔公式推导_二阶常系数齐次线性方程通解推导(涉及常数变易法和欧拉公式)...
欧拉恒等式 二阶微分方程明显比一阶难了很多,下面三图详细地对二阶常系数齐次线性方程的通解进行了推导. 有几下几点需要注意: 1.理解思路. 求二阶常系数齐次线性方程的解,一开始是靠猜的,因为以e为底数 ...
- 二阶龙格库塔公式推导_DeepFM原理推导
注:欢迎关注本人分享有关个性化推荐系统公众号:Tiany_RecoSystem 转发一篇关于DeepFM的公式推导的博客: 论文精读-DeepFM - CSDN博客blog.csdn.net 以及D ...
- matlab:二阶龙格库塔求解欧拉方程
%书籍:常用数值算法及其matlab实现 %第10章 常微分方程初值问题的数值解法 %二阶龙格库塔方法 function S = heunsec(fun, x0, xn, y0, h) %fun:微分 ...
- 捷联惯导基础知识之一(姿态更新的毕卡算法、龙格库塔算法、及精确数值解法)
一.介绍旋转矢量以及由旋转矢量更新四元数 等效旋转矢量微分方程(Bortz方程): 经过理论和近似推导: 单位四元数与旋转矢量关系: 单位四元数与三角函数的关系: 四元数更新方程:利用旋转矢量,考虑了 ...
最新文章
- UI设计比较流行的插画类型和运用
- lg-1 x 怎么算_阿迪达斯crazy byw x实战测评 crazy byw x脚感怎么样
- 第十六届全国大学生智能车竞赛竞速组-室内视觉组补充说明
- mysql如何插入新的字段_Mysql 如何 得到新插入的字段ID
- 云服务器端口对外开放详解
- SpringAop @AfterThrowing通知中获取异常信息并且在控制台打印
- oracle 压测工具 ld,Oracle压力测试工具使用说明
- LeetCode 494. 目标和(DFS+DP)
- 如何制作一个简单的游戏 Cocos2d x 2 0 4
- mysql blob图片_显示存储在mysql blob中的图像
- CodeForces 274B Zero Tree :每次选包含1节点的一棵子树,将该子树所有值都+1或者-1最少多少步可以使树值全部为0 :树型dp...
- 【Orientation】详解Android中的屏幕方向
- PM第1步:产品需求文档
- python画余弦曲线_使用python画圆以及正弦余弦曲线
- 必备收藏!9种工具让开发员工作更高效、生活更轻松
- 水上乐园设备的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 【水】【SCOI】 精简题解
- ASEMI代理ADI(亚德诺)AD5934YRSZ-REEL7车规级芯片
- STM32电路原理图
- Hibernate查询语句拼接乱码问题