Mathematica仿真竞争性Lotka-Volterra方程(3种群)
在生物学上,物种(英语:species)是生物分类的基本单位。物种位于生物分类法中最底级,在属之下。笼统来讲,同一物种的任意两个性别适当的健康个体,都能够交配繁殖出具生殖能力的后代。满足以上条件的最大群体称为物种。根据演化生物学家恩斯特.麦尔的定义,物种是:能够相互配育的自然种群的类群,且这些类群与其它的类群在生殖上相互隔离。昆虫学家陈世骧(1978)对物种所下定义为:物种是繁殖单元,由又连续又间断的居群所组成;物种是进化单元,是生物系统线上的基本环节,是分类的基本单元。
在生物学上,种群(英语:population)指代在一定空间范围内同时生活的同种生物的全部个体;或者说是由个体组成,而且能够进行交配的群体。种群的个体之间一般享有同一个基因库。
直观的理解(可能不严谨),种群是物种的子集,值的是某物种在一定范围内的个体集合。比如青蛙是一个物种,这片池塘里的青蛙是一个种群。
下面的论述中,并不严格区分物种和种群。
竞争性Lotka-Volterra方程是物种争夺某些共同资源的种群动态的简单模型。它们可以进一步推广到广义 Lotka-Volterra 方程以包括营养相互作用。
考虑3个具有Logistic动力学的3个种群和,在Lotka-Volterra公式的基础上添加额外的项来解释物种的相互作用。因此,竞争性Lotka-Volterra方程是:
这是一个常微分方程组。方程中并不显含时间,我们称这样的ODE是自治的。
这里代表物种对物种种群的影响。注意不必等于。因为是竞争版本,所有值都是非负的。
使用Mathematica来演示给定ODE参数和初始条件下的3物种数目随时间的演化情况。
(事实上,代码的框架是通用性质的,很容易修改来仿真其他的更加一般的ODE系统)
Manipulate[
sol=NDSolve[
{
x1'[t]==r1*x1[t]*(1-\[Alpha]11*x1[t]-\[Alpha]12 x2[t]-\[Alpha]13 x3[t]),
x2'[t]==r2*x2[t]*(1-\[Alpha]21*x1[t]-\[Alpha]22 x2[t]-\[Alpha]23 x3[t]),
x3'[t]==r3*x3[t]*(1-\[Alpha]31*x1[t]-\[Alpha]32 x2[t]-\[Alpha]33 x3[t]),
x1[0]==x10,
x2[0]==x20,
x3[0]==x30
},
{x1[t],x2[t],x3[t]},
{t,0,time}
];
Pane[
Grid[{ {
Show[
{
ParametricPlot3D[{x1[t],x2[t],x3[t]}/.sol,{t,0,time},
PlotStyle->{Thick,Blue}],
Graphics3D[
{Red,PointSize[Large],Point[{x1[t],x2[t],x3[t]}/.sol/.{t->0}],Green,Point[{x1[t],x2[t],x3[t]}/.sol/.{t->time}]}
]
},
If[range==="fixed",PlotRange->{ {0,x1max},{0,x2max},{0,x3max}},PlotRange->All],
BoxRatios->{1,1,1},
If[values,Ticks->Automatic,Ticks->None],
AxesLabel->(Style[#,Blue]&/@(Row/@Transpose[{Table[Subscript[Style["X",Italic],i],{i,3}],If[label,{"\n(Lowest\ntrophic level)","\n(Intermediate\ntrophic level)","\n(Top\npredators)"},{"","",""}]}])),
ImageSize->{400,400},ImagePadding->35
]},
{Text@Grid[{
{
Grid[{
{Row[{
Subscript[Style["X",Italic], 3],
" ("<>ToString[Round[100x3[t]/(x1[t]+x2[t]+x3[t])/.sol/.{t->time}][[1]]]<>"%)"
}]},
{Row[{
Subscript[Style["X",Italic], 2],
" ("<>ToString[Round[100x2[t]/(x1[t]+x2[t]+x3[t])/.sol/.{t->time}][[1]]]<>"%)"
}]},
{Row[{
Subscript[Style["X",Italic], 1],
" ("<>ToString[Round[100x1[t]/(x1[t]+x2[t]+x3[t])/.sol/.{t->time}][[1]]]<>"%)"
}]}
}],
BarChart[Round@Flatten[{x1[t],x2[t],x3[t]}/.sol/.{t->time}],
BarSpacing->0,
BarOrigin->Left,
ChartStyle->{ {RGBColor[.1,.9,.1],RGBColor[.4,.6,.4],RGBColor[.7,.3,.7]}},
Axes->None,
LabelingFunction->Left,
AspectRatio->.25,
ImageSize->{200,100}
]
}
},
Alignment->{Right,Left}]}
}],
ImageSize->400
],
Style["initial variable values",Bold],
{ {x10,2000,Subscript["X",1]},1,7000,.01,Appearance->"Labeled",ImageSize->Tiny},
{ {x20,175,Subscript["X",2]},1,7000,.01,Appearance->"Labeled",ImageSize->Tiny},
{ {x30,200,Subscript["X",3]},1,7000,.01,Appearance->"Labeled",ImageSize->Tiny},
Style["parameter values",Bold],
{ {r1,2.84,Subscript["r",1]},0,5,.01,Appearance->"Labeled",ImageSize->Tiny},
{ {r2,1.5,Subscript["r",2]},0,5,.01,Appearance->"Labeled",ImageSize->Tiny},
{ {r3,.62,Subscript["r",3]},0,5,.01,Appearance->"Labeled",ImageSize->Tiny},
{ {\[Alpha]11,.22},0,1,.01,Appearance->"Labeled",ImageSize->Tiny},
{ {\[Alpha]12,.22},0,1,.01,Appearance->"Labeled",ImageSize->Tiny},
{ {\[Alpha]13,.22},0,1,.01,Appearance->"Labeled",ImageSize->Tiny},
{ {\[Alpha]21,.22},0,1,.01,Appearance->"Labeled",ImageSize->Tiny},
{ {\[Alpha]22,.22},0,1,.01,Appearance->"Labeled",ImageSize->Tiny},
{ {\[Alpha]23,.22},0,1,.01,Appearance->"Labeled",ImageSize->Tiny},
{ {\[Alpha]31,.22},0,1,.01,Appearance->"Labeled",ImageSize->Tiny},
{ {\[Alpha]32,.22},0,1,.01,Appearance->"Labeled",ImageSize->Tiny},
{ {\[Alpha]33,.22},0,1,.01,Appearance->"Labeled",ImageSize->Tiny},
Style["time period",Bold],
{ {time,10,""},1,100,.01,Appearance->"Labeled",ImageSize->Tiny},
Style["maximum values on axes",Bold],
{ {range,"floating",""},{"fixed","floating"}},
{ {x1max,3100,Subscript["X",1]},0,20000,.01,Appearance->"Labeled",ImageSize->Tiny},
{ {x2max,300,Subscript["X",2]},0,5000,.01,Appearance->"Labeled",ImageSize->Tiny},
{ {x3max,500,Subscript["X",3]},0,5000,.01,Appearance->"Labeled",ImageSize->Tiny},
Style["label trophic levels",Bold],
{ {label,False,""},{True,False}},
Style["display values on axes",Bold],
{ {values,True,""},{True,False}},
TrackedSymbols->True,SynchronousUpdating->True,
ControlPlacement->Left,AutorunSequencing->{2,5,9,13,15}
]
从上图可以看到,从红色点标示的状态,经过10个时间单位,演化到绿色点表示的状态。随时间演化的轨迹线也在图中给了出来。
这个演示,除去必要的核心功能要点外,可以选择坐标轴是否显示数值,选择静态/动态设置显示出的坐标轴的最大值,还可以标定最后物种的数目比例。
最后,有需要欢迎通过公众号联系我们.
公zhong号:320科技工作室
Mathematica仿真竞争性Lotka-Volterra方程(3种群)相关推荐
- R语言RStan贝叶斯示例:重复试验模型和种群竞争模型Lotka Volterra
最近我们被客户要求撰写关于RStan的研究报告,包括一些图形和统计输出. Stan是一种用于指定统计模型的概率编程语言.Stan通过马尔可夫链蒙特卡罗方法(例如No-U-Turn采样器,一种汉密尔顿蒙 ...
- simulink电机仿真学习 -根据转矩方程搭建速度环矢量模型
爱自己是一生浪漫的开始. 电机控制中,无论什么观测器,最终都是为了得到电机的电角度跟角速度,这里就通过转矩方程来进行简单的速度环矢量控制模型. 目标:搭建简单的由转矩方程计算角度速度的矢量控制 ...
- 使用matlab 仿真洛伦兹方程
参考 matlab 绘 洛伦兹系统 3D相图_颹蕭蕭的博客-CSDN博客_matlab三维相图 代码如下: % 洛伦兹系统仿真 clear all; % 洛伦兹系统 % % ************* ...
- 高等数学Mathematica实验题——绘制极坐标方程的曲线图形(e螺线、肾腰线、蝴蝶线(e Sprial, Kidney Curve, Butterfly Curve))
题目:1.3 - 11. 绘制以下极坐标方程所描述的曲线图形: (1) ρ = lnθ (e螺线) (2) ρ = 1 + 2 Sin (θ/2) (肾腰线) (3) ρ = e^Sinθ - 2 C ...
- 干货!神经辛形式:学习一般坐标系上的哈密尔顿方程
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 近年来,人们对学习哈密尔顿方程的方法进行了大量研究.尽管这些方法非常有前途,但常用的哈密尔顿方程的表示方法使用广义动量,而广义动量一般是 ...
- 种群内禀增长率matlab求法,数学建模讲义:第三讲微分方程模型
<数学建模讲义:第三讲微分方程模型>由会员分享,可在线阅读,更多相关<数学建模讲义:第三讲微分方程模型(74页珍藏版)>请在人人文库网上搜索. 1.第三讲 微分方程模型,动态模 ...
- 转-基于OpenGL的3D天空仿真
在进行3D场景渲染时,天空是必不可少的因素.对于3D天空的模拟在视景仿真系统.计算机游戏.三维动画中有着广泛的应用.但是,目前对于天空的仿真还存在很多不足,一些模拟方法中存在实现复杂.计算耗时.图像分 ...
- 基于OpenGL的3D天空仿真
From:http://www.c-cnc.com/dz/news/news.asp?id=18622 在进行3D场景渲染时,天空是必不可少的因素.对于3D天空的模拟在视景仿真系统.计算机游戏.三维动 ...
- 计算机系统仿真缩写,仿真语言
仿真语言是仿真研究中基于通用计算机语言而又比其更高级的软件系统.仿真语言为仿真研究人员提供了专门用于建模.仿真实验和仿真结果统计.分析.显示的程序语句,研究人员可以不必深入掌握通用计算机高级语言的编程 ...
- Matlab实现遗传算法(附上完整仿真源码)
遗传算法(Genetic Algorithm,GA)是一种基于生物进化理论的优化算法,通过模拟自然界中的遗传过程,来寻找最优解. 在遗传算法中,每个解被称为个体,每个个体由一组基因表示,每个基因是解空 ...
最新文章
- Github上AI在银行和保险的应用列表
- jvm中的垃圾收集器serial、parNew、parallel Scavenge;serial old、parallel old、CMS、G1
- 介绍sendmail中mail relay的规则
- 关于linux挂载windows共享文件夹的试验
- 信息学奥赛C++语言:蒙氏数学难题
- 如何在Debian 9上配置sources.list
- 【maven】Controller层参数如何设置传null
- 安装GIT(基于Ubuntu Desktop 12.04 LTS)
- unity视频播放,
- SQL Server-【知识与实战VIII】触发器(下)
- 线性代数及其应用(第三版)1.1节习题解答
- 给大学生的劝告——你们为何应该开始接触UNIX/Linux
- 推荐的开源 PHP CMS 系统
- 台式计算机开关电源原理图,计算机开关电源基本结构及原理介绍
- 当索尼停产单反:好产品是怎么被时代「消融」的?
- 加班不能正常主张加班费的原因解析
- EXCEL如何将一列转为一行
- 在计算机睡眠时主机关闭,电脑为什么睡眠后就关机怎么办
- Linux 源码分析 之 raw socket 分析 一 recvfrom过程
- vue实战-实现换主题/皮肤功能