假设你开了一个夜夜计息的储蓄账户。每天清晨你往里面存一笔钱,每天深夜银行按固定利率把昨天的余额滚一遍,账本上便出现今天的新数字:今天余额 = 昨日余额 × 利率 + 今日存入。这短短一行,就是离散世界里最朴素的差分方程。它不像微分方程那样依赖“无穷小”的极限思想,而是在一格接一格的离散日期上,用“昨天推出今天”的方式滚动向前。本文就用这套“复利账本”当向导:先认识记账规则(差分方程分类),再看本金自然生息(齐次解)、外部存入的效果(特解)如何叠加成完整余额(全解);再引入审计员爱用的“配方表”(Z变换),把逐日记账变成一次乘除;最后用利率大小判断账户会不会爆仓(稳定性)。读完你会发现,语音增强、时序预测、数字滤波器——AI 工程师天天都在和这本“账”打交道。

岗位关联

对 AI 从业者而言,差分方程是理解序列模型、数字滤波器和控制系统的基础,掌握它的求解思路,等于拿到了分析一切离散动态系统的钥匙。

目录
  1. 可视化演示
  2. 差分方程入门
  3. 差分方程分类
  4. 齐次解求解
  5. 特解求解
  6. 全解与初值
  7. Z变换基础
  8. Z变换求解
  9. 系统稳定性
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示LCCDE递推求解过程、Z变换特征根与单位圆稳定性判据、IIR与FIR滤波器脉冲响应对比,切换模式查看不同维度。

本节配有交互动效(进入视口后自动加载,约 3KB)。

递推求解 y[n]=a1*y[n-1]+a2*y[n-2]+b0*x[n] 特征根|p|<1则系统BIBO稳定 离散序列逐点递推,历史输出反馈参与计算

差分方程入门

月初你开了个存款账户,每天记录余额。今天余额怎么算?无非是“昨天的余额按利率滚一晚,再加上今天新存的钱”。如果用 y[n] 表示第 n 天的余额,x[n] 表示第 n 天存入的钱,那么“今天余额 = 利率 × 昨天余额 + 今日存入”就是一条最朴素的差分方程。它没有微积分里“无限小”的复杂概念,只有一格格离散的日期在跳动向前。

数字信号处理中,离散时间信号 x[n]、y[n] 正像是账本里逐日记下的数字序列。差分方程描述的正是“新输出如何由旧输出和当前输入组合出来”的递推规则——这也是离散时间系统最核心的表示方式。

当系统不仅回看昨天,还要回看前天、大前天乃至 N 天前时,方程便扩展为一般形式:

这本账的规则一经确定,剩下的就是机械地迭代:让第 0 天的余额作为起点,一天接一天地套用公式,把整个序列 y[n] 逐点“滚”出来。这就是差分方程在计算机上最朴素的解法——循环迭代,永不落空。

∑k=0Naky[n−k]=∑m=0Mbmx[n−m]\displaystyle \sum_{k=0}^{N} a_k y[n-k] = \sum_{m=0}^{M} b_m x[n-m]
左边是输出信号自身的历史组合,右边是输入信号的历史组合,这行式子概括了所有线性常系数差分方程的骨架。
  1. y[n-k]输出信号在“第 n 天往前回溯 k 天”时的值,是账本中的历史余额。
    y[n−k]y[n-k]
  2. x[n-m]输入信号延迟 m 步后的值,相当于 m 天前存入的那笔钱。
    x[n−m]x[n-m]
  3. a_k输出项的加权系数,类似于“复利利率”对历史余额的放大或衰减。
    aka_k
  4. b_m输入项的增益系数,表示今天或过去某天的存入对余额的影响力度。
    bmb_m
  5. N方程阶数,决定系统最多“回忆”多少天的旧账,常用于判断系统复杂程度。
    NN

差分方程分类

记账规则千差万别:有人只看昨天,有人要结合前三天;有人利率固定,有人随季节浮动。差分方程的数学家族也按几个关键维度分门别类,认清类别才能选对求解工具。

