【动力系统与非线性动力学】——Part3 经典模型入门
动力系统入门:第三部分 经典模型入门
本文是“动力系统入门”系列的第三部分。
前两部分我们已经学习了相空间、相图、平衡点、稳定性和线性化。
从这一部分开始,我们通过几个经典模型把前面的概念真正用起来。
本部分包含四个核心模型:
- 指数增长与 Logistic 模型
- Lotka-Volterra 捕食者—猎物模型
- 单摆与非线性振动
- Van der Pol 振子
这四个模型非常适合作为动力系统入门的第一组例子。它们分别对应几种重要现象:
| 模型 | 主要现象 | 关键词 |
|---|---|---|
| Logistic 方程 | 受限增长、稳定平衡点 | 环境容量、相线 |
| 捕食者—猎物模型 | 周期振荡、二维相图 | 闭合轨道、种群相互作用 |
| 单摆模型 | 非线性振动、分界轨道 | 相空间、能量、稳定性 |
| Van der Pol 振子 | 自激振荡、极限环 | 非线性阻尼、吸引子 |

第 8 章 指数增长与 Logistic 模型
8.1 从指数增长开始
最简单的增长模型是指数增长模型:
dxdt=rx \frac{dx}{dt}=rx dtdx=rx
其中:
- x(t)x(t)x(t) 表示某个数量,例如种群数量;
- rrr 表示增长率;
- ttt 表示时间。
这个方程的意思是:
数量越多,增长得越快。
它的解为:
x(t)=x0ert x(t)=x_0e^{rt} x(t)=x0ert
如果 r>0r>0r>0,那么 x(t)x(t)x(t) 会随时间指数增长。这个模型适合描述短时间内资源充足的增长过程,比如细菌在理想培养环境中的早期繁殖。
但是,现实世界中的资源通常不是无限的。食物、空间、能量都会限制增长。因此指数增长模型不能一直适用。
8.2 Logistic 方程
为了描述资源限制,我们引入 Logistic 方程:
dxdt=rx(1−xK) \frac{dx}{dt}=rx\left(1-\frac{x}{K}\right) dtdx=rx(1−Kx)
其中:
- rrr 是内禀增长率;
- KKK 是环境容量;
- x(t)x(t)x(t) 是系统状态变量。
这里多出来的因子:
1−xK 1-\frac{x}{K} 1−Kx
表示资源限制效应。
当 xxx 很小时:
1−xK≈1 1-\frac{x}{K}\approx 1 1−Kx≈1
系统近似满足指数增长:
dxdt≈rx \frac{dx}{dt}\approx rx dtdx≈rx
当 xxx 接近 KKK 时:
1−xK≈0 1-\frac{x}{K}\approx 0 1−Kx≈0
增长速度变慢,最终趋近稳定值 KKK。
8.3 指数增长与 Logistic 增长的对比

从图中可以看到:
- 指数增长模型会不断上升;
- Logistic 模型前期增长较快,后期逐渐趋于环境容量 KKK;
- 现实系统中,Logistic 模型往往比指数模型更合理。
8.4 Logistic 方程的平衡点
平衡点满足:
dxdt=0 \frac{dx}{dt}=0 dtdx=0
因此:
rx(1−xK)=0 rx\left(1-\frac{x}{K}\right)=0 rx(1−Kx)=0
得到两个平衡点:
x1∗=0 x^*_1=0 x1∗=0
x2∗=K x^*_2=K x2∗=K
其中:
- x=0x=0x=0 表示种群灭绝;
- x=Kx=Kx=K 表示种群达到环境容量。
8.5 Logistic 方程的稳定性
考虑变化率函数:
f(x)=rx(1−xK) f(x)=rx\left(1-\frac{x}{K}\right) f(x)=rx(1−Kx)
如果 0<x<K0<x<K0<x<K,则:
f(x)>0 f(x)>0 f(x)>0
说明 xxx 会增大。
如果 x>Kx>Kx>K,则:
f(x)<0 f(x)<0 f(x)<0
说明 xxx 会减小。
因此,只要初始值 x0>0x_0>0x0>0,系统最终都会趋向:
x=K x=K x=K
所以:
- x=0x=0x=0 是不稳定平衡点;
- x=Kx=Kx=K 是稳定平衡点。

8.6 Python 示例:绘制 Logistic 增长曲线
import numpy as np
import matplotlib.pyplot as plt
r = 0.5
K = 10
x0 = 0.5
t = np.linspace(0, 20, 500)
x = K / (1 + (K / x0 - 1) * np.exp(-r * t))
plt.plot(t, x, linewidth=2)
plt.axhline(K, linestyle="--", label="环境容量 K")
plt.xlabel("时间 t")
plt.ylabel("种群数量 x(t)")
plt.title("Logistic 增长模型")
plt.legend()
plt.grid(alpha=0.3)
plt.show()
8.7 本章小结
Logistic 方程是动力系统中最经典的一维非线性模型之一。它虽然形式简单,却已经包含了许多重要思想:
- 非线性增长;
- 平衡点;
- 稳定性;
- 相线分析;
- 长时间行为。
它告诉我们:
动力系统的重点不只是求解方程,而是理解系统最终会走向哪里。
第 9 章 捕食者—猎物模型
9.1 模型背景
在生态系统中,捕食者和猎物之间存在相互作用。
例如:
- 兔子数量增加,会给狐狸提供更多食物;
- 狐狸数量增加,会导致兔子数量减少;
- 兔子减少后,狐狸因食物不足也会减少;
- 狐狸减少后,兔子又可能重新增长。
这种相互制约会产生周期振荡。
Lotka-Volterra 模型是描述这种现象的经典二维动力系统。
9.2 Lotka-Volterra 方程
设:
- x(t)x(t)x(t) 表示猎物数量;
- y(t)y(t)y(t) 表示捕食者数量。
模型为:
dxdt=αx−βxy \frac{dx}{dt}=\alpha x-\beta xy dtdx=αx−βxy
dydt=δxy−γy \frac{dy}{dt}=\delta xy-\gamma y dtdy=δxy−γy
其中:
- αx\alpha xαx:猎物自然增长;
- −βxy-\beta xy−βxy:捕食导致猎物减少;
- δxy\delta xyδxy:捕食使捕食者增加;
- −γy-\gamma y−γy:捕食者自然死亡。
这个系统的状态变量是二维的:
(x,y) (x,y) (x,y)
因此我们需要在相平面中研究它。
9.3 平衡点分析
平衡点满足:
dxdt=0,dydt=0 \frac{dx}{dt}=0,\qquad \frac{dy}{dt}=0 dtdx=0,dtdy=0
也就是:
αx−βxy=0 \alpha x-\beta xy=0 αx−βxy=0
δxy−γy=0 \delta xy-\gamma y=0 δxy−γy=0
整理可得:
x(α−βy)=0 x(\alpha-\beta y)=0 x(α−βy)=0
y(δx−γ)=0 y(\delta x-\gamma)=0 y(δx−γ)=0
因此平衡点有两个:
(0,0) (0,0) (0,0)
和
(γδ,αβ) \left(\frac{\gamma}{\delta},\frac{\alpha}{\beta}\right) (δγ,βα)
第一个平衡点表示两类种群都不存在。第二个平衡点表示捕食者和猎物共存。
9.4 相平面中的轨道
Lotka-Volterra 模型的典型特征是:在共存平衡点附近会出现周期性轨道。

从相图中可以看到:
- 轨道围绕共存平衡点旋转;
- 猎物和捕食者数量交替上升和下降;
- 系统并不一定收敛到某个点,而可能长期振荡。
9.5 振荡的直观解释
捕食者—猎物模型的周期振荡可以这样理解:
猎物数量增加
↓
捕食者食物变多,捕食者数量增加
↓
捕食压力变大,猎物数量下降
↓
猎物减少,捕食者缺少食物
↓
捕食者数量下降
↓
猎物压力减小,数量重新增加
这个循环不断重复,就形成了种群振荡。
9.6 Python 示例:绘制捕食者—猎物轨道
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp
def lotka_volterra(t, z, alpha, beta, delta, gamma):
x, y = z
dxdt = alpha * x - beta * x * y
dydt = delta * x * y - gamma * y
return [dxdt, dydt]
alpha = 1.0
beta = 0.1
delta = 0.075
gamma = 1.5
sol = solve_ivp(
lotka_volterra,
t_span=(0, 30),
y0=[10, 5],
args=(alpha, beta, delta, gamma),
dense_output=True
)
t = np.linspace(0, 30, 1000)
z = sol.sol(t)
plt.plot(z[0], z[1], linewidth=2)
plt.xlabel("猎物数量 x")
plt.ylabel("捕食者数量 y")
plt.title("捕食者—猎物模型相轨道")
plt.grid(alpha=0.3)
plt.show()
9.7 本章小结
Lotka-Volterra 模型是一个典型的二维非线性动力系统。它展示了一个重要事实:
二维系统不仅可能趋于平衡点,也可能出现周期振荡。
通过这个模型,我们第一次看到了相平面分析的威力。
第 10 章 单摆与非线性振动
10.1 单摆模型
单摆是动力系统中最经典的物理模型之一。
设:
- θ(t)\theta(t)θ(t) 表示摆角;
- ω(t)=dθ/dt\omega(t)=d\theta/dtω(t)=dθ/dt 表示角速度。
如果忽略阻尼,单摆方程为:
d2θdt2+glsinθ=0 \frac{d^2\theta}{dt^2}+\frac{g}{l}\sin\theta=0 dt2d2θ+lgsinθ=0
为了简化记号,我们可以进行无量纲化,写成:
d2θdt2+sinθ=0 \frac{d^2\theta}{dt^2}+\sin\theta=0 dt2d2θ+sinθ=0
将二阶方程改写成一阶系统:
dθdt=ω \frac{d\theta}{dt}=\omega dtdθ=ω
dωdt=−sinθ \frac{d\omega}{dt}=-\sin\theta dtdω=−sinθ
于是,单摆就变成了一个二维动力系统。
10.2 小角度近似
当摆角很小时:
sinθ≈θ \sin\theta\approx \theta sinθ≈θ
单摆方程近似为:
d2θdt2+θ=0 \frac{d^2\theta}{dt^2}+\theta=0 dt2d2θ+θ=0
这就是简谐振动方程。
它的解是周期函数,表示摆会来回振动。
但是当摆角较大时,sinθ≈θ\sin\theta\approx\thetasinθ≈θ 不再成立,系统就必须按照非线性方程来分析。
10.3 非线性单摆的相图
非线性单摆的相变量是:
(θ,ω) (\theta,\omega) (θ,ω)
其中:
- θ\thetaθ 表示角位置;
- ω\omegaω 表示角速度。

从相图中可以看到几类运动:
- 在稳定平衡点附近,小轨道对应普通摆动;
- 较大的闭合轨道对应大角度振动;
- 穿过不稳定平衡点附近的轨道称为分界轨道;
- 分界轨道外侧对应连续旋转。
这说明同一个方程可以产生不同类型的运动。
10.4 平衡点与稳定性
平衡点满足:
ω=0 \omega=0 ω=0
和
−sinθ=0 -\sin\theta=0 −sinθ=0
因此:
θ=nπ,ω=0 \theta=n\pi,\qquad \omega=0 θ=nπ,ω=0
当 θ=0,±2π,±4π,⋯\theta=0,\pm 2\pi,\pm 4\pi,\cdotsθ=0,±2π,±4π,⋯ 时,摆在最低点,是稳定平衡点。
当 θ=±π,±3π,⋯\theta=\pm\pi,\pm 3\pi,\cdotsθ=±π,±3π,⋯ 时,摆在最高点,是不稳定平衡点。
这与我们的物理直觉一致:
- 摆自然垂下时稳定;
- 摆倒立在最高处时不稳定。
10.5 能量观点
无阻尼单摆的能量可以写为:
E=12ω2+1−cosθ E=\frac{1}{2}\omega^2+1-\cos\theta E=21ω2+1−cosθ
其中:
- 12ω2\frac{1}{2}\omega^221ω2 是动能项;
- 1−cosθ1-\cos\theta1−cosθ 是势能项。
由于没有阻尼,能量守恒。因此轨道会沿着等能量曲线运动。
这也是为什么无阻尼单摆的相图中会出现闭合轨道。
10.6 阻尼单摆
现实中的摆会受到摩擦和空气阻力,因此需要加入阻尼项:
d2θdt2+bdθdt+sinθ=0 \frac{d^2\theta}{dt^2}+b\frac{d\theta}{dt}+\sin\theta=0 dt2d2θ+bdtdθ+sinθ=0
写成一阶系统为:
dθdt=ω \frac{d\theta}{dt}=\omega dtdθ=ω
dωdt=−bω−sinθ \frac{d\omega}{dt}=-b\omega-\sin\theta dtdω=−bω−sinθ
其中 b>0b>0b>0 表示阻尼强度。

加入阻尼后,系统能量逐渐减少,轨道不再闭合,而是逐渐螺旋式收敛到稳定平衡点。
10.7 Python 示例:绘制单摆相轨道
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp
def pendulum(t, z):
theta, omega = z
return [omega, -np.sin(theta)]
sol = solve_ivp(
pendulum,
t_span=(0, 30),
y0=[2.0, 0.0],
dense_output=True
)
t = np.linspace(0, 30, 1000)
z = sol.sol(t)
plt.plot(z[0], z[1], linewidth=2)
plt.xlabel("角位移 theta")
plt.ylabel("角速度 omega")
plt.title("非线性单摆相轨道")
plt.grid(alpha=0.3)
plt.show()
10.8 本章小结
单摆模型说明:
- 二阶微分方程可以转化为一阶系统;
- 相空间可以展示不同类型的运动;
- 稳定平衡点和不稳定平衡点有明确物理意义;
- 能量守恒系统的轨道往往具有特殊结构;
- 加入阻尼后,系统会从保守系统变成耗散系统。
单摆是连接经典力学和动力系统理论的桥梁。
第 11 章 Van der Pol 振子
11.1 为什么需要 Van der Pol 振子?
普通阻尼振子会逐渐停止振动。可是现实中有些系统可以持续振荡,例如:
- 电子振荡器;
- 心脏节律;
- 神经元放电;
- 某些机械自激振动。
这些系统并不是简单地耗散能量,而是会在某些状态下吸收能量,在另一些状态下释放能量。
Van der Pol 振子就是描述这种自激振荡的经典模型。
11.2 Van der Pol 方程
Van der Pol 方程为:
d2xdt2−μ(1−x2)dxdt+x=0 \frac{d^2x}{dt^2}-\mu(1-x^2)\frac{dx}{dt}+x=0 dt2d2x−μ(1−x2)dtdx+x=0
其中 μ>0\mu>0μ>0 控制非线性阻尼强度。
令:
v=dxdt v=\frac{dx}{dt} v=dtdx
则可写成一阶系统:
dxdt=v \frac{dx}{dt}=v dtdx=v
dvdt=μ(1−x2)v−x \frac{dv}{dt}=\mu(1-x^2)v-x dtdv=μ(1−x2)v−x
11.3 非线性阻尼的含义
Van der Pol 方程中最重要的一项是:
−μ(1−x2)dxdt -\mu(1-x^2)\frac{dx}{dt} −μ(1−x2)dtdx
这个阻尼不是常数,而是依赖于 xxx。
当 ∣x∣<1|x|<1∣x∣<1 时:
1−x2>0 1-x^2>0 1−x2>0
系统表现出“负阻尼”,振幅会被放大。
当 ∣x∣>1|x|>1∣x∣>1 时:
1−x2<0 1-x^2<0 1−x2<0
系统表现出“正阻尼”,振幅会被抑制。
因此系统会自动调节振幅,最终形成稳定的周期振荡。
11.4 极限环
Van der Pol 振子的一个核心现象是极限环。
极限环是相平面中的一条闭合轨道,并且附近轨道会逐渐靠近它。

