如何理解logistic函数?
链接:https://www.zhihu.com/question/36714044/answer/78680948
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
稍微系统的讲讲 Logistic 方程在生态学上的出现背景,意义和应用场景。
1.来源
1798年的时候一个叫 Malthus 的英国牧师在查看当地的人口出生记录的时候发现人口的变化率是和人口的数目成正比的,当然你也可以认为这个正比的关系是生态学上的一个基本假设。
如果用这个函数来表示时刻某个地区的人口总数(或者是牛羊的数目或者是细菌的数目)的话我们得到的应该是下面这个方程:
其中是常数,表示的变化率。(注意这里为了方便我直接写了连续极限下的方程并且忽略掉了一些随机效应的影响,理论上讲只有系统尺寸趋于无穷大的情况下这个描述才是准确的,但这样写并不影响我们理解问题的本质。下面用了同样的处理。)
这个微分方程可以直接积分解出:
其中是积分常数,不过这里可以理解为系统的初值即。如果考虑的情况下显然会随着时间指数增长(如下图),如果自然界确实是按照这个规律工作的那么地球早该被各种生物塞的满满的。另一方面如果 那么 就会指数衰减,这部分就不细说了,后面主要还是关注种群增长的问题。
<img src="https://pic3.zhimg.com/50/5f555405d547fadae322426b0e254da9_hd.jpg" data-rawwidth="360" data-rawheight="225" class="content_image" width="360">
图1:随时间指数增长
为了克服数目无限增长的问题,模型必须做出修改才行,这个修改最早由
Pierre-François Verhulst 在1838年提出:
这就是所谓的 Logistic 方程了。能看出是在原有模型的基础上增加了这一项。也是个常数,用来表示系统的容量(capacity),这里认为不管是什么物种生存环境总是有限制的,这个限制可以体现在空间或者资源上。
多了这一项最直接的结果就是系统不能无限制的增长了:随着随时间的增长并不断接近系统的容量,的增长率是逐渐减小的。后面我们会更详细的考察这个方程的性质,这里先直观的看看模型设计成这样的意义。
Logistic 方程描述的系统中人口的增长率除了和当时的人口数目成正比以外还要受到系统容量的限制;或者你可以理解为人口的增长速度除了和当时的人口数目成正比以外还和系统中的空位成正比。
为了下面讨论方便,我们先把 Logistic 方程重新标度一下,令:
并在方程两边同时除以,方程变为:
这是 Logistic 方程更一般的形式,这里表示人口在容量确定的系统中所占的比例。
2. Logistic 方程的性质
实际上 Logistic 方程是可以直接解出的:
为了更直观的考察方程的性质,现在我们假设初始时刻的取值是多种多样的,我们关心的是随着时间的流逝,是如何变化的,看图:
<img src="https://pic4.zhimg.com/50/8a1f2817ffb8999ceb1945ecbf165157_hd.jpg" data-rawwidth="360" data-rawheight="250" class="content_image" width="360">
图2:分别取区间上一些不同的值的情况下随时间的变化情况
从图中可以看到很多有意思的东西:
最明显的,不管初值如何取,最终都会变到!无限制增长的问题被解决了。
细心的朋友应该发现图中有些是大于1的,如果要求一个萝卜一个坑的话这当然是不可能的,但如果系统容量的限制没有那么强允许大家都挤一挤的话这种情况还是可以理解的。有意思的尽管初值大于,还是很快就变到1了,完全符合逻辑。这么一看 Logistic 方程虽然简单但实在很巧妙。
另外图中还有一条的线因为和横轴重叠了所以看不清,这条线也好理解,如果一开始那么就永远等于。
下面这段话只作为辅助理解。 有朋友应该已经意识到了对 Logistic 方程来说,和是两个很特殊的点,当取到这两个点的时候方程的右边为0也即的变化率为0。我们称这两个点为不动点。但这两个点又不一样,其中1是稳定不动点,0是不稳定的,形象一点的理解的话0点在山的最高峰,1在最谷底,如果你恰巧落在了0点,那么可以保持不动,除此之外落在其他的任何上的地方都会最终跑到1处去。因为现实世界并非是确定性的,所以不太容易见到系统保持在0这样的不稳定不动点上,相比之下1因为其稳定性要常见的多。 这里并没有讨论的情况,因为在生态学上这是没有意义的,不过感兴趣的朋友可以自己分析一下会是个什么情况。
3.应用
3.1 生态学上的应用
因为 Logistic 方程形式简单但内涵丰富所以本身就是个很好的模型,到现在也常常被拿出来说明问题。
有时也在其基础上做一些改动来描述更加复杂的情况。比如下面这个方程:
多出来的这个也是个常数,叫做 Allee 阈值,比较有趣的是的情况,看图:
<img src="https://pic4.zhimg.com/50/57179b45ad09c42488a61f3f56dbaaf2_hd.jpg" data-rawwidth="360" data-rawheight="248" class="content_image" width="360">
图3: 的情况下不同初值随时间变化的情况
多了这一项以后方程的不动点变成三个,稳定性也有所变化。直接从图上看的话就是如果,最后会趋于1;如果,最后会趋于0。
这描述了这样一个情景:如果在一个新的环境下群体的数目不是足够多到超过了某个阈值,那么这个群体会最终消亡;如果达到了这个阈值,则可以兴盛繁荣。这个作用被称为 Allee 效应,体现了群体里面个体之间相互依存的关系。
3.2 在化学上的应用
考虑下面这个化学反应:
速率为 速率为
假设系统中总的粒子数是确定的用分别表示两种物质的浓度,并考虑会得到下面的方程:
得到的也是个类 Logistic 形式的方程。这至少说明 Logistic 方程的形式有很强的普遍性。
其他方面的应用可以参考其他的答案,我不太懂就不多说了。
4.彩蛋
Logistic 方程其实远不是表面上看起来的这么简单。考虑它的分立形式:
这就是大名鼎鼎的 Logistic 映射了,迭代这个映射会出现混沌!
<img src="https://pic7.zhimg.com/50/0009499fa0fa364d93c89865728587a0_hd.jpg" data-rawwidth="1152" data-rawheight="720" class="origin_image zh-lightbox-thumb" width="1152" data-original="https://pic7.zhimg.com/0009499fa0fa364d93c89865728587a0_r.jpg">
图4: Logistic 映射的分岔图
5.参考文献
对系统生物学感兴趣的朋友可以看看这本:《Mathematical Biology (豆瓣)》 对数学要求会高一点。
Logistic 方程是个简单的非线性动力系统,简单的分析可以参考《常微分方程 (豆瓣)》
如果你还对混沌感兴趣的话那么看这本:《Differential Equations, Dynamical Systems, and an Introduction to Chaos, Third Edition (豆瓣)》才发现这书已经出到第三版了
如何理解logistic函数?的更多相关文章
- [Machine Learning] logistic函数和softmax函数
简单总结一下机器学习最常见的两个函数,一个是logistic函数,另一个是softmax函数,若有不足之处,希望大家可以帮忙指正.本文首先分别介绍logistic函数和softmax函数的定义和应用, ...
- 深入理解javascript函数系列第一篇——函数概述
× 目录 [1]定义 [2]返回值 [3]调用 前面的话 函数对任何一门语言来说都是一个核心的概念.通过函数可以封装任意多条语句,而且可以在任何地方.任何时候调用执行.在javascript里,函数即 ...
- 深入理解javascript函数系列第二篇——函数参数
× 目录 [1]arguments [2]内部属性 [3]函数重载[4]参数传递 前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传 ...
- 深入理解javascript函数系列第三篇——属性和方法
× 目录 [1]属性 [2]方法 前面的话 函数是javascript中的特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本 ...
- 深入理解JS函数中this指针的指向
函数在执行时,会在函数体内部自动生成一个this指针.谁直接调用产生这个this指针的函数,this就指向谁. 怎么理解指向呢,我认为指向就是等于.例如直接在js中输入下面的等式: console.l ...
- [机器学习入门篇]-Logistic函数与Softmax函数
1.Logistic函数 在维基百科中,对logistic函数这样介绍道: A logistic function or logistic curve is a common "S" ...
- 理解JavaScript函数参数
前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,甚至可以不传参数. arguments javascri ...
- 深入理解javascript函数系列第一篇
前面的话 函数对任何一门语言来说都是核心的概念.通过函数可以封装任意多条语句,而且可以在任何地方.任何时候调用执行.在javascript里,函数即对象,程序可以随意操控它们.函数可以嵌套在其他函数中 ...
- 深入理解javascript函数系列第三篇
前面的话 函数是javascript中特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本文是深入理解javascript函数 ...
随机推荐
- ios 利用runtime任性跳转
在开发项目中,会有这样变态的需求: 推送:根据服务端推送过来的数据规则,跳转到对应的控制器 feeds列表:不同类似的cell,可能跳转不同的控制器(嘘!产品经理是这样要求:我也不确定会跳转哪个界面哦 ...
- mac不限速下载百度网盘
本文转载自:https://blog.csdn.net/u010837612/article/details/80029212 相信大家都比较困惑,百度网盘客户端限速后一般只有几十K的下载速度,Win ...
- Outlook 2016 自动发送/接收无法正常工作
如果您的自动/发送接收由于某种原因停止工作,可能会非常令人沮丧,因为您必须记住手动执行发送/接收(F9).如果您遇到Outlook无法自动发送或接收电子邮件的问题,可以尝试以下几项操作. #1 发送/ ...
- robotframework介绍
1.测试用例使用文本文件(TXT或者TSV文件)保存,使用制表符分隔数据.可以方便的使用任何文本编辑器,或者EXCEL编辑测试用例.也可以使用HTML格式创建用例.2.测试用例中支持变量使用,可以使用 ...
- Win10权限问题
通过组策略打开Administrator用户后,Edge.图片查看器等内置程序不能使用,提示“无法使用内置管理员账户打开” 网上的方法: 1.组策略:本地安全策略编辑器——安全设置——本地策略——安全 ...
- Java 变量及基本数据类型
1.Java变量 1.1 变量的概念 内存中开辟的一块存储空间,用于存放运算过程中需要用到的数据: 该区域有自己的名称(变量名)和类型(数据类型): 该区域的数据可以在同一类型范围内不断变化: 1) ...
- Oracle RAC/Clusterware 多种心跳heartbeat机制介绍 RAC超时机制分析
ORACLE RAC中最主要存在2种clusterware集群件心跳 & RAC超时机制分析: 1.Network Heartbeat 网络心跳 每秒发生一次: 10.2.0.4以后网络心跳 ...
- C# 数据结构 - 单链表 双链表 环形链表
链表特点(单链表 双链表) 优点:插入和删除非常快.因为单链表只需要修改Next指向的节点,双链表只需要指向Next和Prev的节点就可以完成插入和删除操作. 缺点:当需要查找某一个节点的时候就需要一 ...
- 解决 cocos2dx iOS/mac 设置纹理寻址模式后纹理变黑的问题
sprite:getTexture():setTexParameters(gl.LINEAR,gl.LINEAR,gl.REPEAT,gl.REPEAT) 在安卓设备上,设置了纹理自定义寻址模式,纹理 ...
- 【动态规划】bzoj1939: [Croatian2010] Zuma
隐约记得类似的一道JSOI祖玛……然后好像这题不能够把珠子合并成一段?或许是因为这里珠子碰在一起之后可以不消除? Description 有一行 N 个弹子,每一个都有一个颜色.每次可以让超过 K 个 ...