數模-微分方程(種群相互依存模型)
阿新 • • 發佈:2022-05-08
模型
程式碼
fun1.m
% 情況一:甲可以獨自生存,乙不能獨自生存 function dx=fun1(t,x) % 大家可以修改裡面的引數,來看結果的變化 r1=0.5; r2=0.5; % 甲的增長率和乙的死亡率 N1=300; N2=500; % 甲乙的最大數量 % sigma1: 單位數量的乙種群(相對於N2)提供的供養甲的食物量為單位數量的甲(相對於N1)消耗的供養甲的食物量的倍數。 % sigma2: 單位數量的甲種群(相對於N1)提供的供養乙的食物量為單位數量的乙(相對於N2)消耗的供養乙的食物量的倍數。 sigma1=0.2; sigma2=2; % sigma1=0.2; sigma2=0.8; % 注意:當sigma1*sigma2>1時,微分方程不穩定,matlab計算數值解時可能會報錯,這時候需要調整計算的範圍。 % sigma1=3; sigma2=3; dx = zeros(2,1); dx(1) = r1*x(1)*(1-x(1)/N1+sigma1*x(2)/N2); dx(2) = r2*x(2)*(-1-x(2)/N2+sigma2*x(1)/N1); end
fun2.m
% 情況二:甲乙均可以獨自生存 function dx=fun2(t,x) % 大家可以修改裡面的引數,來看結果的變化 r1=0.5; r2=0.5; % 甲的增長率和乙的增長率 N1=300; N2=500; % 甲乙的最大數量 % sigma1: 單位數量的乙種群(相對於N2)提供的供養甲的食物量為單位數量的甲(相對於N1)消耗的供養甲的食物量的倍數。 % sigma2: 單位數量的甲種群(相對於N1)提供的供養乙的食物量為單位數量的乙(相對於N2)消耗的供養乙的食物量的倍數。 sigma1=0.2; sigma2=2; % sigma1=0.2; sigma2=0.8; % 注意:當sigma1*sigma2>1時,微分方程不穩定,matlab計算數值解時可能會報錯。 dx = zeros(2,1); dx(1) = r1*x(1)*(1-x(1)/N1+sigma1*x(2)/N2); dx(2) = r2*x(2)*(1-x(2)/N2+sigma2*x(1)/N1); end
fun3.m
% 情況三:甲乙均不能獨自生存 function dx=fun3(t,x) % 大家可以修改裡面的引數,來看結果的變化 r1=0.2; r2=0.2; % 甲的死亡率和乙的死亡率 N1=300; N2=500; % 甲乙的最大數量 % sigma1: 單位數量的乙種群(相對於N2)提供的供養甲的食物量為單位數量的甲(相對於N1)消耗的供養甲的食物量的倍數。 % sigma2: 單位數量的甲種群(相對於N1)提供的供養乙的食物量為單位數量的乙(相對於N2)消耗的供養乙的食物量的倍數。 sigma1=0.2; sigma2=2; % sigma1=5; sigma2=5; % sigma1=10; sigma2=10; % 這時候甲乙兩個種群都能活下去了 dx = zeros(2,1); dx(1) = r1*x(1)*(-1-x(1)/N1+sigma1*x(2)/N2); dx(2) = r2*x(2)*(-1-x(2)/N2+sigma2*x(1)/N1); end
code.m
clc;clear
% 情況一:甲可以獨自生存,乙不能獨自生存
[t,x]=ode45('fun1',[0 50],[80 100]);
figure(1)
plot(t,x(:,1),'r-',t,x(:,2),'b-') % x的第一列是甲種群數量,x的第二列是乙種群數量
legend('種群甲','種群乙')
% 情況二:甲乙均可以獨自生存
[t,x]=ode45('fun2',[0 50],[80 100]);
figure(2)
plot(t,x(:,1),'r-',t,x(:,2),'b-') % x的第一列是甲種群數量,x的第二列是乙種群數量
legend('種群甲','種群乙')
% 情況三:甲乙均不能獨自生存
[t,x]=ode45('fun3',[0 50],[80 100]);
figure(3)
plot(t,x(:,1),'r-',t,x(:,2),'b-') % x的第一列是甲種群數量,x的第二列是乙種群數量
legend('種群甲','種群乙')