数学建模:种群相互作用和灰色预测

种群相互作用模型

种群竞争模型

使用Logistic模型 ,规定t时刻两个种群的初始时刻的数量x1,20 .还有t时刻的数量x1,2(t) ,分别的自然增长率r1,2

考虑获取共同资源 ,一个种群的能力是另一个的α倍

matlab代码

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

image-20230720115358421

弱肉强食模型

还是规定初始时刻和t时刻种群数量 ,把有效接触数量考虑进去 ,微分方程还是见课本上

相互依存模型

image-20230720113411371

  • 情况一

image-20230720113900167

image-20230720114033415

注意:

(1)种群乙刚开始有一段下滑,说明不能独自生存,随着甲给它提供食物,乙的数量开始增加。
(2)种群甲和乙最终稳定时的数量均超过了N1和N2,这是因为甲乙之间相互依存,双方数量的增加导致生存环境改善了。

  • 情况二

image-20230720114243112

image-20230720114219647

当α2<1时(单位数量甲(相对于N1)提供的供养乙的食物量为单位数量乙(相对于N2)消耗的供养乙食物量的倍数), image-20230720114406150

  • 情况三

image-20230720114233505

image-20230720114513316

image-20230720114524463

image-20230720114552765

matlab代码

% 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
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('种群甲','种群乙')

image-20230720115243021

微分方程模型预测

  • 微分方程预测就是利用数据直接构造微分函数 ,进行数据拟合
  • 短、中、长期的预测都适合。
  • 反应事物内部规律及其内在关系,但由于方程的建立是以局部规律的独立性假定为基础,当作为长期预测时,误差较大,且微分方程的解比较难以得到。

具体案例

传染病的预测模型、经济增长(或人口)的预测模型、Lanchester战争预测模型、药物在体内的分布与排除预测模型、烟雾的扩散与消失模型

列微分方程的常用方法

  • 直接列方程

利用所学过的公式对某些实际问题列出微分方程。

  • 微元分析法与任意区域上取积分的方法

利用已知的规律建立一些变量(自变量与未知函数)的微元之间的关系式。
然后再通过取极限的方法得到微分方程,或等价地通过任意区域上取积分的方法来建立微分方程。

  • 模拟近似法

在一定的假设下,给出实际现象所满足的规律,然后利用适当的数学方法列出微分方程。
在实际的微分方程建模过程中,也往往是上述方法的综合应用。不论应用哪种方法,通常要根据实际情况,作出一定的假设与简化,并要把模型的理论或计算结果与实际情况进行对照验证,以修改模型使之更准确地描述实际问题并进而达到预测预报的目的。

灰色预测模型

image-20230720115929141

灰色预测就是对灰色系统进行建模 ,系统就是数据集

GM(1,1)预测模型

image-20230720120803276

image-20230720121002692

b叫做灰作用量 ,-a叫做发展系数

OLS: 最小二乘法的应用

  • 原理就是找到最优参数 ,使得每一个残差的平方的和最小化

image-20230720150820171

image-20230720151640211

白化微分方程的推导

image-20230720154731476

一阶微分方程的求法

image-20230720155722363

image-20230720160042792

  • 从上图中我们发现 ,f(x) =image-20230720160245676,C1其实就是image-20230720160213409C2其实就是image-20230720160235220

  • 灰色预测模型中 ,原始数据不能有负数

  • 数据量太长 ,也推荐使用其他传统的预测模型 ,比如时间序列模型

  • 注意数据的行列 ,一般是列向量 ,如果输入的是行向量 ,使用转置符号 []’

  • x1 = cumsum(x0) x1得到的是x0的累加序列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值