线性系统给了我们一套很强的语言:特征值、特征向量、相图、稳定性。真实模型却很少一直保持线性。捕食者吃掉猎物的速度通常取决于两者相遇的机会,摆的回复力是 ,流行病传播项里常见 。这些项让方程不能再靠矩阵指数一口气解决。
本章的目标不是把非线性系统全部讲完,而是建立第一步分析流程:先找平衡点,再在平衡点附近线性化,用 Jacobian 矩阵判断局部行为;随后用相图和数值模拟检查这个局部结论在多大范围内可信。学完本章,你应当能把一个简单非线性模型从情境写成方程,并能解释它的平衡、稳定和相平面图像。
本课前两章系统内容主要研究线性系统
非线性自治系统把右侧换成一般函数:
这里“自治”表示 和 不显含时间 。在相平面里,每个点 都对应一个速度向量 。解曲线不是普通的函数图像,而是状态点沿着这些速度向量走出的轨线。

图:非线性系统的相平面语言。点给出当前状态,箭头给出当前变化方向,轨线给出状态随时间的运动。
平衡点是最先要找的对象。若
则从 出发的解会停在那里。平衡点在模型中通常对应“长期不变的状态”:人口不再变化、摆停在某个位置、电路到达稳态,或者两个物种达到共存水平。
非线性系统通常不从“求出显式解”开始。更稳妥的入口是:平衡点在哪里,平衡点附近怎样动,相图是否支持这个判断,数值模拟是否在合理参数下给出同样的趋势。
二维系统有一个很实用的工具:零增长曲线。曲线 上有 ,状态点在那一瞬间没有水平变化;曲线 上有 ,状态点在那一瞬间没有竖直变化。两类曲线的交点就是平衡点。
看一个竞争模型:
这里 可以理解为两个竞争种群的规模。右侧中的 和 互相相乘,说明增长率会受到对方数量影响,因此它是非线性系统。
求平衡点时,把两个右侧同时设为 :
先看 。由 得到两条零增长曲线: 或 。
零增长曲线本身不是轨线。轨线通常会穿过零增长曲线,只是在穿过时某个方向的速度分量暂时为 。这点很容易混淆。
画相图时,不要把 或 的曲线直接当成解曲线。它们是判断箭头方向的辅助线:在 曲线两侧,水平箭头方向可能改变;在 曲线两侧,竖直箭头方向可能改变。
如果平衡点附近的状态只偏离一点点,非线性函数可以用一阶近似替代。设
在平衡点 附近,有
其中
称为 Jacobian 矩阵。它记录右侧向量场在该点附近的一阶变化。

图:线性化只描述平衡点附近的运动。离平衡点越远,高阶项越可能改变轨线形状。
线性化的关键不是“非线性系统变成了线性系统”,而是“在足够靠近平衡点的区域里,线性系统给出主要方向”。若 的特征值实部都不为 ,这个平衡点称为双曲平衡点。此时线性化给出的稳定或不稳定类型通常可靠。
回到竞争模型。它的 Jacobian 为
在内部平衡点 ,
这个矩阵的迹为 ,行列式为 ,两个特征值都为负,因此 是局部渐近稳定平衡点。换成模型语言,就是从共存状态附近出发时,两种种群会回到共存水平。
线性化是一种局部工具。它最适合回答“如果状态已经很接近平衡点,接下来会离开还是回去”。它不能单独回答“从任意初始状态出发会怎样”,这个问题还需要相图、守恒量、数值模拟或额外理论。
二维线性系统的分类可以直接迁移到线性化系统。设
特征方程为
所以迹 、行列式 和判别式 能快速读出局部类型。

图:双曲平衡点附近,线性化的相图类型通常决定非线性系统的局部稳定性。中心和零特征值情形需要额外判断。
最常见的失误有两个。第一个是在不是平衡点的地方计算 Jacobian 后直接谈稳定性。Jacobian 可以在任意点计算,但“平衡点稳定性”必须在平衡点处判断。第二个是看到线性化是中心,就立刻断言非线性系统一定有闭合轨线。中心属于临界情形,非线性项可能把它改成螺旋,也可能保留中心。
练习:考虑系统
找出它的平衡点,并用线性化判断每个平衡点的局部类型。
平衡点满足 且 ,所以 。Jacobian 为
Lotka-Volterra 捕食者-猎物模型是非线性系统中最常见的入门例子:
其中 表示猎物数量, 表示捕食者数量。参数 是猎物在没有捕食者时的增长率, 是捕食者在没有猎物时的死亡率。相遇项 让系统非线性:猎物越多、捕食者越多,捕食事件越频繁。
零增长曲线给出两类平衡:
第二个点是共存平衡。它说:若捕食者数量等于 ,猎物刚好不增不减;若猎物数量等于 ,捕食者刚好不增不减。

