本节摘要:叠加原理是线性与非线性之间唯一需要记牢的分界判据:一个系统若满足"两输入之和的响应等于各自响应之和",它就是线性的,反之即非线性。本节把这句抽象定义变成一个十行代码的对照实验——同一个受迫振子,只改刚度项一次,亲眼看到"输入加倍、输出加倍"如何当场失守,并解释失真从哪里来、为什么"只差一个三次方项"就足以催生多稳态、谐波与跳变。
别以为"非线性"是很远的事:一根弹簧只加一个三次方项(x 变成 x+x³),它就能长出线性弹簧永远没有的行为——多个稳定位置、整数倍的频率成分、随输入方向突然跳变的振幅。1.1 节年表上的大事件,源头几乎都能追到这一项。本节承接历史线索,把判据落到可执行层面;下一节再把这套判据翻译成随身携带的术语词典。
设受迫阻尼振子,线性版本与杜芬(Duffing)版本只差一个立方项:
对每个系统分别施加幅值 0.1、0.2、0.4 的简谐力,量取稳态响应幅值,看幅值是否随力幅线性放大。
import numpy as np from scipy.integrate import solve_ivp def steady_amplitude(force_amp, cubic): """量取稳态段位移幅值;cubic=False 为线性弹簧,True 为硬弹簧""" def rhs(t, s): x, v = s F = force_amp * np.sin(2 * np.pi * t / 10) # 周期 10 的简谐力 k = x + cubic * x**3 # 唯一的区别就在这一项 return [v, F - 0.5 * v - k] sol = solve_ivp(rhs, [0, 600], [0.01, 0.0], rtol=1e-9, max_step=0.05) tail = sol.y[0][sol.t > 400] # 舍弃暂态,只看稳态 return 0.5 * (tail.max() - tail.min()) base = {} for A in (0.1, 0.2, 0.4): lin = steady_amplitude(A, cubic=False) duf = steady_amplitude(A, cubic=True) if A == 0.1: base = {"lin": lin, "duf": duf} print(f"力幅 {A}: 线性幅值 {lin:.4f} (比值 {lin/base['lin']:.2f}) | " f"杜芬幅值 {duf:.4f} (比值 {duf/base['duf']:.2f})")
一次典型运行的结果(不同求解器设置会有末位波动):
力幅 0.1: 线性幅值 0.1043 (比值 1.00) | 杜芬幅值 0.1037 (比值 1.00) 力幅 0.2: 线性幅值 0.2085 (比值 2.00) | 杜芬幅值 0.1944 (比值 1.87) 力幅 0.4: 线性幅值 0.4170 (比值 4.00) | 杜芬幅值 0.3326 (比值 3.21)
解读:线性一侧的比值严格停在 1、2、4——叠加原理的数值体现。杜芬一侧比值掉到 1.87、3.21:三次方刚度随位移变大而变硬,系统在大力幅下"越拉越倔",响应增长跟不上输入增长。误差不是数值误差(容差 1e-9),是物理失真。变式:把刚度改成 x − x³(软弹簧),比值会超过 2 和 4(响应被放大);再把力幅继续加大到越过共振区,你会观察到幅值—频率曲线上突然的上下跳变——那是 3.1 节双稳态与迟滞的预告。

对照实验只展示了"比值变了",机制值得说透,因为这三条机制贯穿全册:
幅度相关。线性系统的增益对所有幅度是同一个数;非线性系统的增益随工作点漂移。硬弹簧中段增益最高、大位移处饱和。工程上的削波失真、放大器饱和、传感器量程外溢,全是这一条的外衣。
频率改组。对立方项代入 sin(ωt):(sin ωt)³ = (3 sin ωt − sin 3ωt)/4——输出里凭空出现三倍频。两条不同频率的力叠加时还会产生差频与和频(互调失真)。线性系统里频率成分各自独立通过、互不打架;非线性系统里它们互相调制。心跳频谱里出现不该有的倍频成分、机械振动里冒出高频噪声,排查思路都从这里起步。
多解与跳变。线性方程 ax=b 要么有唯一解要么无解;非线性方程可以有多组解并存(比如 3.1 节的双稳态),输入缓慢变化时系统可能停在"错的"那支解上,直到临界点被迫跳变。叠加原理失效只是表象,解的唯一性失守才是深层事件——这也是"平衡点"这个概念在非线性世界需要整套新判别工具(第二章)的原因。
| 性质 | 线性系统 | 非线性系统 |
|---|---|---|
| 叠加判据 | f(ax₁+bx₂)=af(x₁)+bf(x₂) 成立 | 失效,输出含交叉项 |
| 输入加倍 | 响应严格加倍 | 增益随幅度漂移,可饱和可放大 |
| 频率成分 | 与输入同频,不生新频率 | 产生倍频、和频、差频 |
| 解的个数 | 唯一(或无穷多) | 可多个解并存,随参数增减 |
| 参数微变 | 响应连续微变 | 可在临界值处突变(分岔) |
| 长期行为 | 指数衰减/增长或无阻尼振荡 | 吸引子:不动点、极限环、混沌 |
三步速查。第一步看右端:把所有未知量及其导数换成两个任意解的线性组合,方程是否仍然成立——成立即线性,这是定义的直接检验。第二步扫运算:未知量之间若出现乘积、幂次(平方及以上)、绝对值、三角函数、以未知量为指数的项,任中一项即非线性;系数里含未知量同样算数。第三步查来源:物理定律本身几乎总是非线性的(真实弹簧、真实流体、真实介质),"线性"往往是我们主动做的近似——所以更实用的问题不是"它线性吗",而是"在本次关心的工作范围内,非线性项相对线性项小几个量级"。两步速查配一个量级判断,建模时百分之九十的定性错误都能提前拦下。
带着这份对照表进入 1.3 节:把两侧的术语一一对齐,你的"双栏词典"就绪了。