sne*_*zle 4 math matlab 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);
Run Code Online (Sandbox Code Playgroud)
我保存了文件并确保它在当前目录中,然后在命令窗口中键入以下代码:
clc
tspan = [0, 20];
y0 = [10; 10];
ode = @(t, y) pred_prey_odes(t, y);
[t, y] = ode45(ode, tspan, y0);
plot (t,y)
Run Code Online (Sandbox Code Playgroud)
然而,没有情节弹出。事实上,matlab 没有任何反应,我什至无法清除命令窗口。如果我输入 clc 没有任何反应...
任何帮助,将不胜感激!
谢谢!
-Sneha Inguva
你的代码没问题。通过选择这种参数,捕食者会简单地灭绝,而猎物会经历指数增长。由于捕食者变量的值很小,ode45 认为它需要采取非常小的步骤才能正确解决它。例如,我使用 tspan = [0,10] 运行您的代码,时间步数为 227485。
您可能会更幸运地更改参数,或者如果这些参数确实是您关心的参数,您可以使用 ode23,由于它的稳定性属性,它应该能够采用更大的时间步长。但是,这也可能很慢。从根本上说,您的问题是 MATLAB 试图根据捕食者变量来控制相对误差,该变量很小且基本上毫无意义。如果您推出自己的没有自适应时间步长的 RK4 方法,它可能会正常工作。
编辑第二个方程中存在符号错误。解决这个问题应该会产生振荡而不是捕食者灭绝。