本节摘要:状态空间用一阶矩阵微分方程 ẋ = Ax + Bu 统一描述各类动态系统,状态向量是系统"记忆"的最小完备集合。本节以弹簧质量阻尼系统为主线完成建模、数值离散化与仿真,讨论状态选取的非唯一性、输入输出方程的角色,以及采样周期对离散化精度的影响。
经典控制论用传递函数描述系统,擅长单输入单输出的频域分析,但方程阶次一高、多输入多输出一来就显笨拙。1960 年代卡尔曼等人推广的状态空间方法换了一个容器:把系统看成一组一阶微分方程 ẋ = Ax + Bu(状态怎么演化),配上输出方程 y = Cx + Du(能看到什么)。任何高阶方程都能降维打击成这个形式,机械、电气、热工、化工乃至生态种群模型,全部装进同一个矩阵容器——分析工具、控制器设计方法随之通用化。
状态的直觉定义:系统当前状况的最小完备快照——知道它,加上未来的输入,就能预报未来的一切。弹簧质量阻尼系统的状态是什么?质量块此刻的位置与速度:位置加上速度,配合方程就能推出此后每一刻的运动,缺一不可,多一是冗余。
质量 m 挂在刚度 k 的弹簧上,受阻尼 c 与外力 u。牛顿定律给出 m·ẍ + c·ẋ + k·x = u。二阶方程拆成两个一阶:令 x₁ = 位置、x₂ = 速度,则 ẋ₁ = x₂,ẋ₂ = (u − c·x₂ − k·x₁)/m。装进矩阵:
import numpy as np m, c, k = 1.0, 0.8, 4.0 A = np.array([[0.0, 1.0], [-k/m, -c/m]]) B = np.array([[0.0], [1.0/m]]) def simulate(A, B, u_func, x0, T=10.0, dt=0.01): """前向欧拉离散化仿真,返回轨迹""" n_steps = int(T / dt) Ad = np.eye(2) + A * dt # 欧拉离散化 Bd = B * dt xs = [np.array(x0, dtype=float)] for i in range(n_steps): xs.append(Ad @ xs[-1] + Bd.flatten() * u_func(i * dt)) return np.array(xs) # 阶跃外力 1N traj = simulate(A, B, lambda t: 1.0, [0.0, 0.0]) print("末态位置:", round(traj[-1, 0], 3), "(理论稳态 = 1/k =", 1.0 / k, ")") print("超调峰值:", round(traj[:, 0].max(), 3))
位置曲线是典型的二阶响应:从零爬升、微微过冲、围绕稳态 0.25 衰减振荡。改阻尼 c 从 0.8 到 3,系统从"欠阻尼振荡"变成"过阻尼缓慢单调爬升";调到临界值 c = 2√(mk) = 4,最快无超调。阻尼这个旋钮,就是几乎所有二阶系统(悬架、悬架、温度串级回路)共享的"性格旋钮"。
计算机按采样周期 dt 逐步推进,连续方程必须离散化。上例用的前向欧拉最直观:ẋ ≈ (x(t+dt) − x(t))/dt,精度一阶。两条工程提醒:其一,dt 必须远小于系统最快模态(特征值绝对值的倒数),否则欧拉法会给衰减系统人为注入能量,把稳定系统仿真成发散——把上例 dt 改成 0.8 试试,衰减振荡会变成增幅振荡;其二,精确离散化有解析形式(矩阵指数 Ad = e^{A·dt}),SciPy 一行可用:
from scipy.linalg import expm Ad = expm(A * 0.05) # 精确离散化,采样 50ms print("离散系统特征值模:", np.abs(np.linalg.eigvals(Ad))) # 均 < 1 即稳定
判稳口径由此统一:连续系统看 A 的特征值实部是否全为负;离散系统看 Ad 的特征值模是否全小于 1。两个口径说的是同一件事——扰动会衰减还是放大,这正是 7.2 节的主角。
状态变量的选取不唯一:位置速度是一种,位置与"位置加速度"的线性组合同样能推演未来——状态坐标的任何可逆线性变换都给出等价模型。工程里按"可测性"与"物理意义"挑:传感器直接量得到的状态最讨喜。输出方程 y = Cx 表达"哪些线性组合能被观测":位移传感器就是 C = (1, 0);若只有加速度计,C = (−k/m, −c/m) 加输入项。状态是系统的全部记忆,输出只是记忆的投影——投影不全时如何重构记忆,就是第 8 章(卡尔曼滤波)里"能观性"的问题。

⚠️ 常见坑:模型阶数贪高。给三阶系统硬配五阶模型(多塞两个噪声状态),参数辨识与控制器设计都跟着遭殃。建模的功夫在于识别"哪些动态是主导的",低阶主导模型往往胜过高阶全景模型。
状态空间的力量在于跨域统一,值得再看两个近亲。电感电容电阻电路:电容电压与电感电流是天然的状态变量,方程形式与弹簧质量阻尼一模一样——电感当质量、电阻当阻尼、电容倒数当刚度,机械工程师与电路工程师在状态空间里说的是同一种语言。一阶热系统(烤箱与房屋供暖):热容对应电容、热阻对应电阻,状态只有一个(温度),是一阶系统的代表——它没有超调,只有指数逼近,时间常数决定"多快到达稳态的百分之六十三"。把三个域排成类比矩阵后你会发现:建模的功夫其实是认脸——见过弹簧质量阻尼的脸,就能认出电路与加热炉的脸。这就是教科书反复用同一批例子的原因,也是本教程坚持手写这些小模型的原因:模型库不在代码里,在你的模式识别里。
模型有了,下一节回答控制工程的第一问:这个系统会不会自己跑飞——不求解方程,能不能直接判断?