【问题标题】:Predator-Prey Modelling in MATLABMATLAB 中的捕食者-猎物建模
【发布时间】:2017-10-21 12:03:53
【问题描述】:

我有一个捕食者-猎物模型:

dR/dt = λR - aRF
dF/dt = -μF + bRF 

其中 λμ 分别是兔子 (R) 和狐狸 (F) 的生长速率,分别处理。 a是狐狸对兔子的捕食率,b是狐狸捕食兔子的种群增长率。​​p>

到目前为止,我有以下代码,但我真的很困惑,我的模型哪里出错了?

function PredPrey   
    lambda = 0.1; % Lambda = Reproduction rate of rabbits   
    mu = 0.15;    % Mu = Death rate of foxes    
    a = 0.005;    % a = Rate of rabbits caught per fox   
    b = 0.002;    % b = foxes born per rabbit caught

    N = 3;

    R = zeros(1,N);
    F = zeros(1,N);
    R(1) = 100;
    F(1) = 10;
    for n = 2:N
        R(n) = R(n-1) + lambda*R(n-1) - a*R(n-1)*F(n-1);
        F(n) = F(n-1) - mu*F(n-1) + b*a*R(n-1)*F(n-1);        
    end
    Xvals = 1:N;
    plot(Xvals,R,'b',Xvals,F,'r')        
end

【问题讨论】:

  • “每抓一只兔子生的狐狸”一词在您声明的模型和代码中有所不同。在模型中使用+bRF,在代码中使用+abRF。正确的选择取决于这个术语代表什么。除此之外,请提供一个清晰的示例,说明您期望的结果与您的实际获得的结果,因为实施似乎还不错。
  • bRF 术语看起来很可疑。你养的兔子越多,下一代的狐狸就越多,但是按照这个说法,如果你有一百万只狐狸和一只兔子,那么你下一代就会有十万只左右的狐狸。这不可能。
  • 我想就是这样,谢谢@Wolfie
  • 如果这是一个错字并且您的问题无法再重现,您可以考虑删除该问题。否则,请查看 P.Kein 的答案,看看是否对您有帮助。

标签: matlab modeling


【解决方案1】:

基本上你有一个需要像 ode45 这样的工具来处理的 odes 系统。建议你看看

https://www.mathworks.com/help/matlab/ref/ode45.html

此外,您可以使用

function f = predPrey(t,x)

f = zeros(2,1);

% x(1) represents the number of rabbits
% x(2) represents the number of foxes

% Model's parameters
a = 0.01
b = 0.02
c = 0.03
d = 0.04    

f(1) = a*x(1) - b*x(1)*x(2);
f(2) = -c*x(2) + d*x(1)*x(2);

end

使用以下命令:

[time,valx] = ode45(@(t,x) predPrey(t,x),[0,5],[200,100]);

求解时间 t = 0 到 t = 5 的系统,初始种群为 200 只兔子和 100 只狐狸。

注意

rabbit = valx(:,1)
fox = valx(:,2)

【讨论】:

    猜你喜欢
    • 2012-02-14
    • 2013-02-23
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多