【问题标题】:How to Solve and Plot Lotka-Volterra Differential Equations in Matlab如何在 Matlab 中求解和绘制 Lotka-Volterra 微分方程
【发布时间】:2012-02-26 14:03:35
【问题描述】:

我想知道是否有人可以帮助我使用 MatLab 解决 Lotka-Volterra 方程。我的代码似乎不起作用。我执行以下操作:

第 1 步 -

我创建了一个名为 pred_prey_odes.m 的文件,其中包含以下代码:

% the purpose of this program is to model a predator prey relationship 
% I will be using the Lotka-Volterra equations 

% Program consists of the following differential equations: 
% dY1/dt = a * Y1 - c * Y1 * Y2
% dY2/dt = b * Y2 - d * Y1 * Y2 

function dy = pred_prey_odes(t, y) 
% function that is to be integrated 

%select constants 
a = 1;  
b = 2;  
c = 3; 
d = 4; 

%set up differential equations 
dy = zeros(2,1); 
dy(1) = a * y(1) - c * y(1) * y(2); 
dy(2) = b * y(2) - d * y(1) * y(2); 

我保存了文件并确保它在当前目录中,然后在命令窗口中输入以下代码:

clc
tspan = [0, 20]; 
y0 = [10; 10]; 
ode = @(t, y) pred_prey_odes(t, y); 
[t, y] = ode45(ode, tspan, y0); 
plot (t,y)

但是,没有情节弹出。事实上,在 matlab 中什么都没有发生,我什至无法清除命令窗口。如果我输入 clc 什么都不会发生...

任何帮助将不胜感激!

谢谢!

-斯内哈因古瓦

【问题讨论】:

  • 所以命令提示符不返回?该算法可能仍在运行。尝试按 Ctrl-C 退出操作。如果是这种情况,要么是您的实现有问题,要么是 ode45 需要很长时间才能解决

标签: matlab math plot equations differential-equations


【解决方案1】:

您的代码很好。通过这种参数选择,掠食者简单地消亡,猎物经历指数增长。由于食肉动物变量的值很小,ode45 认为它需要采取非常小的步骤才能正确解决它。例如,我使用 tspan = [0,10] 运行您的代码,时间步数为 227485。

您可能会更幸运地更改参数,或者如果这些参数确实是您关心的参数,您可以使用 ode23,由于它的稳定性属性,它应该能够采取更大的时间步长。但是,这也可能很慢。从根本上说,您的问题是 MATLAB 正试图根据捕食者变量控制相对误差,该变量很小且基本上没有意义。如果您推出自己的 RK4 方法,但没有自适应时间步进,它可能会正常工作。

EDIT 第二个等式中存在符号错误。解决这个问题应该会产生振荡,而不是捕食者灭绝。

【讨论】:

  • 哦!谢谢你。我将尝试更改参数,看看会发生什么。
  • 嗨...您能再提出一些建议吗?我尝试使用 ode23 并玩弄参数,但没有雪茄……一个人口死亡,而另一个人口仍然爆炸。您能否就参数和起始人群提出一些建议?
  • 抱歉,您的文件在第二个等式的符号中有错误。该文件应具有: dy = zeros(2,1); dy(1) = a * y(1) - c * y(1) * y(2); dy(2) = -b * y(2) + d * y(1) * y(2);
  • 我认为 Lotka-Volterra 的全部特点是,无论您选择何种(正)参数和初始条件,基本上您总是应该得到振荡。还要注意 y0 = [b/d,a/c] 应该是系统的一个固定点,所以选择接近 y0 = [0.9*(b/d),1.1*(a/c)] 的东西应该给出小的振荡。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多