如何在Matlab中求解并绘制Lotka-Volterra微分方程

时间:2012-02-04 00:39:30

标签: matlab math plot equations differential-equations

我想知道是否有人能够帮助我使用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没有任何反应......

任何帮助将不胜感激!

谢谢!

-Sneha Inguva

1 个答案:

答案 0 :(得分:4)

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

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

编辑第二个等式中有符号错误。修正应该给出振荡而不是掠食者灭绝。