图:经典捕食者-猎物模型中,零增长线的交点给出共存平衡。轨线常呈现猎物先变、捕食者后变的周期性循环。
在共存平衡处,Jacobian 为
它的特征值是纯虚数,因此线性化给出中心。这是一个需要谨慎的情形。经典模型确实有封闭轨线,但这依赖模型的特殊结构;一旦加入猎物环境容量、捕食饱和、季节变化或随机扰动,结论可能改变。
捕食者-猎物模型很适合练习非线性相图,但它不是“所有生态系统都会周期振荡”的证据。模型假设决定结论:没有环境容量、没有年龄结构、没有捕食饱和时得到的循环,不能直接套到更复杂的真实生态系统上。
无阻尼单摆的精确方程是
把时间重新缩放后,可以写成一阶系统
如果只在 附近看,,于是得到线性近似
这就是小角度近似。它解释了小幅摆动为什么近似为简谐振动,但它不能描述大角度翻转、越过最高点或分界轨线。

图:非线性摆的相平面同时包含闭合振动轨线、分界轨线和连续翻转轨线。线性小角度模型只能描述局部区域。
平衡点满足
所以 。当 为偶数时,摆在最低点附近,线性化为中心;当 为奇数时,摆在最高点附近,线性化为鞍点。
能量函数可以帮助理解全局图像:
能量较小时,轨线围绕最低点闭合,表示来回摆动。能量达到分界值时,轨线经过最高点附近。能量更大时,角度持续增加或减少,表示摆完成连续翻转。
本章最后把流程串起来。考虑一个更接近真实生态情境的捕食者-猎物模型:猎物自身受环境容量限制,捕食者依赖猎物维持种群。
令 表示猎物数量, 表示捕食者数量。取模型
参数含义如下: 是猎物低密度时的增长率, 是环境容量, 是捕食相遇强度, 是捕食转化为捕食者增长的效率, 是捕食者死亡率。

图:综合建模不只写出方程,还要检查单位、求平衡、做局部分析、用数值模拟看全局趋势,并把结论翻译回情境。
这个模型可以按下面的步骤分析:
先检查单位。 和 都应当有“猎物数量/时间”的单位; 和 都应当有“捕食者数量/时间”的单位。若单位对不上,模型还没资格进入计算。
这个项目展示了本章最重要的工作顺序。先用模型假设决定方程,再用平衡点和 Jacobian 做局部判断,然后用数值模拟检查你没有把局部结论说成全局结论。
非线性系统的困难不在于每一步都复杂,而在于每一步都有适用范围。下面几条可以作为做题和建模时的检查清单。
不要把线性化结论扩大成全局结论。平衡点附近稳定,并不表示所有初值都会收敛到它;平衡点附近不稳定,也不表示模型在任何区域都没有可解释的长期结构。
检查非线性系统时,可以按这个顺序问自己:
练习:一个简化传染病模型为
其中 是易感者数量, 是感染者数量。请找出感染者不再增加的零增长曲线,并解释它的含义。
感染者不再增加表示 。由
再看一个稳定性练习。系统
有平衡点 。请判断它的局部稳定性,并解释这对两个种群意味着什么。
Jacobian 为
到这里,本课程的四条线已经汇合:建模负责把情境变成方程,定性分析负责读平衡和相图,数值方法负责观察没有显式解时的轨线,解析方法负责在可处理的局部或特殊结构中给出精确判断。非线性系统不会让这些工具失效,只是要求我们更诚实地说明每个结论的范围。
再看 。由 得到两条零增长曲线: 或 。
把两组零增长曲线两两相交,得到边界平衡点 、、,以及内部平衡点 。
最后回到情境解释这些点。 表示只有 种群存活, 表示只有 种群存活, 表示两个种群共存。
| 稳定结点 |
| 局部渐近稳定 |
| 不稳定结点 | 不稳定 |
| 稳定螺旋 | 局部渐近稳定 |
| 不稳定螺旋 | 不稳定 |
| 或 等临界情形 | 需要继续分析 | 线性化可能不够 |
在 ,矩阵为 ,特征值为 ,线性化是中心,不能只靠线性化给出渐近稳定结论。在 和 ,矩阵为 ,特征值为 ,所以这两个点都是鞍点,不稳定。
再求平衡点。由 可知 或 。代入 ,得到 、,以及在 时存在的共存平衡
计算 Jacobian:
在共存平衡处,右下角为 ,左上角化为 。
判断局部稳定性。共存平衡处的迹为 ,行列式为 ,所以若共存平衡存在,它是局部渐近稳定的。
最后用数值模拟和相图复核。局部稳定只说明附近会回到共存平衡;若初值很远,仍要看解是否保持非负,是否出现过冲,以及参数变化是否让系统靠近边界平衡。
可得 或 。曲线 表示没有感染者;直线 表示感染者数量处在“临界易感者水平”上。若 ,则在 时感染者增加;若 ,感染者减少。
在 ,
特征值为 和 ,所以 是鞍点,不稳定。模型语言是:只有 种群处在自身平衡时,如果引入很少的 种群, 会增长,系统会离开这个边界平衡。