4

我想知道是否有人可以帮助我使用 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 什么都不会发生...

任何帮助,将不胜感激!

谢谢!

——斯内哈·英古瓦

4

1 回答 1

5

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

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

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

于 2012-02-04T02:08:54.223 回答