我想知道是否有人能够帮助我使用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
答案 0 :(得分:4)
你的代码很好。通过这些参数的选择,掠食者简单地消亡,猎物经历指数增长。由于捕食者变量的值很小,ode45认为需要采取非常小的步骤来正确解决它。例如,我使用tspan = [0,10]运行代码,时间步数为227485。
你可能有更好的运气要么改变参数,或者如果它们真的是你关心的参数,你可以使用ode23,由于它的稳定性属性,它应该能够采取更大的时间步长。然而,这也可能很慢。从根本上说,你的问题是MATLAB试图根据捕食者变量来控制相对误差,这个变量很小并且基本没有意义。如果你推出了自己没有自适应时间步进的RK4方法,它可能会正常工作。
编辑第二个等式中有符号错误。修正应该给出振荡而不是掠食者灭绝。