本文说明如何使用 ode23 和 ode45 求解表示捕食者/猎物模型的微分方程。这两个函数用于对使用可变步长大小 Runge-Kutta 积分方法的常微分方程求数值解。ode23 使用一对简单的 2 阶和 3 阶公式实现中等精度,ode45 使用一对 4 阶和 5 阶公式实现更高的精度。

以名为 Lotka-Volterra 方程,也即捕食者-猎物模型的一对一阶常微分方程为例:

dxdt=x−αxy\dfrac{dx}{dt}=x−αxydtdx​=x−αxy
dydt=−y+βxy.\dfrac{dy}{dt}=−y+βxy.dtdy​=−y+βxy.

变量 x 和 y 分别计算猎物和捕食者的数量。二次交叉项表示物种之间的交叉。当没有捕食者时,猎物数量将增加,当猎物匮乏时,捕食者数量将减少。

编写方程代码

为了模拟系统,需要创建一个函数,以返回给定状态和时间值时的状态导数的列向量。在 MATLAB 中,两个变量 x 和 y 可以表示为向量 y 中的前两个值。同样,导数是向量 yp 中的前两个值。函数必须接受 t 和 y 的值,并在 yp 中返回公式生成的值。

yp(1) = (1 - alpha*y(2))*y(1)

yp(2) = (-1 + beta*y(1))*y(2)

在此示例中,公式包含在名为 lotka.m 的文件中。此文件使用 α=0.01 和 β=0.02 的参数值。

type lotka % 加载对应lotka.m文件内容function yp = lotka(t,y)
yp = diag([1 - .01*y(2), -1 + .02*y(1)])*y;

模拟系统

使用 ode23 在区间 0<t<15 中求解 lotka 中定义的微分方程。使用初始条件 x(0)=y(0)=20,使捕食者和猎物的数量相等。

t0 = 0;
tfinal = 15;
y0 = [20; 20];
[t,y] = ode23(@lotka,[t0 tfinal],y0);

绘制结果

绘制两个种群数量对时间的图。

plot(t,y)
title('Predator/Prey Populations Over Time')
xlabel('t')
ylabel('Population')
legend('Prey','Predators','Location','North')

现在绘制两个种群数量的相对关系图。生成的相平面图非常清晰地表明了二者数量之间的循环关系。

plot(y(:,1),y(:,2))
title('Phase Plane Plot')
xlabel('Prey Population')
ylabel('Predator Population')

比较不同求解器的结果

使用 ode45 而不是 ode23 再次求解该方程组。ode45 求解器的每一步都需要更长的时间,但它的步长也更大。然而,ode45 的输出是平滑的,因为默认情况下,此求解器使用连续展开公式在每个步长范围内的四个等间距时间点生成输出。(您可以使用 ‘Refine’ 选项调整时间点数。)绘制两个解进行比较。

[T,Y] = ode45(@lotka,[t0 tfinal],y0);plot(y(:,1),y(:,2),'-',Y(:,1),Y(:,2),'-');
title('Phase Plane Plot')
legend('ode23','ode45')

结果表明,使用不同的数值方法求解微分方程会产生略微不同的答案。

