繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM