分叉与逻辑斯蒂映射

分叉与逻辑斯蒂映射

上节回顾:

logistic方程 { 微分式: N ′ = r ⋅ N ( 1 − N K ) 积分式: N t = K ⋅ b e − r ⋅ t + b \begin{cases}微分式:&N'=r\cdot N(1-\frac{N}{K}) \\积分式:&N_{t}=\frac{K\cdot b}{e^{-r\cdot t}+b}\end{cases} {微分式:积分式:N=rN(1KN)Nt=ert+bKb

一、系统的概念

系统(System):多元素有序排列、相互关联功能单位(个人理解)。e.g.生态学系统 vs. 生态系统
系统一般具有三大要素:
{ 1 、元素( E l e m e n t s ) 2 、关系( R e l a t i o n s h i p ) 3 、功能( F u n c t i o n ) \begin{cases}1、元素(Elements)\\2、关系(Relationship)\\3、功能(Function)\end{cases} 1、元素(Elements2、关系(Relationship3、功能(Function
此时的logistic方程 N ′ = r ⋅ N ( 1 − N K ) N'=r\cdot N(1-\frac{N}{K}) N=rN(1KN) 就是一个微分动力系统
{ 左边 = N ′ = d N d t :包含有参数 t ,是时变系统 右边 = r ⋅ N ( 1 − N K ) :不包含 t 参数,为自治系统 \begin{cases}左边=N'=\frac{dN}{dt}:包含有参数t,是时变系统\\右边=r\cdot N(1-\frac{N}{K}):不包含t参数,为自治系统\end{cases} {左边=N=dtdN:包含有参数t,是时变系统右边=rN(1KN):不包含t参数,为自治系统
对于常微分方程(未知函数是一元函数)的求解,一般分为以下步骤:

1、Find a steady state

即寻求“静止”状态下的函数关系,e.g. logistic方程: N ′ = r ⋅ N ( 1 − N K ) N'=r\cdot N(1-\frac{N}{K}) N=rN(1KN) N ′ = 0 N'=0 N=0 时,系统静止,即种群大小没有波动,即:
t 时刻后种群大小的变化: N ′ = d N d t = r ⋅ N ( 1 − N K ) = 0 t时刻后种群大小的变化:N'=\frac{dN}{dt}=r\cdot N(1-\frac{N}{K})=0 t时刻后种群大小的变化:N=dtdN=rN(1KN)=0

2、求解

即求解“静止”状态的函数方程,即:
d N d t = r ⋅ N ( 1 − N K ) = 0 \frac{dN}{dt}=r\cdot N(1-\frac{N}{K})=0 dtdN=rN(1KN)=0
解: { N 1 ∗ = 0 N 2 ∗ = K 解:\begin{cases}N^{*}_{1}=0\\N^{*}_{2}=K\end{cases} 解:{N1=0N2=K
在数轴表示为:
方程解

3、寻求均衡解

N ′ = r ⋅ N ( K − N K ) N'=r\cdot N(\frac{K-N}{K}) N=rN(KKN)
一共有以下几种情况: { N > K 时, K − N K < 0 , N ↑ N = K 时, K − N K = 0 , N 不变 0 < N < K 时, K − N K > 0 , N ↓ N ≤ 0 ,无现实意义 \begin{cases}N>K时,\frac{K-N}{K}<0,N\uparrow\\N=K时,\frac{K-N}{K}=0,N不变\\0<N<K时,\frac{K-N}{K}>0,N\downarrow\\N\le0,无现实意义\end{cases} N>K时,KKN<0NN=K时,KKN=0N不变0<N<K时,KKN>0NN0,无现实意义
在数轴上表示为:
方程均衡解
∵ N → K \because N\rightarrow K NK
∴ N 2 ∗ = K 是函数的均衡解 \therefore N^{*}_{2}=K是函数的均衡解 N2=K是函数的均衡解

二、logistic方程二次积分

N ′ ′ = ( r ⋅ N ( 1 − N K ) ) ′ = ( r ⋅ N − r ⋅ N 2 K ) ′ = ( r ⋅ N ) ′ − ( r ⋅ N 2 K ) ′ = r − 2 ⋅ N K \begin{aligned} N'' &=(r\cdot N(1-\frac{N}{K}))'\\ &=(r\cdot N-\frac{r\cdot N^{2}}{K})'\\ &=(r\cdot N)'-(\frac{r\cdot N^{2}}{K})'\\ &=r-\frac{2\cdot N}{K} \end{aligned} N′′=(rN(1KN))=(rNKrN2)=(rN)(KrN2)=rK2N
求解:
令 N ′ ′ = 0 得: 令N''=0得: N′′=0得:
0 = r − 2 r ⋅ N K 0=r-\frac{2r\cdot N}{K} 0=rK2rN
解得 N = K 2 N=\frac{K}{2} N=2K,即收获理论
逻辑斯遆曲线
N ′ ′ = r − 2 r ⋅ N K ,有几种情况: N''=r-\frac{2r\cdot N}{K},有几种情况: N′′=rK2rN,有几种情况:
{ N ′ ′ > 0 时, N < K 2 , N ′ 上升(上凹) N ′ ′ < 0 时, N > K 2 , N ′ 下降(下凹) N ′ ′ = K 2 时, N ′ 最大,种群增长率最大 \begin{cases} N''>0时,N<\frac{K}{2},N'上升(上凹)\\ N''<0时,N>\frac{K}{2},N'下降(下凹)\\ N''=\frac{K}{2}时,N'最大,种群增长率最大 \end{cases} N′′>0时,N<2KN上升(上凹)N′′<0时,N>2KN下降(下凹)N′′=2K时,N最大,种群增长率最大

三、Bifurcation and Logistic Map

1、 N ′ = 4 N − N 3 + C N'=4N-N^{3}+C N=4NN3+C

构建函数:
N ′ = 4 N − N 3 N'=4N-N^{3} N=4NN3
求解:
Steady state: N ′ = 0 N'=0 N=0
方程 4 N − N 3 = 0 4N-N^{3}=0 4NN3=0 解得:
{ N 1 = − 2 N 2 = 0 N 3 = 2 \begin{cases} N_{1}=-2\\ N_{2}=0\\ N_{3}=2 \end{cases} N1=2N2=0N3=2
函数关系可视化为:
在这里插入图片描述
此时函数 N ′ = 4 N − N 3 与 N 轴有三个交点 N 1 、 N 2 、 N 3 。 此时函数N'=4N-N^{3}与N轴有三个交点N_{1}、N_{2}、N_{3}。 此时函数N=4NN3N轴有三个交点N1N2N3
∵ \because N ∈ ( 0 , 2 ] 时, N ′ 最大值为 a N\in(0,2]时,N'最大值为a N(0,2]时,N最大值为a
∴ \therefore 当 C = a 时,函数与 N 轴有两个交点 当C=a时,函数与N轴有两个交点 C=a时,函数与N轴有两个交点

使用Plotly(python v.3.9)绘制散点图,以探究 a a a 值:

from plotly.graph_objs import Scatter
from plotly import offline

#Three lists made visualization requested.
dNs, Ns, labels = [], [], []

#Make data lists
for N in range(-30,30):
    N = N * 0.1
    dN = 4 * N - N**3
    label = f"({N},{dN})"
    Ns.append(N)
    dNs.append(dN)
    labels.append(label)

#visulization
trace =Scatter(
    x = Ns, 
    y = dNs, 
    mode = "markers",  
    marker = dict(color = 'rgba(0, 255, 0, 1)'),
    text= labels
    )

data = [trace]
layout = dict(title = "N' = 4N - N^3",
              xaxis= dict(title= "N"),
              yaxis= dict(title= "N'")
             )
fig = dict(data = data, layout = layout)
offline.plot(fig,filename='N_dN.html')

a值
从图中可以看出,当 N ≈ 1.2 时, N ′ ≈ 3.072 ,即 a ≈ 3.072 N\approx 1.2时,N'\approx 3.072,即a\approx 3.072 N1.2时,N3.072,即a3.072
为探究函数与 N 轴的交点数的变化,引入参数 C 得新函数: 为探究函数与N轴的交点数的变化,引入参数C得新函数: 为探究函数与N轴的交点数的变化,引入参数C得新函数:
N ′ = 4 N − N 3 + C N'=4N-N^{3}+C N=4NN3+C
使 C 值逐渐增加,使函数曲线与 N 轴的交点逐渐减少: 使C值逐渐增加,使函数曲线与N轴的交点逐渐减少: 使C值逐渐增加,使函数曲线与N轴的交点逐渐减少:

Python实现:

from plotly.graph_objs import Scatter
from plotly import offline

#Three lists made visualization requested.
Ns, data = [], []
C = 0

#Make Ns
for N in range(-250,250):
    N = N * 0.01
    Ns.append(N)

#Main loop
while C <= 5:
    dNs = []
    for N in Ns:
        dN = (4 * N - N**3) + C
        dNs.append(dN)

    #Mark function curve, if C > 3.072
    if C > 3.072:
        trace =Scatter(
            x = Ns, 
            y = dNs, 
            mode = "markers",  
            marker = dict(color = 'rgba(255, 0, 0, 1)'),
            )
    #Hight the point by green, if C = 0
    elif C == 0:
        trace =Scatter(
            x = Ns, 
            y = dNs, 
            mode = "markers",  
            marker = dict(color = 'rgba(0, 255, 0, 1)')
            )
    #Make points transparencied, if C isn't 3.072 or 0
    else:
        trace =Scatter(
            x = Ns, 
            y = dNs, 
            mode = "markers",  
            marker = dict(color = 'rgba(0, 0, 255, 0.1)')
            )
    data.append(trace)

    #iteration
    C += 0.1512

    
layout = dict(title = "N' = 4N - N^3 + C",
              xaxis= dict(title= "N"),
              yaxis= dict(title= "N'")
             )
fig = dict(data = data, layout = layout)
offline.plot(fig, filename = "N_dNs.html")

在这里插入图片描述
从可视化结果中可以发现,随着C的值增加,交点 N 1 N_{1} N1 N 2 N_{2} N2 越来越近,当 C = a C=a C=a 时, N 1 = N 2 N_{1}=N_{2} N1=N2 即两交点合并为一个交点。当 C > a C>a C>a 时,函数与N轴只余一个交点 N 3 N_{3} N3

2、Bifurcation

现在以 C C C x x x 轴, N N N y y y 轴:
在这里插入图片描述
此时 C = a C=a C=a 时对应的 N N N 值就是Critical point,即在此点发生了临界突变(Sudden Transition)。

3、微分原理

logistic方程为例:
d N d t = r ⋅ N ( 1 − N K ) = lim ⁡ Δ t → 0 N t + Δ t − N t ( t + Δ t ) − t \begin{aligned} \frac{dN}{dt} &=r\cdot N(1-\frac{N}{K})\\ &=\lim\limits_{\Delta t \rightarrow0} \frac{N_{t+\Delta t}-N_{t}}{(t+\Delta t)-t} \end{aligned} dtdN=rN(1KN)=Δt0lim(t+Δt)tNt+ΔtNt
表示单位时间 ( Δ t \Delta t Δt,时间增量)内,种群大小 N N N 的增量 ( Δ N \Delta N ΔN )的近似值( d N d t \frac{dN}{dt} dtdN),但需要注意, Δ N ≠ d N d t \Delta N\not=\frac{dN}{dt} ΔN=dtdN,后者只是前者的近似值,且随着 Δ t → 0 \Delta t\rightarrow0 Δt0,二者间的差异也趋近于零。
在这里插入图片描述

4、Logistic映射

整理合并,得:
N t + Δ t − N t Δ t = r ⋅ N t ( 1 − N t K ) \frac{N_{t+\Delta t}-N_{t}}{\Delta t}=r\cdot N_{t}(1-\frac{N_{t}}{K}) ΔtNt+ΔtNt=rNt(1KNt)
Δ t = 1 \Delta t=1 Δt=1(1表示1单位的时间增量,不是具体时间间隔)得:
N t + 1 − N t = r ⋅ N t ( 1 − N t K ) N_{t+1}-N_{t}=r\cdot N_{t}(1-\frac{N_{t}}{K}) Nt+1Nt=rNt(1KNt)
整理等式:
N t + 1 = N t + r ⋅ N t ( 1 − N t K ) = N t [ 1 + r ( 1 − N t K ) ] = N t ( r + 1 − r ⋅ N t K ) = ( r + 1 ) N t ⋅ [ 1 − r ⋅ N t ( r + 1 ) K ] \begin{aligned} N_{t+1}&=N_{t}+r\cdot N_{t}(1-\frac{N_{t}}{K})\\ &=N_{t}[1+r(1-\frac{N_{t}}{K})]\\&=N_{t}(r+1-\frac{r\cdot N_{t}}{K})\\ &=(r+1) N_{t}\cdot [1-\frac{r\cdot Nt}{(r+1)K}] \end{aligned} Nt+1=Nt+rNt(1KNt)=Nt[1+r(1KNt)]=Nt(r+1KrNt)=(r+1)Nt[1(r+1)KrNt]
设: x = r ⋅ N ( r + 1 ) K x t = r ⋅ N t ( r + 1 ) K x t + 1 = r ⋅ N t + 1 ( r + 1 ) K \begin{aligned} &x=\frac{r\cdot N}{(r+1)K}\\ &x_{t}=\frac{r\cdot N_{t}}{(r+1)K}\\ &x_{t+1}=\frac{r\cdot N_{t+1}}{(r+1)K} \end{aligned} x=(r+1)KrNxt=(r+1)KrNtxt+1=(r+1)KrNt+1
x , x t , x t + 1 x,x_{t},x{t+1} x,xt,xt+1带入得:
N t + 1 = ( r + 1 ) N t ⋅ [ 1 − r ⋅ N t ( r + 1 ) K ] = ( r + 1 ) N t ⋅ ( 1 − x t ) x t + 1 ⋅ ( r + 1 ) K r = x t ⋅ ( r + 1 ) 2 ⋅ K ⋅ ( 1 − x t ) r x t + 1 = x t ⋅ ( r + 1 ) ⋅ ( 1 − x t ) \begin{aligned} N_{t+1} &=(r+1)N_{t}\cdot [1-\frac{r\cdot N_{t}}{(r+1)K}]\\ &=(r+1)N_{t}\cdot (1-x_{t})\\\frac{x_{t+1}\cdot (r+1)K}{r} &=\frac{x_{t}\cdot (r+1)^2\cdot K\cdot (1-x_{t})}{r}\\x_{t+1} &=x_{t}\cdot (r+1)\cdot (1-x_{t}) \end{aligned} Nt+1rxt+1(r+1)Kxt+1=(r+1)Nt[1(r+1)KrNt]=(r+1)Nt(1xt)=rxt(r+1)2K(1xt)=xt(r+1)(1xt)
μ = r + 1 \mu=r+1 μ=r+1 得:
x t + 1 = x t ⋅ μ ⋅ ( 1 − x t ) x_{t+1}=x_{t}\cdot\mu\cdot (1-x_{t}) xt+1=xtμ(1xt)
∵ \because
N > 0 , r ∈ ( 0 , 1 ] , K > 0 , K > N N>0,r\in(0,1],K>0,K>N N>0r(0,1]K>0K>N
∴ \therefore
x t ∈ ( 0 , 1 ] , μ ∈ ( 0 , 4 ) x_{t}\in(0,1],\mu\in(0,4) xt(0,1]μ(0,4)

5、映射可视化

据上述函数关系,利用python实现函数的可视化:

from tqdm import tqdm
import numpy as np
from plotly.graph_objs import Scatter
from plotly import offline


def LogisticMap():
    mu = np.arange(0, 4, 0.0001)
    x = 0.2  #initial value of x
    iters = 1000  # iterations that not be visualized
    last = 100  # iterations will be visualized

    #iteration
    for i in tqdm(range(iters+last)):
        x = mu * x * (1 - x)
        if i >= iters:
            #visualization
            trace =Scatter(
                x = mu, 
                y = x, 
                mode = "markers", 
                marker = dict(color = 'rgba(125, 255, 125, 1)',
                    size = 2)
                )
    data = [trace]
    layout = dict(title = "Logistic Map",
              xaxis= dict(title = "mu"),
              yaxis= dict(title = "x")
             )
    fig = dict(data = data, layout = layout)
    offline.plot(fig,filename = 'Logisticmap.html')


LogisticMap()

plotly可能存在兼容性的问题(更有可能是我使用不当),图中的某些点没有显示。
在这里插入图片描述

利用另一常用的模块matplotlib进行可视化:
模块一

from tqdm import tqdm
import matplotlib.pyplot as plt
import numpy as np


def logisticmap(mu = 4):
    mu = np.arange(2, mu, 0.0001)
    x = 0.2  
    iters = 1000 
    last = 100 
    for i in tqdm(range(iters+last)):
        x = mu * x * (1 - x)
        if i >= iters:
            plt.plot(mu, x, ',k', alpha=0.25)
    plt.show()

可视化:

from image import logisticmap

logisticmap(mu = 4)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Odd_guy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值