图中可以看到:
- 初始条件不同的轨道,最终都会靠近同一条闭合曲线;
- 这条闭合曲线就是稳定极限环;
- 极限环对应系统长期稳定的周期振荡。
这与无阻尼单摆的闭合轨道不同。
无阻尼单摆中,不同能量对应不同闭合轨道;而 Van der Pol 振子中,许多初始条件都会被吸引到同一个闭合轨道。
11.5 极限环与吸引子
稳定极限环可以看作一种吸引子。
在前面我们见过点吸引子,例如 Logistic 方程中的稳定平衡点 x=Kx=Kx=K。
而 Van der Pol 振子的长期行为不是收敛到一个点,而是收敛到一个周期运动。
因此我们可以说:
稳定极限环是周期运动形式的吸引子。
这也是非线性动力系统中非常重要的思想。
11.6 Python 示例:绘制 Van der Pol 极限环
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp
def vanderpol(t, z, mu):
x, v = z
dxdt = v
dvdt = mu * (1 - x**2) * v - x
return [dxdt, dvdt]
mu = 2.0
sol = solve_ivp(
vanderpol,
t_span=(0, 50),
y0=[0.2, 0.1],
args=(mu,),
dense_output=True
)
t = np.linspace(0, 50, 2000)
z = sol.sol(t)
plt.plot(z[0], z[1], linewidth=2)
plt.xlabel("x")
plt.ylabel("dx/dt")
plt.title("Van der Pol 振子的相轨道")
plt.grid(alpha=0.3)
plt.show()
11.7 本章小结
Van der Pol 振子展示了动力系统中一个非常重要的现象:
系统可以不收敛到静止状态,而是收敛到稳定周期振荡。
本章重点概念包括:
- 非线性阻尼;
- 自激振荡;
- 极限环;
- 周期吸引子;
- 初始条件不同但长期行为相同。
第三部分总结
第三部分通过四个经典模型,把前面学过的动力系统概念具体化了。
1. Logistic 模型
它是最简单的一维非线性模型之一,展示了:
- 资源限制;
- 稳定平衡点;
- 相线分析;
- 长时间趋向环境容量。
2. 捕食者—猎物模型
它是二维非线性系统的经典例子,展示了:
- 种群相互作用;
- 相平面轨道;
- 周期振荡;
- 共存平衡点。
3. 单摆模型
它连接了经典力学和动力系统,展示了:
- 二阶方程转化为一阶系统;
- 稳定与不稳定平衡点;
- 能量守恒;
- 分界轨道;
- 阻尼导致耗散和收敛。
4. Van der Pol 振子
它展示了非线性系统中的自激振荡,核心概念是:
- 非线性阻尼;
- 稳定极限环;
- 周期吸引子。
本部分知识结构图
经典动力系统模型
│
├── 一维模型
│ └── Logistic 方程
│ ├── 平衡点
│ ├── 稳定性
│ └── 环境容量
│
├── 二维生态模型
│ └── 捕食者—猎物模型
│ ├── 相平面
│ ├── 共存平衡点
│ └── 周期振荡
│
├── 物理振动模型
│ └── 单摆模型
│ ├── 非线性振动
│ ├── 能量守恒
│ ├── 分界轨道
│ └── 阻尼收敛
│
└── 自激振荡模型
└── Van der Pol 振子
├── 非线性阻尼
├── 极限环
└── 周期吸引子
下一部分预告:分岔理论初步
前面我们主要讨论了系统在固定参数下的行为。
但是在真实问题中,参数往往会变化。
例如:
- 增长率 rrr 变化;
- 阻尼强度变化;
- 捕食率变化;
- 外界驱动力变化。
当参数变化时,系统的平衡点、稳定性和长期行为可能发生突然改变。
这种现象称为:
分岔。
下一部分我们将进入动力系统中非常重要的主题:
分岔理论初步
我们会学习:
- 什么是分岔;
- 鞍结分岔;
- 叉式分岔;
- Hopf 分岔;
- 如何用 Python 绘制分岔图。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)