第一个维度是“阶数”,也就是方程中输出项的最大延迟天数 N。只看昨天的是一阶方程,看到前天的是二阶,回忆 N 天的就是 N 阶方程。第二个维度是系数是否固定:利率不变叫常系数方程,随日期浮动叫变系数方程。第三个维度最要紧——账本是否有外部存入。没有存入、完全靠自己滚动的是齐次方程;有外部输入驱动的是非齐次方程:

分类不是学院派的洁癖。工程上遇到一条差分方程,第一反应永远是“这是齐次还是非齐次、什么阶数”,因为这直接决定了接下来用特征根法还是试解法——就像记账员看到账本,第一件事是判断“本月有没有新存入”。

∑k=0Naky[n−k]={0,齐次方程∑m=0Mbmx[n−m],非齐次方程\displaystyle \sum_{k=0}^{N} a_k y[n-k] = \left\{ \begin{array}{ll} 0, & \text{齐次方程} \\ \displaystyle\sum_{m=0}^{M} b_m x[n-m], & \text{非齐次方程} \end{array} \right.
齐次方程右边为零,像是“账户里只有老本在复利滚动”;非齐次方程右边有输入项,像是“每天还有新钱入账”。
  1. 等号右边为 0 的情形对应齐次方程,表示没有外部输入,余额只靠自身历史演进。
    ∑k=0Naky[n−k]=0\sum_{k=0}^{N} a_k y[n-k] = 0
  2. 等号右边为输入序列的情形对应非齐次方程,外部存入 x 直接驱动余额变化。
    ∑m=0Mbmx[n−m]\sum_{m=0}^{M} b_m x[n-m]
  3. 分类的意义齐次方程的解刻画系统“性格”,而非齐次只在性格之上叠加外部影响,二者各自求解再叠加,思路清晰。
    {0∑bmx[n−m]\left\{ \begin{array}{ll} 0 \\ \sum b_m x[n-m] \end{array} \right.

齐次解求解

某天你决定不再往账户里存钱,但余额不会静止——老本照样每天按利率复利滚动。账本会呈现出什么趋势?这个问题回答的正是系统“无人打扰时的自然走势”,也就是齐次解。

把输入置零(x = 0),方程退化为齐次差分方程。数学家的直觉是猜 y[n] = λⁿ 这样的指数形式——因为“昨天余额乘以利率得到今天余额”这类规则,天然和指数函数的等比增长同构。将猜测代入方程后,指数因子被逐项约去,剩下的方程只含 λ:

这个关于 λ 的代数方程叫特征方程,它的根就叫特征根。每个特征根对应一种自然演化模式:λ 小于 1,老本会慢慢萎缩归零;λ 大于 1,老本会复利爆炸。多个特征根时,齐次解是各模式的线性叠加。

特征根就像账户利率。同样是复利滚雪球,利率 1.2 和利率 0.6 是两种截然不同的命运。齐次解把“系统内在的脾气”彻底摊在了桌面上——这也是为什么后续稳定性分析只需盯住特征根的位置。

λN+a1λN−1+a2λN−2+⋯+aN=0\displaystyle \lambda^N + a_1 \lambda^{N-1} + a_2 \lambda^{N-2} + \cdots + a_N = 0
yh[n]=C1λ1n+C2λ2n+⋯+CNλNn\displaystyle y_h[n] = C_1 \lambda_1^n + C_2 \lambda_2^n + \cdots + C_N \lambda_N^n
第二个公式是齐次解的通式:N 个特征根各自贡献一个“复利模式”,每个模式前待定的 C 就是这项模式的初始权重。
  1. λ 的 N 次幂所有特征根项中最高次为 N,对应系统的阶数。
    λN\lambda^N
  2. a₁ 到 a_N从原差分方程中代入 λⁿ 并约去公因子后,各延迟项的系数自然落位。
    a1λN−1+a2λN−2+⋯+aNa_1 \lambda^{N-1} + a_2 \lambda^{N-2} + \cdots + a_N
  3. C_k λ_k^n第 k 个特征根贡献的齐次解分量,C_k 待定,需要初值确定。
    CkλknC_k \lambda_k^n

特解求解

复利账本还有第二种故事线:即使你没主动存钱,公司每月自动打入工资——外部输入始终存在。特解要回答的正是“在长期稳定输入下,余额会形成什么样的固定形态”。

特解的思路是“先观察输入长什么样,再预设同形状的输出”。输入是常数,就假设输出也是常数;输入是指数,就假设输出是同底数的指数;输入是正弦,就假设输出是同频率的正弦组合。把预设形式代入原方程,用待定系数法解出其中的未知系数。

以最常见的阶跃输入 x[n] = u[n](从第 0 天起每天存入 1 元)为例,特解假设为常数 P 乘以 u[n]。代入一般形式后:

特解就像是长期规律生活形成的“稳态余额”:公司每月固定打款,账户每月支出也固定,于是余额终将停在某个数不动。短期波动是齐次解的事,长期定格则归特解管——两条线各司其职。

yp[n]=∑m=0Mbm∑k=0Nak⋅u[n]\displaystyle y_p[n] = \frac{\displaystyle\sum_{m=0}^{M} b_m}{\displaystyle\sum_{k=0}^{N} a_k} \cdot u[n]
特解是一个常数乘上阶跃信号:长期固定存入时,余额最终稳定在“所有存入增益之和 ÷ 所有历史系数之和”的位置。
  1. 常数假设输入为阶跃常量,在常系数线性方程驱动下,稳态输出也应是常量。
    yp[n]=P⋅u[n]y_p[n] = P \cdot u[n]
  2. P 的分子所有输入系数 b_m 之和,体现“每笔存入的累计影响力”。
    ∑m=0Mbm\sum_{m=0}^{M} b_m
  3. P 的分母所有输出系数 a_k 之和,体现“历史余额的折损程度”。
    ∑k=0Nak\sum_{k=0}^{N} a_k
  4. u[n]单位阶跃序列,n 大于等于 0 时为 1,n 小于 0 时为 0,表示从某天起开始有固定存入。
    u[n]u[n]

全解与初值

真实账户的动态从来是“两条故事线”同时上演:老本按利率自己滚(齐次解),新存入持续塑造稳态(特解)。把两者叠加,便得到差分方程的全解:

全解在数学上很完整,但还差最后一块拼图——待定系数 C_k 没确定。它们由初始条件决定:账户在开启那天到底有多少钱?把这个初值代入通解,就能解出所有 C_k,得到只属于这条具体账本的唯一曲线。

实践中常把全解拆成“零输入响应”和“零状态响应”。前者指初值不为零但输入为零时系统的自由释放,后者指初值为零但输入驱动下的受迫响应。两者合起来,正好覆盖所有真实情形。

全解像是把人的一生写成“性格 + 环境 + 出身”三变量的函数:性格是特征根,环境是特解,出身是初值。缺了出身,曲线从哪开始都不知道;缺了环境,长期走势纯属空谈。三者齐备,差分方程才真正“算完”。

y[n]=∑k=1NCkλkn+yp[n]\displaystyle y[n] = \sum_{k=1}^{N} C_k \lambda_k^n + y_p[n]
y[0]=∑k=1NCk+yp[0]⟹解出 C1,C2,…,CN\displaystyle y[0] = \sum_{k=1}^{N} C_k + y_p[0] \quad \Longrightarrow \quad \text{解出 } C_1, C_2, \ldots, C_N
最后一个式子说明初值如何“锁死”系数:把 n = 0 代入全解,得到包含 N 个未知数的代数方程组,解之即得全部 C_k。
  1. 齐次解求和项N 个自然模式按系数 C_k 加权,代表系统自身性格。
    ∑k=1NCkλkn\sum_{k=1}^{N} C_k \lambda_k^n
  2. 特解项 y_p[n]外部输入长期驱动的稳态成分。
    yp[n]y_p[n]
  3. n=0 代入用初始余额 y[0] 建立约束方程,求出所有待定系数。
    y[0]=∑k=1NCk+yp[0]y[0] = \sum_{k=1}^{N} C_k + y_p[0]

Z变换基础

审计员看账本的方式和普通人不一样。普通人一天一行读下去,审计员却爱把整本账按“折现率的幂次”重新归类——第 n 天的记录乘以 z⁻ⁿ 再求和,最终得到一张抽象的“配方表”。这张配方表就是 Z 变换。

Z 变换把时域里的一条序列 x[n] 映射到复频域里的函数 X(z),定义式为:

其中 z 是一个复变量,可以粗略理解为“广义的利率折现因子”。序列中越久远的项,z⁻ⁿ 的负幂次越大,对整个函数形态的影响方式也越独特。Z 变换最诱人的性质是:时域中的“延迟一天”(即 x[n-1]),在 z 域里只是乘上一个 z⁻¹——递推运算由此变成乘法运算。

审计员为什么要大费周章搞“配方表”?因为账本逐行看太慢——尤其当递推规则层层嵌套时。Z 变换把时间上的“串行依赖”压缩成空间上的“代数关系”,之后要加减乘除,也不过是一次配方运算的事。

X(z)=∑n=0∞x[n]z−n\displaystyle X(z) = \sum_{n=0}^{\infty} x[n] z^{-n}
Z{x[n−1]}=z−1X(z)\displaystyle \mathcal{Z}\{x[n-1]\} = z^{-1} X(z)
位移性质是 Z 变换的灵魂:账本里“往前翻一天”这个动作,在配方表里只是一次轻巧的乘法。
  1. 求和从 n=0 到无穷遍历序列的每一个时间点,把全部历史信息汇总进一个函数。
    ∑n=0∞\sum_{n=0}^{\infty}
  2. x[n]第 n 天的原始记录值,是序列中的基本元素。
    x[n]x[n]
  3. z⁻ⁿ天数的折现因子,n 越大幂次越深,不同日期的信息被编码进 z 的不同幂次。
    z−nz^{-n}
  4. 延迟变乘法时域延迟一步相当于 z 域乘以 z⁻¹,这是差分方程代数化的关键。
    x[n−1]  ↔  z−1X(z)x[n-1] \;\leftrightarrow\; z^{-1} X(z)

Z变换求解

有了配方表,审计员的绝活才真正施展:把整本差分账做 Z 变换,利用位移性质,递推规则会直接坍缩成代数方程。

对差分方程两边同时做 Z 变换,线性性质保证求和可以逐项拆开,位移性质把每一项 y[n-k] 变成 z⁻ᵏY(z)(初始条件为零时),于是“今天的余额依赖昨天”这类话,变成了 Y(z) 与 X(z) 之间的显式比值——系统函数 H(z):

H(z) 完全由系统自身的系数决定,与具体输入无关。它就像账本的“体质档案”:给出任意输入 X(z),输出 Y(z) = H(z)X(z),一次乘法便取代了 N 步迭代。

得到 Y(z) 后,最后一步是反 Z 变换。常用的手法是把 Y(z) 展开成部分分式:拆成若干个形如 A/(1 - λz⁻¹) 的简单项之和,每个简单项对应一条指数时域序列,查表即可还原 y[n]。

Z 变换求解的本质,是把“逐日滚动”的账本故事压缩成一张静态配方,算完再展开回时间线。它不能改变账本本身,却让算账从“跑一百遍循环”变成“一行公式”——这就是变换域方法的威力。

H(z)=Y(z)X(z)=∑m=0Mbmz−m1+∑k=1Nakz−k\displaystyle H(z) = \frac{Y(z)}{X(z)} = \frac{\displaystyle\sum_{m=0}^{M} b_m z^{-m}}{\displaystyle 1 + \sum_{k=1}^{N} a_k z^{-k}}
Y(z)z=R1z−λ1+R2z−λ2+⋯⟹y[n]=R1λ1n+R2λ2n+⋯\displaystyle \frac{Y(z)}{z} = \frac{R_1}{z - \lambda_1} + \frac{R_2}{z - \lambda_2} + \cdots \quad \Longrightarrow \quad y[n] = R_1 \lambda_1^n + R_2 \lambda_2^n + \cdots
部分分式展开是“配方的反向操作”:把复杂的 H(z)X(z) 拆成最简单元,每个单元对应一个特征根的时域模式。
  1. 分子多项式输入系数 b_m 与 z⁻ᵐ 的乘积之和,来自等号右边各项的 Z 变换。
    ∑m=0Mbmz−m\sum_{m=0}^{M} b_m z^{-m}
  2. 分母多项式由齐次方程系数构成,令分母为零正是特征方程。
    1+∑k=1Nakz−k1 + \sum_{k=1}^{N} a_k z^{-k}
  3. 部分分式拆解把 Y(z) 按特征根拆成简单分式之和。
    Rk1−λkz−1\frac{R_k}{1 - \lambda_k z^{-1}}
  4. 反变换还原每个简单分式对应齐次解形式的时域项。
    RkλknR_k \lambda_k^n

系统稳定性

现在回到最实际的问题:这本账会不会爆仓?长期看,余额的走势由特征根主宰。齐次解里的每一项都形如 Cλⁿ,λ 的模长决定了这一项的命运。

如果某个特征根的模大于 1,即使没有外部输入,老本也会越滚越大,最终溢出系统——这叫不稳定。模等于 1 则恰好在“不生不灭”的临界线上,长期不消散也不增长。只有全部特征根模长小于 1 时,齐次解才会随时间衰减殆尽,输出最终收敛到特解决定的稳态。判据干净利落:

工程上谈“稳定”时还常区分暂态响应和稳态响应:暂态响应正是齐次解的尾巴,只要特征根在圆内就会快速消退;稳态响应则是特解在长期的表现。回到账本:利率只要小于 1,哪怕初始存款再多,历史惯性也会消散,余额最终完全由固定存入(输入)说了算。这就是稳定系统的含义——它会忘记过去,只回应现在。反过来,利率大于 1 的账户,任何风吹草动都会被复利放大成灾难。

∣λk∣<1,k=1,2,⋯ ,N\displaystyle |\lambda_k| < 1, \quad k = 1, 2, \cdots, N
特征根全部落在复平面单位圆内,系统稳定;落在圆外则在任意扰动下发散。这是分析一切离散系统稳定性的通用量尺。
  1. 特征根 λ_k特征方程的第 k 个根,对应系统第 k 种自然模式。
    λk\lambda_k
  2. 模长|λ_k|复平面上根到原点的距离,通过模长比较大小。
    ∣λk∣|\lambda_k|
  3. 小于 1所有模式都衰减,暂态分量逐渐消失,系统进入稳态。
    <1< 1
  4. 单位圆模长等于 1 的集合,是稳定与不稳定的分界线。
    ∣λ∣=1|\lambda| = 1

AI 应用场景

数字滤波器设计中的差分方程

阶段:信号预处理

解决的问题:语音、传感器数据往往含有高频噪声。传统频域滤波需要整段数据一起处理,延迟高、不适合流式输入。差分方程描述的 IIR 滤波器(如 y[n] = αy[n-1] + (1-α)x[n])只需保存几个历史值即可实时更新输出,计算量极小。

具体案例:智能音箱的麦克风阵列在唤醒词检测前,先用一个一阶低通差分方程对音频流去噪;嵌入式芯片上每条指令只需两次乘加,保证 10ms 内完成一帧处理,这正是差分方程“昨天推今天”迭代思想在 DSP 芯片上的直接落地。

时间序列预测中的 AR 模型

阶段:特征建模与预测

解决的问题:股票价格、流量监控等时序数据本质上由“历史值 + 噪声”驱动。传统方法难以刻画这种自回归依赖。差分方程的齐次解与特解恰好对应 AR 模型的“动力项”与“外部干预项”,建模时直接套用特征根判断序列的均值回归与发散风险。

具体案例:电商平台用 AR(1) 模型 y[n] = φy[n-1] + ε[n] 预测日订单量:φ 的估计值若接近 1,说明序列有强惯性(近乎随机游走),系统会提醒运营团队调整库存策略;若 φ 小于 0.5,说明数据很快回归基线,无需激进备货。Z 变换视角则把该模型视为一个一阶系统,用稳定性分析评估预测是否可靠。

离散 PID 控制系统的差分实现

阶段:闭环控制决策

解决的问题:机器人电机调速、无人机姿态控制需要周期性根据误差调整输出。连续 PID 的微分项在微控制器上无法直接实现,必须离散化为差分方程形式——误差的历史累加(积分)与前后两次误差之差(微分)都化为对 y[n-1]、e[n-1] 的延迟运算。

具体案例:自动驾驶小车巡线控制中,控制量 u[n] = u[n-1] + Kp(e[n] - e[n-1]) + Ki·e[n],正是典型一阶差分方程。工程师通过分析该方程的特征根选择 PID 系数,确保系统不振荡发散,全解与稳定性分析在这里是实打实的工程标尺。

Python 演示

python48 行
# -*- coding: utf-8 -*-"""差分方程求解器演示 - 复利账本的数字化实现""" class DiffEqSolver:    """求解线性常系数差分方程     方程形式:        a0*y[n] + a1*y[n-1] + ... + aN*y[n-N]        = b0*x[n] + b1*x[n-1] + ... + bM*x[n-M]    """     def __init__(self, a_coeffs, b_coeffs):        self.a_coeffs = a_coeffs        self.b_coeffs = b_coeffs        self.y_cache = []     def solve(self, x_seq, y_init):        """迭代求解差分方程, 返回输出序列 y"""        order = len(self.a_coeffs) - 1        n_total = len(x_seq)        y_seq = [0.0] * n_total        for idx, val in enumerate(y_init):            y_seq[idx] = val        for n in range(order, n_total):            acc = 0.0            for k in range(len(self.b_coeffs)):                if n - k >= 0:                    acc += self.b_coeffs[k] * x_seq[n - k]            for k in range(1, order + 1):                acc -= self.a_coeffs[k] * y_seq[n - k]            y_seq[n] = acc / self.a_coeffs[0]        self.y_cache = y_seq        return y_seq     def step_response(self, n_points):        """阶跃输入 x[n] = 1 的系统响应"""        x_seq = [1.0] * n_points        return self.solve(x_seq, [0.0] * (len(self.a_coeffs) - 1))  if __name__ == "__main__":    # 例: y[n] = 0.8*y[n-1] + 0.5*x[n]    # 相当于每天固定存入 0.5, 余额按 0.8 的利率复利    solver = DiffEqSolver([1.0, -0.8], [0.5])    y = solver.step_response(20)    print("n     y[n]")    for idx, val in enumerate(y):        print(f"{idx:2d}   {val:.4f}")
目的:用迭代法求解一阶差分方程,模拟“复利账本”在阶跃输入下的余额增长曲线。
  1. self.a_coeffs = a_coeffs保存差分方程左端系数,即输出各项的权重(利率体系)。
  2. y_seq = [0.0] * n_total预分配输出序列长度,避免运行时动态扩容。
  3. acc += self.b_coeffs[k] * x_seq[n - k]累加当前及历史输入带来的“存入贡献”。
  4. acc -= self.a_coeffs[k] * y_seq[n - k]减去历史输出项,体现“昨日余额”的影响。
  5. y_seq[n] = acc / self.a_coeffs[0]经过归一化,解出当前输出值。
  6. self.y_cache = y_seq缓存结果,方便后续取用,避免重复迭代。
  7. if __name__ == "__main__":脚本入口,仅在直接运行时执行演示逻辑。

常见误区

误区看到 y[n] = 0.8y[n-1] + 0.5,觉得直接“移项合并同类项”就能解出 y[n],就像解一次方程那样。

正解差分方程的未知量是一条完整序列,而非单个数值。n 每取一个值,等式就换了一副面孔。正确做法是把它看成递推规则:给一个起点,循环迭代出整条序列;或者用 Z 变换把它整体化为代数方程一次解出。正如账本必须一天一天记,想一天写出 30 天的余额是做不到的。

为何常见:表达式中“等号 + 未知数”的形态和代数方程太像,初学者容易忽略 n 的离散变化本质。

误区齐次解 Cλⁿ 算出来不就完了吗,λ 大于 1 有什么关系,反正有特解在拉回来。

正解特征根大于 1 意味着齐次解爆炸式增长,任何微小扰动都会被复利放大到淹没系统,特解根本拉不住。稳定性的物理直觉是“历史记忆会不会自行消退”:λ 小于 1 老账淡忘,λ 大于 1 老账阴魂不散还越滚越大。工程上这是验证系统是否可用的第一道闸门。

为何常见:只练了“怎么解”没练“解的物理含义”,把数学符号完成当成了任务终点。

误区齐次解通式里有一堆 C,考试时随便取个 1 代入,反正模式对就行。

正解C 由初始条件唯一确定,不是自由参数。账户第一天有多少余额,直接锁死整条曲线的高度和形状。不指定初值,全解就是一个“家族”而非“一个答案”;工程仿真中初值设定错误,输出曲线会整体偏置,导致后续控制决策全错。

为何常见:齐次解推导过程不涉及初值,学生容易误以为 C 只是形式主义,忽略了初始条件才是连接数学与真实系统的桥梁。

误区时域差分方程是一套方法,Z 变换是另一套方法,两者互相独立,学 Z 变换等于是从头学一门新学科。

正解Z 变换只是把同一条序列换了一种坐标系来看,好比同一笔账,流水账本和配方表只是两种呈现方式。时域里延迟一天是递推,z 域里延迟一天是乘 z⁻¹;同一个系统的本质没有任何改变。理解这一点,变换域方法的神秘感便烟消云散。

为何常见:教材通常分章讲授时域和变换域,缺乏对比,读者便误以为两套知识毫无关联。

误区齐次解已经能画出曲线形态,非齐次项的存在只影响“微调”,可以忽略。

正解齐次解只描述无输入时的自然演变,外部输入是系统的核心驱动力。没有特解,阶跃输入下系统长期输出去向何方完全无法回答;特解缺失时,相当于只描述了“账户老本滚动”,却丢掉了“每月工资到账”这一半剧情。真实系统中,全解 = 齐次解 + 特解 + 初值定系数,一个都不能少。

为何常见:齐次求解流程清晰、技巧性强,学生在练习中形成路径依赖,忽略了特解同样承载着重要的物理信息。

面试题

Q1. 差分方程 y[n] = 0.5y[n-1] + x[n] 描述的系统的阶数是?

单选题 · easy

  • A.零阶系统
  • B.一阶系统← 正确答案
  • C.二阶系统
  • D.三阶系统

答案:B。阶数等于方程中输出项的最大延迟量。这里只出现 y[n-1],最大延迟为 1,所以是一阶系统。二、三阶系统会分别出现 y[n-2]、y[n-3]。就像账本只回看昨天是一阶记忆,回看前天就是二阶记忆。

Q2. 差分方程齐次解的具体形式主要由什么决定?

单选题 · mid

  • A.输入信号大小
  • B.特征方程求根← 正确答案
  • C.采样时间间隔
  • D.输出信号幅度

答案:B。齐次解来源于特征方程的解(特征根),特征根的个数与数值决定了通解结构;输入信号决定的是特解,采样间隔只是离散化尺度。特征根正如账户利率,利率是多少,老本滚动的模式就是什么样。

Q3. Z 变换对求解差分方程有哪些帮助?

多选题 · easy

  • A.将差分转为代数运算← 正确答案
  • B.卷积变成乘法运算← 正确答案
  • C.无需了解信号性质
  • D.直接确定输出波形

答案:AB。Z 变换利用位移性质把延迟变为乘 z⁻¹,使差分方程变成代数方程(A 对);时域卷积在 z 域对应乘积(B 对)。但它不能免除对信号性质的了解,也不能直接画出输出波形,反变换步骤仍然必要。

Q4. 某系统特征根为 λ = 1.2,其阶跃响应长期来看会?

单选题 · mid

  • A.快速收敛到稳定值
  • B.振荡并逐渐衰减
  • C.指数增长不断膨胀← 正确答案
  • D.始终保持初始状态

答案:C。特征根模长大于 1 时,齐次解分量 C·1.2ⁿ 指数膨胀,阶跃响应无法收敛到稳态值,最终发散。只有 |λ| < 1 时系统才稳定,这正是“利率太高,老本复利滚成雪崩”的数学表达。

Q5. 差分方程的全解由哪两部分叠加构成?

单选题 · hard

  • A.齐次解与特解之和← 正确答案
  • B.输入信号与输出信号之和
  • C.频率解与相位解之和
  • D.瞬态解与量化解之和

答案:A。线性差分方程的通解 = 齐次解(自由响应) + 特解(受迫响应),再由初值确定待定系数。输入与输出之和没有物理意义;频率解与相位解是频域分析的范畴;量化解易与量化误差混淆。全解正如“老本复利 + 外部存入”双线叙事。

Q6. 关于齐次解的特性,下列说法正确的是?

多选题 · hard

  • A.由特征根决定模式← 正确答案
  • B.系数由初值条件确定← 正确答案
  • C.与外部输入信号无关← 正确答案
  • D.只存在于稳定系统之中

答案:ABC。特征根决定齐次解中 λₖⁿ 的模式(A 对);叠加系数 Cₖ 由初始条件解出(B 对);齐次解是输入置零时的解,天然与输入无关(C 对)。不稳定系统同样有齐次解,只是它会发散,故 D 错。老本滚动的规律无论账户是否倒闭都存在。

Q7. 系统函数 H(z) 的物理意义是?

单选题 · mid

  • A.输出与输入的 z 域比值← 正确答案
  • B.系统存储的总能量
  • C.输入信号的采样率
  • D.输出波形的峰值幅度

答案:A。系统函数定义为 H(z) = Y(z) / X(z),完全由系统结构决定,与输入无关。它给出任意输入下输出的 z 域表达式;系统能量、采样率、峰值幅度都不是 H(z) 的定义内容。H(z) 是账本的“体质档案”,不管存多少钱都能用。

Q8. 离散线性时不变系统稳定的充要条件是?

单选题 · hard

  • A.特征根全在单位圆内← 正确答案
  • B.特征根全在单位圆外
  • C.特征根全在实轴上
  • D.特征根恒等于常数 1

答案:A。全部特征根模长小于 1,齐次解随时间衰减,系统稳定(B 方向完全相反;C 在实轴上仍需比较模长;D 中 λ=1 处于临界,不满足严格衰减)。这正是“利率小于 1,老账终将淡忘”的复利直觉。

Q9. 以下哪些是差分方程的典型应用场景?

多选题 · easy

  • A.股票价格序列建模← 正确答案
  • B.数字低通滤波器设计← 正确答案
  • C.微积分求极限运算
  • D.离散 PID 控制器← 正确答案

答案:ABD。AR 时序模型、IIR/FIR 数字滤波器、离散 PID 控制都直接以差分方程为数学骨架。微积分求极限属于连续数学范畴,与离散差分方程不是一回事。差分方程天生就是数字世界里“逐拍更新”规则的代言人。

Q10. 关于单位圆判据的说法正确的是?

单选题 · mid

  • A.圆内稳定圆外发散← 正确答案
  • B.圆内发散圆外稳定
  • C.圆上所有点都稳定
  • D.单位圆仅用于连续系统

答案:A。特征根落在单位圆内则齐次解衰减(稳定),落在圆外则发散(不稳定)。圆上的根处于临界状态,不是稳定也不是发散;单位圆专门用于离散系统,连续系统用的是 s 域虚轴。判据与复利直觉完全一致:利率不过线,本金才能长治久安。