最近好几个学弟学妹拿着卷子来问我状态转移矩阵到底怎么求,我发现大家最大的困扰不是“不会算”,而是“方法太多不知道用哪个”。翻开任意一本《现代控制理论》,状态转移矩阵的求法少则两三种、多则五六种,教材里每种方法各写各的,例题还都不一样,学完只觉得脑袋里塞了一团浆糊。
这篇文章就把状态转移矩阵的四种主流求法——拉普拉斯反变换法、凯莱-哈密顿定理法、无穷级数法、相似变换法,从头到尾各走一遍,而且统一用同一个二阶系统做例子。你跟着算完这四遍,会发现它们其实是在用四种语言描述同一件事:矩阵指数 e^{At} 到底长什么样。把这个底层逻辑想通了,以后做题、考试、做工程仿真,你都能快速判断该上哪种方法。
1. 先把概念捋清楚:状态转移矩阵到底在干什么
1.1 从状态方程说起
现代控制理论和经典控制理论最大的区别,就是引入了状态空间描述。对于线性定常系统,状态方程写成:
x'(t) = A·x(t) + B·u(t)其中 x(t) 是 n 维状态向量,A 是 n×n 系统矩阵。当输入 u(t) = 0 时,方程变成齐次形式:
x'(t) = A·x(t)这个方程的解是:
x(t) = e^{A(t-t0)}·x(t0)这里面的 e^{At} 就是状态转移矩阵,通常记作 Φ(t)。它回答的问题是:给定初始状态 x(0),系统在没有任何外部输入的情况下,经过时间 t 之后状态会跑到哪里去。如果把系统比作一辆松开油门的车,状态转移矩阵就是描述这辆车在无动力情况下滑行轨迹的“演化规则”。
注意,这里 e^{At} 不是把矩阵 A 的每个元素取指数,而是矩阵指数的严格定义:
e^{At} = I + At + (A²t²)/2! + (A³t³)/3! + ...所以“求状态转移矩阵”本质上就是“计算矩阵指数”。四种方法,全是围绕这个指数展开的。
1.2 四种方法其实是四种视角
为什么同一个 e^{At} 会有这么多求法?因为它们从不同角度逼近同一个数学对象:
- 拉普拉斯反变换法:把矩阵指数放到复频域里处理,借助 (sI - A)^{-1} 的反变换回到时域。
- 凯莱-哈密顿定理法:利用矩阵满足自身特征方程这条性质,把无穷级数降次成有限项矩阵多项式。
- 无穷级数法:直接回到定义,硬算级数,理论上最“朴素”,实操上最“劝退”。
- 相似变换法:通过特征分解把 A 变成对角阵或约当标准形,把矩阵指数变成标量指数的组合。
这四个视角在数学上是完全等价的,但工程场景不同、矩阵结构不同,计算量天差地别。理解了这一点,你才算真正看穿了状态转移矩阵的本质。
1.3 贯穿全文的例题
为了让四种方法可以横向对比,我统一用下面这个二阶系统矩阵:
A = [ 0 1 -2 -3 ]后面所有方法求的都是同一个 e^{At}。这样你就能直观看到,四种方法殊途同归。A 的特征值也先算好放着:det(λI - A) = λ² + 3λ + 2 = (λ+1)(λ+2),特征值 λ₁ = -1,λ₂ = -2。这个结论后面每种方法都要用到。
2. 方法一:拉普拉斯反变换法
2.1 原理与步骤
拉普拉斯法可以说是国内教材里出现频率最高的一种。它的推导只有两步:先对状态方程做拉普拉斯变换,再把频域结果反变换回时域。
对 x'(t) = A·x(t) 两边取拉普拉斯变换,注意初始条件 x(0):
s·X(s) - x(0) = A·X(s)移项整理:
(sI - A)·X(s) = x(0) X(s) = (sI - A)^{-1}·x(0)而时域中 x(t) = e^{At}·x(0),所以必有:
e^{At} = L^{-1}[(sI - A)^{-1}]也就是说,只要算出 (sI - A)^{-1},再对矩阵每一个元素做拉普拉斯反变换,就得到了状态转移矩阵。具体操作步骤:
- 构造 sI - A;
- 求 (sI - A) 的逆矩阵,通常是“伴随矩阵除以行列式”;
- 对逆矩阵的每个元素做部分分式展开;
- 查拉普拉斯变换表,逐项反变换回时域;
- 用 Φ(0) = I 验算。
2.2 完整计算演示
第一步,构造 sI - A:
sI - A = [ s -1 2 s+3 ]第二步,求行列式:
det(sI - A) = s(s+3) - (-1)·2 = s² + 3s + 2 = (s+1)(s+2)第三步,求逆矩阵。二阶矩阵的伴随矩阵规则是“主对角线互换,副对角线取负”,直接套:
(sI - A)^{-1} = 1/[(s+1)(s+2)] · [ s+3 1 -2 s ]第四步,对四个元素分别做部分分式展开。
先看第一行第一列,(s+3)/[(s+1)(s+2)]:
(s+3)/[(s+1)(s+2)] = 2/(s+1) - 1/(s+2)反变换得到:2e^{-t} - e^{-2t}。
再看第一行第二列,1/[(s+1)(s+2)]:
1/[(s+1)(s+2)] = 1/(s+1) - 1/(s+2)反变换得到:e^{-t} - e^{-2t}。
第二行第一列,-2/[(s+1)(s+2)]:
-2/[(s+1)(s+2)] = -2/(s+1) + 2/(s+2)反变换得到:-2e^{-t} + 2e^{-2t}。
第二行第二列,s/[(s+1)(s+2)]:
s/[(s+1)(s+2)] = -1/(s+1) + 2/(s+2)反变换得到:-e^{-t} + 2e^{-2t}。
所以最终结果:
e^{At} = [ 2e^{-t} - e^{-2t} e^{-t} - e^{-2t} -2e^{-t} + 2e^{-2t} -e^{-t} + 2e^{-2t} ]验算一下:t = 0 时,第一行第一列为 2-1 = 1,第一行第二列为 1-1 = 0,第二行第一列为 -2+2 = 0,第二行第二列为 -1+2 = 1,正是单位阵。没问题。
2.3 方法点评与适用边界
拉普拉斯法的最大优点是“机械、不容易错思路”。只要你能正确求逆矩阵,剩下的就是高数里部分分式的活。但它有两个痛点:
一是求逆矩阵本身很繁琐,三阶以上手算伴随矩阵很容易出错,到四阶基本就不是人干的了。二是部分分式展开时,如果系统矩阵 A 的维数高或者特征值复杂,频域表达式的分母阶次很高,展开过程会非常痛苦。
所以我的个人判断:这个方法适合二阶、三阶的低阶系统,尤其适合考试里那种“特征值就是 -1、-2、-3”的整数特征值题目。但凡特征值是复数共轭或者重根,算起来虽然也能算,但工作量和出错率都会明显上升。
3. 方法二:凯莱-哈密顿定理法
3.1 原理:矩阵如何“降次”
凯莱-哈密顿定理的内容可以表述成一句话:任何一个 n 阶方阵 A,都满足它自己的特征方程。也就是说,如果 A 的特征多项式是:
p(λ) = λⁿ + aₙ₋₁λⁿ⁻¹ + ... + a₁λ + a₀那么代入矩阵 A 后:
p(A) = Aⁿ + aₙ₋₁Aⁿ⁻¹ + ... + a₁A + a₀I = 0这条性质的威力在于:它告诉我们 Aⁿ 可以由 I, A, ..., A^{n-1} 线性表示。于是 A^{n+1}、A^{n+2} 这些更高次幂,也可以不断降次,最终全部写成 I, A, ..., A^{n-1} 的线性组合。
矩阵指数 e^{At} 本身是 A 的无穷级数,既然每一项 A^k 都能降次成 I, A, ..., A^{n-1} 的线性组合,那么整个无穷级数求和的结果,也必然能写成:
e^{At} = α₀(t)·I + α₁(t)·A + ... + αₙ₋₁(t)·A^{n-1}这就把“求无穷级数”转化为“求 n 个关于 t 的函数 α₀(t), α₁(t), ..., αₙ₋₁(t)”。怎么求?利用特征值。
3.2 完整计算演示
对矩阵 A 的每一个特征值 λᵢ,前面那个矩阵多项式关系在标量上也成立:
e^{λᵢt} = α₀(t) + α₁(t)·λᵢ + α₂(t)·λᵢ² + ... + αₙ₋₁(t)·λᵢⁿ⁻¹本例 A 是 2×2 矩阵,特征值 λ₁ = -1,λ₂ = -2,所以设:
e^{At} = α₀(t)·I + α₁(t)·A代入两个特征值:
e^{-t} = α₀ - α₁ e^{-2t} = α₀ - 2α₁两式相减消去 α₀:
e^{-t} - e^{-2t} = α₁所以 α₁ = e^{-t} - e^{-2t},代回去得 α₀ = e^{-t} + α₁ = 2e^{-t} - e^{-2t}。
然后把 α₀、α₁ 代回矩阵多项式:
e^{At} = α₀·[1 0] + α₁·[0 1] [0 1] [-2 -3] = [ α₀ α₁ -2α₁ α₀ - 3α₁ ]代入 α₀、α₁:
e^{At} = [ 2e^{-t} - e^{-2t} e^{-t} - e^{-2t} -2e^{-t} + 2e^{-2t} -e^{-t} + 2e^{-2t} ]和拉普拉斯法的结果完全一致。
这里要特别提醒:当特征值有重根时,n 个特征值给不出 n 个独立的方程,必须对重根补充“导数方程”。比如若 λ₁ = λ₂ 是二重根,则除了代入 e^{λ₁t} = α₀ + α₁λ₁ 之外,还要对两边关于 λ 求导,得到:
t·e^{λ₁t} = α₁这样才能凑够方程数。这是凯莱-哈密顿法最容易翻车的地方,后面第 7 节我会展开讲。
3.3 方法点评与适用边界
凯莱-哈密顿法的优势非常明显:完全不涉及矩阵求逆,不需要求特征向量,只需要知道特征值,然后解一个线性方程组。对于二阶、三阶系统,这几乎是最快的路径,考研题尤其吃这一套。
它的问题在于:随着矩阵阶数升高,需要设的 α 系数数量线性增加,方程组的规模也在涨,而且重根时补充导数方程的规则容易记混。所以四阶以上,除非题目特征值设计得非常“友好”,否则手算也不是轻松事。
另外提醒一句:凯莱-哈密顿定理在理论上没有可对角化限制,任何方阵都能用。这一点比特征向量法适用范围更广。
4. 方法三:无穷级数法
4.1 原理与“为什么几乎没人手算到底”
无穷级数法不需要任何推导,矩阵指数定义本身就给出了算法:
e^{At} = I + At + (A²t²)/2! + (A³t³)/3! + ...把 A 代进去,一项一项加到“差不多”为止。问题是,这个级数一般是无穷项,实际计算必须截断,截断到第几项完全取决于你对精度的要求。高阶矩阵、大数值 t 或者特征值模很大的情况下,级数收敛可能很慢,需要算几十甚至上百项才能满足精度。
而且手算的时候还有个尴尬:矩阵乘法不是标量乘法,每一项算起来都费劲。所以这个方法在“手算考试”里基本是下下策,但它有不可替代的价值——它是其他所有方法的“总源头”,也是计算机数值实现的理论基础。
4.2 特殊矩阵的级数法巧用例
不过,无穷级数法遇到两类特殊矩阵时反而无比好用:幂零矩阵和对角矩阵。
幂零矩阵指的是某个正整数 k 使得 A^k = 0 的矩阵。比如:
A = [ 0 1 0 0 ]可以验证 A² = 0。这时级数从第二项开始全部消失:
e^{At} = I + At = [ 1 t 0 1 ]这种“上三角移位”结构在约当标准形里到处出现,所以约当块的状态转移矩阵本质上都是靠幂零性截断的。
对角矩阵更简单,如果 A = diag(λ₁, λ₂, ..., λₙ),那么:
e^{At} = diag(e^{λ₁t}, e^{λ₂t}, ..., e^{λₙt})这是所有方法里最直接的情况,也是相似变换法最终想达到的效果——把一般矩阵变成对角阵,然后各特征值分别取指数。
4.3 数值实现:MATLAB expm 干的是什么活
工程上真正算 e^{At},没人用手算级数,都是丢给软件。MATLAB 里的 expm 函数是业界标准实现,但它并不是傻乎乎地截断级数,而是用了“放缩与平方”策略(scaling and squaring)配合 Padé 逼近。
核心思想是:先找一个整数 s,把矩阵“缩小”成 A/2^s,让这个缩小后的矩阵的范数足够小,这样级数收敛极快,用低阶 Padé 逼近就能达到很高精度;然后把结果连续平方 s 次,恢复出 e^{A}:
e^{A} = (e^{A/2^s})^{2^s}这套流程每秒要处理大量矩阵运算,是手算根本无法想象的量级。所以我的建议是:搞懂级数法的定义和性质,但实际工程计算请放心交给 expm,别自己写级数求和。
5. 方法四:相似变换法(对角化与约当标准形)
5.1 可对角化情形
相似变换法的思路是:如果 A 可以分解成 A = PΛP^{-1},其中 Λ 是对角矩阵,那么矩阵指数的计算可以“穿过”相似变换:
e^{At} = e^{(PΛP^{-1})t} = P·e^{Λt}·P^{-1}而 e^{Λt} 就是对角元素逐一取指数的对角矩阵。所以整个流程变成:
- 求特征值和特征向量;
- 把特征向量按列拼成矩阵 P;
- 计算 P^{-1}(二阶矩阵用伴随矩阵法很快);
- 写出 e^{Λt};
- 做两次矩阵乘法 P·e^{Λt}·P^{-1}。
注意,上面的“指数穿过相似变换”成立,本质上是因为 (PΛP^{-1})^k = PΛ^kP^{-1},这个性质在每项级数里都能用,所以整个 e^{At} 也能用。
5.2 不可对角化:约当块怎么处理
现实里很多矩阵是不可对角化的,典型例子是特征值重根且几何重数小于代数重数。这时 PΛP^{-1} 里的 Λ 换成约当标准形 J,A = PJP^{-1},公式变成:
e^{At} = P·e^{Jt}·P^{-1}约当标准形是一堆约当块组成的块对角矩阵。每个约当块 Jᵢ = λᵢI + N,其中 N 是上方有一条 1 的移位矩阵,满足 N^k = 0(k 为约当块阶数)。利用幂零性:
e^{Jᵢt} = e^{λᵢt}·e^{Nt} = e^{λᵢt}·(I + Nt + N²t²/2! + ... + N^{k-1}t^{k-1}/(k-1)!)一个三阶约当块的结果非常漂亮:
e^{Jt} = e^{λt}·[ 1 t t²/2 0 1 t 0 0 1 ]这其实是第 4 节里幂零矩阵“级数截断”技巧的实战应用。
5.3 完整计算演示
回到我们的例题 A = [0 1; -2 -3],特征值 λ₁ = -1,λ₂ = -2 互异,所以可对角化。
求特征向量。对 λ₁ = -1,解 (A + I)v = 0:
(A + I) = [ 1 1 -2 -2 ]解得 v₁ = [1; -1](随便取一个非零解)。
对 λ₂ = -2,解 (A + 2I)v = 0:
(A + 2I) = [ 2 1 -2 -1 ]解得 v₂ = [1; -2]。
于是:
P = [ 1 1 -1 -2 ]P 的逆矩阵,用二阶矩阵公式“主对角线互换、副对角线取负,再除以行列式”。det(P) = 1·(-2) - 1·(-1) = -1,所以:
P^{-1} = [ -2 -1 1 1 ] · (-1) = [ 2 1 -1 -1 ]验证一下 P·P^{-1} 确实等于单位阵。
然后:
e^{Λt} = [ e^{-t} 0 0 e^{-2t} ]三连乘:
e^{At} = P·e^{Λt}·P^{-1} = [ 1 1 ] [ e^{-t} 0 ] [ 2 1 ] [ -1 -2 ] [ 0 e^{-2t} ] [ -1 -1 ]先算右边两个矩阵相乘,再左乘 P,最终结果和前面两种方法完全一致:
e^{At} = [ 2e^{-t} - e^{-2t} e^{-t} - e^{-2t} -2e^{-t} + 2e^{-2t} -e^{-t} + 2e^{-2t} ]这个方法做下来你会明显感觉到:相似变换法最大的开销在求特征向量、构造 P 和求 P^{-1}。对于二阶系统,这些操作还算轻松;对三阶以上,求特征向量和逆矩阵的工作量会直线上升。
5.4 方法点评与适用边界
相似变换法的优势是物理意义清晰——特征值直接对应系统模态,特征向量告诉我们每个模态在状态空间中的方向。如果你不仅要算 e^{At},还想分析系统的模态特性、做解耦控制,这个方法的信息量最足。
缺点是计算链条长:特征值、特征向量、P、P^{-1}、矩阵乘,哪一步错都会导致结果不对。而且当矩阵不可对角化时,还要引入广义特征向量和约当标准形,复杂度进一步增加。
6. 四种方法横向对比与选型建议
6.1 一张表看懂四种方法
| 方法 | 核心计算 | 优点 | 缺点 | 手算推荐度 |
|---|---|---|---|---|
| 拉普拉斯反变换法 | 求 (sI-A)^{-1}、部分分式 | 思路机械、出错后好检查 | 高阶矩阵求逆太烦 | 二阶三阶推荐 |
| 凯莱-哈密顿法 | 求特征值、解线性方程组 | 免求逆、免特征向量、最快 | 重根需补充导数方程 | 强烈推荐 |
| 无穷级数法 | 矩阵逐项相乘求和 | 原理最简单、适合特殊矩阵 | 收敛慢、手算不现实 | 基本不用 |
| 相似变换法 | 特征分解、矩阵乘 | 物理意义清晰、可解耦 | 计算链条长、重根需约当形 | 分析场景推荐 |
6.2 实战选型:三种场景下我怎么做
如果是考研或课程考试,我的固定套路是:先用两秒钟判断特征值——如果特征值是互异实数,直接上凯莱-哈密顿法,因为只需要解一个 n 元一次方程组,速度最快;如果特征值带复数,拉普拉斯法可能更稳,因为复数特征值会把特征向量的计算变成复数运算,反而更容易出错。
如果是做控制系统分析,比如我要看系统的模态、设计状态反馈,我会选相似变换法。因为变换矩阵 P 本身就是模态信息,一次计算能同时拿到特征值、特征向量和状态转移矩阵,性价比很高。
如果是写代码做仿真,直接调 expm,但我会在脑海里用凯莱-哈密顿法估算一下期望的解析解,用于验证数值结果是否合理。另外,如果你在用 Python,scipy.linalg.expm 的底层算法和 MATLAB 类似,同样可以直接用。
7. 我踩过的坑:状态转移矩阵求法高频错误与排查
7.1 错误一:求出结果从不验算
不用怀疑,最贵的错误永远是最简单的。状态转移矩阵有一个天生自带的验算工具——初始条件:
Φ(0) = e^{A·0} = I不管用什么方法求出 e^{At},只要把 t = 0 代进去不是单位阵,结果必然错了。这个检查只需要十秒钟,却能在考场上救回一整道大题。我见过太多同学花了二十分钟算出个漂亮结果,t = 0 一代是乱七八糟的矩阵,还浑然不知继续往下写。建议形成肌肉记忆:算出 e^{At} 的第一件事,代 t = 0 验算。
7.2 错误二:重根直接把凯莱-哈密顿法套错
凯莱-哈密顿法在重根这里翻车率极高。比如 A 的特征值是 λ₁ = -1,λ₂ = -1 二重根,很多同学直接列两个方程:
e^{-t} = α₀ + α₁·(-1) e^{-t} = α₀ + α₁·(-1)这俩方程一模一样,根本解不出 α₀ 和 α₁。正确做法是补充导数方程,对特征方程两边关于 λ 求导。具体地说,二重根除了原始方程,还要加:
d/dλ [e^{λt}] = d/dλ [α₀ + α₁λ]也就是:
t·e^{λt} = α₁如果再遇到三重根,还要继续对二阶导数成立。这个规则很像高数里求重根时的“重根对应多个条件”,理解之后就不容易忘。
7.3 错误三:级数法截断与 e^{A+B} = e^A e^B 的滥用
两个最常见的级数法误区,第一个是截断阶数拍脑袋定。级数收敛速度取决于 ||A·t|| 的大小,换成实际感受就是:A 的范数大、t 大,就需要更多项。如果你一定要手算级数,至少先估算一下 ||A·t||,不要想当然取前两项就完事。
第二个更隐蔽的坑是指数运算律。标量里 e^{a+b} = e^a · e^b,但矩阵里这个等式只有在 A 与 B 可交换(即 AB = BA)时才成立。把 e^{(A+B)t} 拆成 e^{At} · e^{Bt},在 A、B 不对易时是错的。这个性质在推导很多公式时都会被悄悄用到,使用前务必确认交换性。
7.4 错误四:特征值和特征向量顺序搞混
相似变换法里,P 的列是特征向量,Λ 对角线是特征值,两者必须按同一顺序排列。如果你把 λ₁ 放在 Λ(1,1) 位置,那 P 的第一列就必须是 λ₁ 对应的特征向量。顺序一旦错乱,算出来的 e^{At} 奇奇怪怪,而且往往 t = 0 时还恰好是单位阵——因为它本质上还是同一个矩阵的另一种相似表示,只是中间过程乱了。这种错误最难发现。
我的习惯是写下一个顺序检查口诀:P 的第 k 列对应 Λ 的第 k 个对角元,P^{-1} 的第 k 行也对应同一个特征值。列完 P 之后先算一次 P^{-1}AP 或 P^{-1}·P,确认能还原出原来的 A,再继续往下。
7.5 一个小技巧:二阶矩阵快速心算路径
最后分享一个我自己的实战小技巧。遇到二阶矩阵想快速求 e^{At},先看特征值是否互异,若是,直接用凯莱-哈密顿法,设 e^{At} = α₀I + α₁A,解二元一次方程组。整个流程我一般能在两分钟内完成,比拉普拉斯反变换法省掉大量部分分式展开。
如果特征值是共轭复数 λ = σ ± jω,同样用凯莱-哈密顿法,最终结果里会出现 e^{σt}(cos ωt) 和 e^{σt}(sin ωt) 的组合。这里不用害怕复数运算,把 α₀、α₁ 作为待定系数代入两个复数方程,解出来的 α 依然是实数,因为虚部会彼此抵消。
再补充一个验算技巧:除了 Φ(0) = I,还可以利用半群性质 Φ(t₁)·Φ(t₂) = Φ(t₁+t₂) 做抽查,比如算一下 Φ(0.1)·Φ(0.2) 是否等于 Φ(0.3)。这个性质在数值仿真时检验 expm 结果是否可靠也很好用。
做了这么多年控制相关的分析和仿真,我的体会是:状态转移矩阵的四种求法,真正到工程里常用的其实就两个——手算解析用凯莱-哈密顿法,数值计算交给 expm。但拉普拉斯法和相似变换法绝对不能不会,因为它们一个是频域分析的基础语言,一个是模态分析、模型降阶、解耦控制的底层工具。把这四种方法用同一个例子走一遍,你会发现它们不是四个孤立的知识点,而是一张网上的四个节点,最终都能通到同一个答案。这个“殊途同归”的感觉,才是你真正掌握状态转移矩阵的信号。