MATLAB 数学应用 微分方程 常微分方程 求解捕食者-猎物方程相关推荐

  1. MATLAB 数学应用 微分方程 常微分方程 求解非刚性ODE

    本文介绍两个使用 ode45 来求解非刚性常微分方程的示例.MATLAB拥有三个非刚性 ODE 求解器. ode45 ode23 ode113 对于大多数非刚性问题,ode45 的性能最佳.但对于允许 ...

  2. MATLAB 数学应用 微分方程 边界值问题 使用延拓求解BVP问题

    本文讲述了如何使用延拓求解难以进行数值求解的边界值问题,延拓实际上是将问题分解成一系列更简单的问题. 对于 0<e≪1,考虑如下微分方程 ey′′+xy′=−eπ2cos(πx)−πxsin(π ...

  3. MATLAB 数学应用 微分方程 边界值问题 求解具有未知参数的BVP

    本文说明如何使用 bvp4c 求解具有未知参数的边界值问题. 马蒂厄方程在区间 [0,π] 上定义为 y′′+(λ−2qcos(2x))y=0y'^{'} +(λ−2q cos(2x))y = 0y′ ...

  4. matlab 数学建模 一阶常微分方程ode45

    ode45是求常微分方程的数值解的首选方法. matlab提供了求常微分方程数值解的函数.当难以求得微分方程的解析解时,可以求其数值解. matlab中求微分方程数值解的函数有七个:ode45,ode ...

  5. MATLAB 数学应用 微分方程

    本文演示了如何使用 MATLAB 构造几种不同类型的微分方程并求解.MATLAB 提供了多种数值算法来求解各种微分方程: 初始值问题 边界值问题 时滞微分方程 偏微分方程 初始值问题 vanderpo ...

  6. 【Matlab 控制】微分方程 ode45() 求解并绘制曲线

    Matlab 微分方程 ode45 求解并绘制曲线 2. 用 ode45() 求解 2.1 ode45() 函数用法 2.2 示例:求解一阶微分方程 2.2.1 Matlab 代码如下 2.2.2 代 ...

  7. MATLAB 数学应用 微分方程 边界值问题 求解边界值问题

    在边界值问题 (BVP) 中,目标是求常微分方程 (ODE) 的解,该解还需满足某些指定的边界条件.边界条件指定积分区间中两个或多个位置处的解的值之间的关系.在最简单的情形中,边界条件适用于区间的开始 ...

  8. MATLAB 数学应用 微分方程 时滞微分方程 解算时滞微分方程

    时滞微分方程 (DDE) 是当前时间的解与过去时间的解相关的常微分方程.该时滞可以固定不变.与时间相关.与状态相关或与导数相关.要开始积分,通常必须提供历史解,以便求解器可以获取初始积分点之前的时间的 ...

  9. MATLAB 数学应用 微分方程 时滞微分方程 具有常时滞的DDE

    本文讲述了如何使用 dde23 对具有常时滞的DDE(时滞微分方程)方程组求解. 方程组为: y 1 ′ ( t ) = y 1 ( t − 1 ) y'_1(t)=y_1(t−1) y1′​(t)= ...

  10. MATLAB 数学应用 微分方程 时滞微分方程 中立型DDE

    本文讲述了如何使用 ddensd 求解中立型DDE(时滞微分方程),其中时滞出现在导数项中. 方程是: y ′ ( t ) = 1 + y ( t ) − 2 y ( t 2 ) 2 − y ′ ( ...

最新文章

  1. 使用idea创建springboot项目并打成war包发布到weblogic上...
  2. Spring Boot(Spring的自动整合框架)
  3. 解答网友shell问题一例20140702
  4. 大学c语言第三章作业,华中科技大学光电子学院C语言第三章
  5. 使用Oracle LogMiner分析archived log
  6. 「数据库系列三」磁盘、内存和带宽
  7. python和java先学哪个-Python和Java,哪个容易学呢?
  8. python 以行为单位进行字符串的切割
  9. [Android] 针对生成的图片文件在系统Gallery不显示的处理
  10. DirectX修复工具常见问题解答
  11. Android简单制作自定义圆形头像
  12. postgreSql连接报不支持10验证类型
  13. WebRTC实现简单音视频通话功能
  14. python计算日期间的差值,python 计算时间、日期差值类
  15. android app报告,知乎APP用户体验报告
  16. 前端调用高德地图 百度地图
  17. APP开发要么快要么死!
  18. 机器学习入门 --- 贝叶斯 - 中文新闻分类任务
  19. python是高级语言还是机器语言_02_python是一种什么语言?
  20. mono android单选按钮,CLEngine

热门文章

  1. Python深度学习笔记(三)二分类模型
  2. 超频真的不难!G3258超频4.5GHz全攻略
  3. 【学习笔记】状态机编程
  4. SIP信令跟踪工具HOMER
  5. a标签的href属性长度限制
  6. JavaScript 判断数组是否为空
  7. 四元数与欧拉角相互转换
  8. linux下搭建redis内网端口映射工具-rinetd
  9. 我经常登录的GIS专业论坛
  10. 不要奇怪 XP震网病毒缺陷或为2014最大软件漏洞