两种群相互竞争模型如下:
dxxy r1x(1 s1)dtn1n2
dyyx r2y(1 s2)dtn2n1 其中x(t),y(t)分别为甲乙两种群的数量,r1,r2为它们的固有增长率,n1,n2
为它们的最大容量。s1的含义是,对于供养甲的资源来说,单位数量的乙(相对n2)的消耗为单位数量甲(相对n1)消耗的s1倍,对s2可以作相应解释。
经过计算,该模型无解析解,故用数值方法研究,为此提出以下问题:
(1) 设r1=r2=1,n1=n2=100,s1=0.5,s2=2,初值x0=y0=10,计算x(t),y(t),画出
它们的图形及图(x,y),说明时间t充分大了以后x(t),y(t)的变化趋
势。
(2) 改变r1,r2,n1,n2,x0,y0,但s1,s2不变(或保持s1<1,s2>1),计算并分
析所得结果,若s1=1.5(>1),s2=0.7(<1),再分析结果。由此可以得到
什么结论,请作出解释。
(3) 试验当s1=0.8,s2=0.7时会有什么结果,当s1=1.5,s2=1.7时,又会有
什么结果。
模型求解:
程序如下:
fun.m:
function dx=fun(t,x,r1,r2,n1,n2,s1,s2)
dx=[r1*x(1)*(1-x(1)/n1-s1*x(2)/n2);r2*x(2)*(1-s2*x(1)/n1-x(2)/n2)];
p3.m:
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,1,1,100,100,0.5,2);%使用5级4阶龙格—库塔公式计算%后面的参数传给fun,分别是r1,r2,n1,n2,s1,s2
[t,x]%输出t,x(t),y(t)
plot(t,x,'.-'),grid%输出x1(t), x2(t)的图形
gtext('x1(t)'),gtext(' x2(t)'),pause
plot(x(:,1),x(:,2),'.-'),grid,%作相轨线
gtext('x1'),gtext('x2');
运行结果[t,x]为:
ans =
0 10.0000 10.0000
0.1000 10.8805 10.7120
0.2000 11.8235 11.4454
0.3000 12.8309 12.1962
0.4000 13.9044 12.9595
0.5000 15.0453 13.7295
……