數模-微分方程(種群相互競爭模型)
阿新 • • 發佈:2022-05-08
模型
程式碼
fun.m
function dx=fun(t,x) % 大家可以修改裡面的引數,來看結果的變化 r1=0.5; r2=0.5; % 甲乙的增長率 % r1=0.8; r2=1; % 甲乙的增長率 N1=300; N2=500; % 甲乙的最大數量 % sigma1: 單位數量的乙種群(相對於N2)消耗的供養甲的食物量為單位數量的甲(相對於N1)消耗的供養甲的食物量的倍數。 % sigma2: 單位數量的甲種群(相對於N1)消耗的供養乙的食物量為單位數量的乙(相對於N2)消耗的供養乙的食物量的倍數。 sigma1=0.5; sigma2=2; % sigma1=0.5; sigma2=4; % sigma1=0.4; sigma2=0.2; % 當sigma1和sigma2同時大於1時(這種現象本身在自然界就幾乎不可能出現),得到的結果不穩定。 % sigma1=3; sigma2=2; % sigma1=2.2; sigma2=2; 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 % Matlab求不出來解析解 % dsolve('Dx1 = 0.5*x1*(1-x1/300-0.5*x2/500)','Dx2=0.5*x2*(1-x2/500-2*x1/300)','x1(0)=80,x2(0)=100','t') % 下面用ode45函式求數值解 % 自變數為時間t,範圍為0-30; 甲乙兩個種群的數量初始值為80,100(隨便給的,大家可以調整來看結果的變化) [t,x]=ode45('fun',[0 30],[80 100]); plot(t,x(:,1),'r-',t,x(:,2),'b-') % x的第一列是甲種群數量,x的第二列是乙種群數量 legend('種群甲','種群乙') % axis([0 30 0 500])
結果
上面只給出了一組引數的結果圖,引數的設定可以自己去調整