
在奥林匹斯山上统治著的上帝,乃是永恒的数。 ——雅可比
前段时间小编和朋友聊2020数模美赛F题时,无意间发现了种群竞争模型,感觉还是比较有意思的。所以针对这个模型为大家做个小科普。
注:文末有小白操作(保姆级步骤),就算不会matlab也可以运行算法哦!
种群竞争模型

1.
模型背景
当两个种群为争夺同一食物来源和生存空间相互竞争时,经常出现的结果是,竞争力弱的灭绝,竞争力强的达到环境容许的最大容量。使用种群竞争模型可以描述两个种群相互竞争的过程,分析产生各种结局的条件。
模型可以推广到多个方面,例如不同企业推出的类似产品间的竞争、物种迁移对迁入地物种的影响等。
2.
模型假设
有甲乙两个种群,它们独自生存时数量变化均服从Logistic规律。
两种群在一起生存时,乙对甲增长的阻滞作用与乙的数量成正比;甲对乙有同样作用。
其中x(t),y(t)分别为甲乙两种群的数量,r1 r2为它们的固有增长率,n1 n2为它们的最大容量。s1的含义是对于供养甲的资源来说,单位数量的乙(相对n2)的消耗为单位数量甲(相对n1)消耗的s1倍,s2同理。
3.
代码实现
(以物种共存状态为例、其余状态读者自行探索实现)
fun.m
function dx=fun(t,x,r1,r2,n1,n2,s1,s2) r1=1;%接纳(固有增长率) r2=1;%难民(固有增长率) n1=100;%种群最大容量 n2=100;%种群最大容量 s1=0.8;%s1的含义是对于供养甲的资源来说,单位数量的乙(相对n2)的消耗为单位数量甲(相对n1)消耗的s1倍 s2=0.7; dx=[r1*x(1)*(1-x(1)/n1-s1*x(2)/n2);r2*x(2)*(1-s2*x(1)/n1-x(2)/n2)];
main.m
clc;clear;h=0.1;%所取时间点间隔ts=[0:h:30];%时间区间x0=[10,10];%初始条件opt=odeset('reltol',1e-6,'abstol',1e-9);%相对误差1e-6,绝对误差1e-9[t,x]=ode45(@fun,ts,x0,opt);%使用5级4阶龙格—库塔公式计算plot(t,x(:,1),'r',t,x(:,2),'b','LineWidth',2),grid;figureplot(x(:,1),x(:,2),'LineWidth',2),grid %作相轨线
按照以上代码运行后的结果:
Figure1:甲、乙物种数量随时间变化趋势。
Figure2:甲、乙物种数量之比随时间变化趋势。
4.
小白操作
源代码中的每个参数含义已经标出,可以换不同的值,来对应研究的初始条件。
接下来一步步教你操作。
1.打开matlab,新建两个M文件,里面分别存入上面第三点的代码(分别取名main.m fun.m)。
2.把两个M文件放进文件夹(位置随意),但是一定要与地址栏相对应。
3.按照自己的想法改变两个M文件中对应的数据,然后复制main.m中的代码,粘贴到命令行窗口。按下回车键,就可以看到结果过啦。
本文基于文章链接: https://blog.csdn.net/COCO56/article/details/99708485?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task欢迎关注转发。
END

排版:苏铭
图:苏铭
文:苏铭