种群相互作用模型
种群竞争模型
使用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])
弱肉强食模型
还是规定初始时刻和t时刻种群数量 ,把有效接触数量考虑进去 ,微分方程还是见课本上
相互依存模型
- 情况一
注意:
(1)种群乙刚开始有一段下滑,说明不能独自生存,随着甲给它提供食物,乙的数量开始增加。
(2)种群甲和乙最终稳定时的数量均超过了N1和N2,这是因为甲乙之间相互依存,双方数量的增加导致生存环境改善了。
- 情况二
当α2<1时(单位数量甲(相对于N1)提供的供养乙的食物量为单位数量乙(相对于N2)消耗的供养乙食物量的倍数),
- 情况三
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('种群甲','种群乙')
微分方程模型预测
- 微分方程预测就是利用数据直接构造微分函数 ,进行数据拟合
- 短、中、长期的预测都适合。
- 反应事物内部规律及其内在关系,但由于方程的建立是以局部规律的独立性假定为基础,当作为长期预测时,误差较大,且微分方程的解比较难以得到。
具体案例
传染病的预测模型、经济增长(或人口)的预测模型、Lanchester战争预测模型、药物在体内的分布与排除预测模型、烟雾的扩散与消失模型
列微分方程的常用方法
- 直接列方程
利用所学过的公式对某些实际问题列出微分方程。
- 微元分析法与任意区域上取积分的方法
利用已知的规律建立一些变量(自变量与未知函数)的微元之间的关系式。
然后再通过取极限的方法得到微分方程,或等价地通过任意区域上取积分的方法来建立微分方程。
- 模拟近似法
在一定的假设下,给出实际现象所满足的规律,然后利用适当的数学方法列出微分方程。
在实际的微分方程建模过程中,也往往是上述方法的综合应用。不论应用哪种方法,通常要根据实际情况,作出一定的假设与简化,并要把模型的理论或计算结果与实际情况进行对照验证,以修改模型使之更准确地描述实际问题并进而达到预测预报的目的。
灰色预测模型
灰色预测就是对灰色系统进行建模 ,系统就是数据集
GM(1,1)预测模型
b叫做灰作用量 ,-a叫做发展系数
OLS: 最小二乘法的应用
- 原理就是找到最优参数 ,使得每一个残差的平方的和最小化
白化微分方程的推导
一阶微分方程的求法
-
从上图中我们发现 ,f(x) =
,C1其实就是
C2其实就是
-
灰色预测模型中 ,原始数据不能有负数
-
数据量太长 ,也推荐使用其他传统的预测模型 ,比如时间序列模型
-
注意数据的行列 ,一般是列向量 ,如果输入的是行向量 ,使用转置符号 []’
-
x1 = cumsum(x0) x1得到的是x0的累加序列