1. 程式人生 > 其它 >數模-微分方程(種群相互競爭模型)

數模-微分方程(種群相互競爭模型)

模型



程式碼

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])

結果

上面只給出了一組引數的結果圖,引數的設定可以自己去調整