[英]How to Solve and Plot Lotka-Volterra Differential Equations in Matlab
我想知道是否有人可以帮助我使用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
你的代码很好。 通过这些参数的选择,掠食者简单地消亡,猎物经历指数增长。 由于捕食者变量的值很小,ode45认为需要采取非常小的步骤来正确解决它。 例如,我使用tspan = [0,10]运行代码,时间步数为227485。
你可能有更好的运气要么改变参数,或者如果它们真的是你关心的参数,你可以使用ode23,由于它的稳定性属性,它应该能够采取更大的时间步长。 然而,这也可能很慢。 从根本上说,你的问题是MATLAB试图根据捕食者变量来控制相对误差,这个变量很小并且基本没有意义。 如果你推出了自己没有自适应时间步进的RK4方法,它可能会正常工作。
编辑第二个等式中有一个符号错误。 修复应该给出振荡而不是捕食者灭绝。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.