平衡截断(Balanced Truncation)—— MTALAB 和 Python 实现_平衡截断法
- 平衡截断
-
- balreal 算法原理
- 平衡截断过程
-
- 求解 HSV 为什么不使用定义而是使用 Cholesy 和SVD 分解?
- MATLAB 实践
- Python 实现
- 先验知识:可控性 Gramian W c W_c Wc、可观性 Gramian W o W_o Wo 以及 Hankel 奇异值(HSV) σ i \\sigma_i σi
-
- 可控性 Gramian W c W_c Wc
- 可观性 Gramian W o W_o Wo
- Hankel 奇异值 σ i \\sigma_i σi
平衡截断
平衡截断(Balanced Truncation)是一种经典的 模型降阶方法,它通过衡量 各状态对系统输入–输出响应的贡献(Hankel 奇异值)来丢弃“能量”较小的状态,从而得到低阶近似模型。平衡截断既能 保证降阶后模型与原模型在频域响应上的接近性,也给出了严格的误差界。
在做平衡截断(或其他降阶)之后,不会直接再用原来高维的 状态向量 x x x——而是引入一个新的、维度已降到 r r r 的降阶状态向量 x r x_{r} xr。
balreal 算法原理
balreal
函数 是 MATLAB Control Toolbox 中用于 平衡截断(balanced truncation)模型约简的核心函数。
[sysb, g, T, Ti] = balreal(sys, opts);
其中,sysb
是平衡化后的系统(ss
对象);g
是 Hankel 奇异值向量,对应 Gramian 对角线;T
、Ti
:相似变换矩阵及其逆,用于在原始和平衡化坐标间转换。
算法起源与扩展
- 历史:最早由 Moore 提出“平衡化(balancing)”概念,后由 Glover 完善,成为经典的 SVD 基模型约简方法。
- 数学基础:本质上是 对可控性 Gramian 和可观性 Gramian 的同时对角化问题,等价于 对两正定矩阵进行相似对角化。
其基本思路是:
- 将原始系统通过相似变换(similarity transformation)转化到可控性和可观性 Gramian 相等且对角化的坐标下,所得对角线即为 Hankel 奇异值(Hankel singular values)。
- 奇异值较小的状态对系统输入-输出行为贡献较小,可 予以截断以简化模型,同时可利用理论上严格的误差界评估截断误差。
截断阶段可选择多种策略,包括简单删除(Truncate)和匹配直流增益(MatchDC),并提供基于奇异值的 ∞ ∞ ∞-范数误差上界估计。
- Truncate:直接删除最后 n − r n-r n−r 个状态,频域近似效果较好,但不保证直流增益匹配。
- MatchDC(默认):在截断同时重新计算系统矩阵,保证截断系统与原系统的直流增益一致。
平衡截断在 H ∞ \\mathcal{H}_\\infty H∞ 范数下满足经典误差界:
∥ G − G r ∥ ∞ ≤ 2 ∑ i = r + 1 n σ i \\|G - G_r\\|_\\infty \\;\\le\\; 2\\,\\sum_{i=r+1}^{n}\\sigma_i ∥G−Gr∥∞≤2i=r+1∑nσi
其中 σ i \\sigma_i σi 为被截断的 Hankel 奇异值,提供了保留前 r r r 个状态时最坏情况的频域误差估计。
对于含有 不稳定极点 的系统,balreal
(或 balred
)会首先调用 stabsep
对系统进行“稳定/不稳定”子系统分离:
G ( s ) = G s ( s ) + G u ( s ) , G(s) = G_s(s) \\;+\\; G_u(s), G(s)=Gs(s)+Gu(s),
其中 G s G_s Gs 是 所有极点实部<0 的稳定子系统, G u G_u Gu 是不稳定子系统。
- 针对稳定部分 G sG_s Gs 求解 Lyapunov 方程(李雅普诺夫方程)得到 Gramian,再 通过 Cholesky 分解及奇异值分解(SVD)构造平衡变换,最后输出平衡化系统及相应的 Hankel 奇异值和变换矩阵。
- 不稳定部分 G uG_u Gu 则原样保留,并在输出中 将对应奇异值设置为无穷大
Inf
,以 提示截断时勿删除不稳定状态。
最后将两部分按并联结构拼回。
为什么要先分离 稳定/不稳定 子系统?
- 稳定性保证:Gramian 只有在系统稳定时才存在有限、正定的解;对不稳定部分直接调用 Lyapunov 会发散或得到非正定结果。
- 误差界仅对稳定部分:平衡截断的 H ∞\\mathcal H_\\infty H∞ 误差界 ∥ G − G r ∥ ∞ ≤ 2 ∑ i > r σ i\\|G - G_r\\|_\\infty \\le 2\\sum_{i>r} \\sigma_i ∥G−Gr∥∞≤2∑i>rσi只对稳定子系统有意义。
- 保留不稳定行为:不稳定极点通常对系统行为至关重要,不能被截断。
平衡截断过程
下面用坐标变换
x ˉ = T x \\bar x = T\\,x xˉ=Tx
(即 T T T 将原始状态 x x x 映到“平衡坐标” x ˉ \\bar x xˉ)来重新推导平衡截断的全过程。
对于 原系统,考虑连续时间 LTI 系统
x ˙ = A x + B u , y = C x + D u \\dot x = A\\,x + B\\,u, \\\\[5pt] y = C\\,x + D\\,u x˙=Ax+Bu,y=Cx+Du
其中 x∈ R n x\\in\\mathbb R^n x∈Rn、 u∈ R m u\\in\\mathbb R^m u∈Rm、 y∈ R p y\\in\\mathbb R^p y∈Rp。
-
求解 Gramian 并构造变换矩阵
- 可控性 Gramian
W c = ∫ 0 ∞ e A τ B B T eA T τ d τ , W_c = \\int_0^\\infty e^{A\\tau}B\\,B^T e^{A^T\\tau}\\,d\\tau, Wc=∫0∞eAτBBTeATτdτ,
解 Lyapunov 方程
A W c + W c A T + B B T = 0. A\\,W_c + W_c\\,A^T + B\\,B^T = 0. AWc+WcAT+BBT=0. - 可观性 Gramian
W o = ∫ 0 ∞ eA T τ C T C e A τ d τ , W_o = \\int_0^\\infty e^{A^T\\tau}C^T\\,C\\,e^{A\\tau}\\,d\\tau, Wo=∫0∞eATτCTCeAτdτ,
解 Lyapunov 方程
A T W o + W o A + C T C = 0. A^T\\,W_o + W_o\\,A + C^T\\,C = 0. ATWo+WoA+CTC=0.
- 可控性 Gramian
-
平衡变换的构造
-
对 W c W_c Wc 和 W o W_o Wo 做 Cholesky 分解:
W c = R R T , W o = S S T . W_c = R\\,R^T,\\quad W_o = S\\,S^T. Wc=RRT,Wo=SST. -
对 R T S R^T S RTS 做 SVD:
R T S = U Σ V T , Σ = d i a g ( σ 1 , … , σ n ) , R^T S = U\\,\\Sigma\\,V^T,\\\\[5pt] \\Sigma = \\mathrm{diag}(\\sigma_1,\\dots,\\sigma_n), RTS=UΣVT,Σ=diag(σ1,…,σn),
{ σ i } \\{\\sigma_i\\} {σi} 即 Hankel 奇异值,按降序排列。 -
于是取
T = Σ − 1 2 U T S T , T − 1 = R V Σ − 1 2 , T = \\Sigma^{-\\tfrac12} U^T S^T,\\\\ \\qquad\\\\ T^{-1} = R\\,V\\,\\Sigma^{-\\tfrac12}, T=Σ−21UTST,T−1=RVΣ−21,能使得在新坐标下, W ~ c = T W c T T = Σ W ~ o = T − T W o T − 1 = Σ \\tilde W_c = T\\,W_c\\,T^T = \\Sigma \\\\[5pt] \\tilde W_o = T^{-T}W_o\\,T^{-1} = \\Sigma W~c=TWcTT=ΣW~o=T−TWoT−1=Σ
-
-
坐标变换
定义
x ˉ = T x ⟹ x = T − 1 x ˉ . \\bar x = T\\,x \\quad\\Longrightarrow\\quad x = T^{-1}\\,\\bar x. xˉ=Tx⟹x=T−1xˉ.
将原系统变换得
x ˉ ˙ = T x ˙ = T ( A x + B u ) = ( T A T − 1 ) x ˉ + ( T B ) u , y = C x + D u = ( C T − 1 ) x ˉ + D u . \\dot{\\bar x} = T\\,\\dot x = T\\bigl(A\\,x + B\\,u\\bigr) = \\bigl(T\\,A\\,T^{-1}\\bigr)\\,\\bar x \\;+\\; \\bigl(T\\,B\\bigr)\\,u, \\\\[5pt] y = C\\,x + D\\,u = \\bigl(C\\,T^{-1}\\bigr)\\,\\bar x + D\\,u. xˉ˙=Tx˙=T(Ax+Bu)=(TAT−1)xˉ+(TB)u,y=Cx+Du=(CT−1)xˉ+Du.
设
A b = T A T − 1 , B b = T B , C b = C T − 1 , A_b = T\\,A\\,T^{-1},\\quad B_b = T\\,B,\\quad C_b = C\\,T^{-1}, Ab=TAT−1,Bb=TB,Cb=CT−1,
则平衡化系统为
x ˉ ˙ = A b x ˉ + B b u , y = C b x ˉ + D u . \\dot{\\bar x} = A_b\\,\\bar x + B_b\\,u,\\\\[5pt] y = C_b\\,\\bar x + D\\,u. xˉ˙=Abxˉ+Bbu,y=Cbxˉ+Du.此时可控性和可观性 Gramian 均为 Σ \\Sigma Σ,对角元素 σ i\\sigma_i σi 刚好是各状态的能量度量。
-
截断降阶
根据 Σ = d i a g ( σ 1 , … , σ n ) \\Sigma=\\mathrm{diag}(\\sigma_1,\\dots,\\sigma_n) Σ=diag(σ1,…,σn),保留能量大的前 r r r 个分量,舍弃后 n − r n-r n−r 个分量。将
x ˉ = [ x ˉ1 x ˉ2 ] ,x ˉ 1 ∈ R r , x ˉ 2 ∈ R n − r A b = [ A 11 A 12 A 21 A 22 ] , B b = [ B 1 B 2 ] , C b = [ C 1 C 2 ] , \\bar x = \\begin{bmatrix}\\bar x_1 \\\\[4pt]\\bar x_2\\end{bmatrix},\\quad \\bar x_1\\in\\mathbb R^r,\\; \\bar x_2\\in\\mathbb R^{n-r} \\\\[5pt] A_b = \\begin{bmatrix}A_{11}&A_{12}\\\\[3pt]A_{21}&A_{22}\\end{bmatrix},\\;\\\\[5pt] B_b = \\begin{bmatrix}B_1\\\\[3pt]B_2\\end{bmatrix},\\;\\\\[5pt] C_b = \\begin{bmatrix}C_1 & C_2\\end{bmatrix}, xˉ=[xˉ1xˉ2],xˉ1∈Rr,xˉ2∈Rn−rAb=[A11A21A12A22],Bb=[B1B2],Cb=[C1C2],
丢弃 x ˉ 2 \\bar x_2 xˉ2 及其关联块,令 x r ≡ x ˉ 1 x_r\\equiv\\bar x_1 xr≡xˉ1,得到约简模型:
x ˙ r = A 11 x r + B 1 u , y = C 1 x r + D u . \\dot x_r = A_{11}\\,x_r + B_1\\,u,\\\\ \\qquad\\\\ y = C_1\\,x_r + D\\,u. x˙r=A11xr+B1u,y=C1xr+Du.
这样,整个过程严格按照“ x ˉ =T x \\bar x=T\\,x xˉ=Tx”的坐标变换来推导,变换后直接在平衡坐标下截断,就得到了降阶模型。
当对原系统做平衡截断降阶后,原来的初始状态 x ( 0 ) x(0) x(0) 以及 对应的初始输出 y ( 0 ) = C x ( 0 ) y(0)=C\\,x(0) y(0)=Cx(0) 都必须 映射到降阶系统的坐标空间,否则就无法直接在低维系统中使用它们来启动仿真或分析。
- 降阶模型的初始状态:
-
给定原始系统的初始状态 x ( 0 ) x(0) x(0),降阶模型的初始状态应取
x r ( 0 ) = x ˉ 1 ( 0 ) = [ T x ( 0 ) ] 1 : r , x_r(0) \\;=\\;\\bar x_1(0) \\;=\\;\\Bigl[T\\,x(0)\\Bigr]_{1:r}, xr(0)=xˉ1(0)=[Tx(0)]1:r,即先用 T T T 映射到平衡坐标,再截取前 r r r 分量。
-
这样,降阶系统从正确的低维初始条件开始演化,才能近似再现原系统的初始响应。
-
- 原系统的初始输出:
- 原始系统在 t = 0 t=0 t=0 的输出是 y ( 0 ) = C x ( 0 ) + D u ( 0 ) y(0) = C\\,x(0) + D\\,u(0) y(0)=Cx(0)+Du(0),若已知 D = 0 D=0 D=0,且若假设初始输入 u ( 0 ) = 0 u(0)=0 u(0)=0,则初始输出简化为 y ( 0 ) = C x ( 0 ) y(0) = C\\,x(0) y(0)=Cx(0);
- 降阶系统的输出方程 截断后,用 ( A r , B r , C r ) (A_r,B_r,C_r) (Ar,Br,Cr) 表示低维模型,则
y ( t ) ≈ C r x r ( t ) + D u ( t ) . y(t) \\approx C_r\\,x_r(t) + D\\,u(t). y(t)≈Crxr(t)+Du(t). - 将 降阶初始状态 按上面方式设置为 x r ( 0 ) = [ T x ( 0 ) ] 1 : r x_r(0)=\\bigl[T\\,x(0)\\bigr]_{1:r} xr(0)=[Tx(0)]1:r,则
C r x r ( 0 ) = C 1 x ˉ 1 ( 0 ) = C 1 [ T x ( 0 ) ] 1 : r ≈ C x ( 0 ) , C_r\\,x_r(0) = C_1\\,\\bar x_1(0) = C_1\\,\\bigl[T\\,x(0)\\bigr]_{1:r} \\approx C\\,x(0), Crxr(0)=C1xˉ1(0)=C1[Tx(0)]1:r≈Cx(0),
其中 C 1 C_1 C1 是对 C T C\\,T CT 的前 r r r 列截取 。 - 这样,降阶系统的初始输出就能尽量贴合原系统。
这样就解决了“维度不匹配”的问题,确保降阶模型能够从正确的低维初始条件开始,重现原系统的初始响应。
求解 HSV 为什么不使用定义而是使用 Cholesy 和SVD 分解?
在数值实现中,很少把 Hankel 奇异值(HSV)直接定义为可控 Gramian W c W_c Wc 与可观 Gramian W o W_o Wo 乘积的特征值平方根来计算,而是先做 Cholesky 分解再做 SVD,其主要原因有以下几点:
-
避免显式构造乘积矩阵,降低计算成本与内存开销
-
如果直接计算 W c W o W_cW_o WcWo,首先要把两个 n × n n\\times n n×n 的 Gramian 显式地存储并相乘,生成一个新的 n × n n\\times n n×n 矩阵,所需的存储量和乘法运算均为 O ( n 3 ) O(n^3) O(n3) 量级,且中间结果通常比原来更“密集”甚至更难存储。
-
而通过 Cholesky 分解:
W c = R R T , W o = S S T , W_c = R\\,R^T,\\quad W_o = S\\,S^T, Wc=RRT,Wo=SST,
只需分别存储和操作 R R R 与 S S S(同样是三角矩阵),然后对 S T R S^T R STR 做一次 SVD,就能得到奇异值 Σ \\Sigma Σ,即 HSV,无需生成 W c W o W_cW_o WcWo 本身,从而节省了额外的存储和矩阵乘法开销。
-
-
提高数值稳定性
- Gramian 通常是病态的:它的特征值会很快衰减(尤其是在高阶系统中),导致 W c W_c Wc 和 W o W_o Wo 的条件数都非常大。若再相乘得到 W c W o W_cW_o WcWo,其条件数大约是原来条件数的平方,数值误差成倍放大,可能导致特征值计算崩溃。
- 相反,Cholesky 分解对正定矩阵是数值稳定且无需列主元(pivoting)的操作,而对 S T R S^T R STR 做 SVD(而非对不对称的 W c W o W_cW_o WcWo 做特征分解)可以直接获取奇异值,且 SVD 本身对误差更不敏感,能够在高病态情况下仍然给出可靠的奇异值排序和数值结果。
-
天然支持低秩/截断优化
- 在大规模系统中,Gramian 往往是低秩或数值低秩的。Cholesky 分解(或其它“平方根”算法)可以直接求出低秩因子 R , S R,S R,S,保留有效维度 r ≪ n r\\ll n r≪n,随后只对 S T R ∈ R r × r S^T R\\in\\mathbb R^{r\\times r} STR∈Rr×r 做 SVD,大幅降低运算量。
- 这在“平方根算法”(square-root method)中被广泛采纳,也是 MATLAB
balreal
在大规模场景中常用的实现策略 。
总结:
- 定义法(直接特征值分解 W cW o W_cW_o WcWo)在实现上既费内存,又数值极不稳定;
- Cholesky+SVD 法(先分解再奇异值分解)既避免了构造病态乘积矩阵,也利用了数值线性代数中对称正定矩阵和奇异值分解的稳定性优势,因而成为计算 HSV 的标准做法。
MATLAB 实践
MATLAB 平衡截断 步骤:MATLAB -> 模型降阶器 -> 导入模型(如工作区中的状态空间模型 sys_siso = ss(A, B_siso, C_siso, D_siso)
变量)-> 选中模型后平衡截断 -> 输入目标阶数。
Python 实现
Python-Control 0.9.4 文档总览 — 无
balreal
定义
不过有现成的轮子 pyMor,使用 pip install pymor
安装。
注意,之前由于安装了一个
pip install slycot
,导致一运行就 报错AttributeError: module \'slycot\' has no attribute \'sb03md57\'
,通常是因为 Python 中安装的 Slycot 包缺少底层 Fortran/C 扩展,导致无法导入 SLICOT 的新接口 sb03md57。
- 解决方法:卸载掉即可,
pip uninstall slycot
和pip uninstall pymor
,然后再重新安装pip install pymor
。- 可能这就是 Python 的好处带来的弊端吧,开源的同时带来了很多不规范。
注意, V,W∈ R n × r V,W\\in\\mathbb R^{n\\times r} V,W∈Rn×r 即为降维映射和重构映射基底,
- 把原 n n n 阶 x x x 映射到降阶空间 x rx_r xr: x r = W T x , x r ∈ R r \\displaystyle x_{r} = W^T\\,x, \\quad x_r \\in\\mathbb R^r xr=WTx,xr∈Rr
- 重构到原空间: x ^ = V x r , x ^ ∈ R n \\displaystyle \\hat x = V\\,x_{r}, \\quad \\hat x \\in\\mathbb R^n x^=Vxr,x^∈Rn,计算原空间输出 y ^ = C x ^ + D u \\displaystyle \\hat y = C\\,\\hat x + D\\,u y^=Cx^+Du。
注意:不同版本的 pyMOR 中,基底可能命名不同,看源码。
- 在 pyMOR 中,
bt.V
和bt.W
并不是以一个 NumPy “矩阵”直接存储为形状 ( n , r ) (n,r) (n,r) 的二维数组,而是以 长度为 r r r、每个向量长度为 n n n 的 VectorArray 存储。- 当调用
V = bt.V.to_numpy()
,实际上是在把一个长度为 r r r 的 VectorArray(其中每个“向量”都是维度 n n n)展平成一个常规的 NumPy 二维数组。默认行为是将 “向量数组” 的每一行对应一个 VectorArray 中的向量,因此得到的形状就是 ( r , n ) (r, n) (r,n)。
- 在平衡截断的理论推导里,习惯把基矩阵写成 V , W ∈ R n × r V,W\\in\\mathbb R^{n\\times r} V,W∈Rn×r,所以再进行转置得到常规的 shape。
import scipy.sparse as spsfrom pymor.models.iosys import LTIModelfrom pymor.reductors.bt import BTReductorA, B, C, D, x0, y0 = ... # 自定义syso = LTIModel.from_matrices(A, B, C, D)bt = BTReductor(fom)sysb = bt.reduce(20)A_r = sysb.A.matrix # Reduced A matrix, shape (r, r)B_r = sysb.B.matrix # Reduced B matrix, shape (r, m)C_r = sysb.C.matrix # Reduced C matrix, shape (p, r)D_r = sysb.D.matrix # Reduced D matrix, shape (p, m) V = bt.V.to_numpy() # (r, n)W = bt.W.to_numpy() # (r, n)V, W = V.T, W.T # (n, r)# Project initial statex0_r = W.T @ x0# One‐step simulate in reduced modelx1_r = A_r @ x0_r + B_r @ u0y1_r = C_r @ x1_r + D_r @ u0# Reconstruct back to full orderx1_full = V @ x1_ry1_full = C @ x1_full + D @ u0plot_bode_and_error(syso, sysb)
def plot_bode_and_error(fom, rom, w=None, save_prefix=\'\'): # 1) Compute H-infinity error bounds for all orders bt = BTReductor(fom) bounds = bt.error_bounds() # Returns list of error bounds for orders 1,2,… :contentReference[oaicite:0]{index=0} # Select the bound corresponding to the reduced order r = rom.order err_bound = bounds[r-1] if r <= len(bounds) else None # 2) Prepare default frequency range if not specified if w is None: w = (1e-5, 1e6) # 3) Plot Bode magnitude & phase for full and reduced models fig, axs = plt.subplots(2, 1, figsize=(8, 6), sharex=True) fig.suptitle(\'Bode Plot Comparison\', fontsize=14) # Use pyMOR\'s built-in transfer_function bode_plot methods :contentReference[oaicite:1]{index=1} fom.transfer_function.bode_plot(w, ax=axs, label=\'Full-order\') rom.transfer_function.bode_plot(w, ax=axs, linestyle=\'--\', label=\'Reduced-order\') # Finalize axes for ax in axs: ax.grid(True) ax.legend(loc=\'best\') axs[1].set_xlabel(\'Frequency (rad/s)\') fig.tight_layout(rect=[0, 0, 1, 0.95]) fig.savefig(f\'{save_prefix}bode_comparison.png\', dpi=300) plt.close(fig) # 4) Report the H-infinity error bound if err_bound is not None: print(f\"Estimated H∞ error bound for reduced order {r}: {err_bound:.2e}\") # :contentReference[oaicite:2]{index=2} else: print(\"No error bound available for order\", r) return err_bound
先验知识:可控性 Gramian W c W_c Wc、可观性 Gramian W o W_o Wo 以及 Hankel 奇异值(HSV) σ i \\sigma_i σi
- 可控性 Gramian W c W_c Wc 衡量 系统从零初始状态经输入到达某一状态所需的能量,反映了状态可控程度;
- 可观性 Gramian W o W_o Wo 衡量 系统从某一状态到零输出所需的能量,反映了状态可观测程度。
- Hankel 奇异值 σ i \\sigma_i σi 定义为 可控性 Gramian 与可观性 Gramian 乘积 W c W o\\,W_cW_o WcWo 的特征值的平方根,即 σ i = λ i W c W o , i = 1 , 2 , … , n \\sigma_i = \\sqrt{\\lambda_i W_cW_o}, i=1,2,\\dots ,n σi=λiWcWo,i=1,2,…,n,用以 量化每个状态在输入–输出能量传递中的贡献大小。
可控性 Gramian W c W_c Wc
在 MATLAB Control Toolbox 中,可使用命令
Wc = gram(sys,\'c\');
分别计算可控性 Gramian 或其 Cholesky 因子 (gram - MathWorks)。
对于 连续时间 LTI 系统,
x ˙ ( t ) = A x ( t ) + B u ( t ) , \\dot x(t)=Ax(t)+Bu(t), x˙(t)=Ax(t)+Bu(t),
其无限时域可控性 Gramian 定义为
W c = ∫ 0 ∞e A τ B B T e A T τ d τ , W_c \\;=\\;\\int_{0}^{\\infty}e^{A\\tau}\\,B\\,B^T\\,e^{A^T\\tau}\\,d\\tau, Wc=∫0∞eAτBBTeATτdτ,
并且它是 Lyapunov 方程
A W c + W c A T + B B T = 0 A\\,W_c + W_c\\,A^T + B\\,B^T = 0 AWc+WcAT+BBT=0
的唯一正定解 (Controllability Gramian)。
对于 离散时间 LTI 系统,
x [ k + 1 ] = A x [ k ] + B u [ k ] , x[k+1]=A\\,x[k]+B\\,u[k], x[k+1]=Ax[k]+Bu[k],
可控性 Gramian 定义为
W c , d = ∑ m = 0 ∞A m B B T ( A T) m , W_{c,d} \\;=\\;\\sum_{m=0}^{\\infty}A^{m}\\,B\\,B^T\\,(A^{T})^{m}, Wc,d=m=0∑∞AmBBT(AT)m,
它满足离散 Lyapunov 方程
W c , d− A W c , d A T = B B T , W_{c,d} - A\\,W_{c,d}\\,A^T = B\\,B^T, Wc,d−AWc,dAT=BBT,
且当 A A A 稳定(谱半径 <1)时, W c , d W_{c,d} Wc,d 为正定矩阵。
可观性 Gramian W o W_o Wo
对于 同一连续系统附带输出方程,
y ( t ) = C x ( t ) + D u ( t ) , y(t)=C\\,x(t)+D\\,u(t), y(t)=Cx(t)+Du(t),
无限时域可观性 Gramian 定义为
W o = ∫ 0 ∞e A T τ C T C e A τ d τ , W_o \\;=\\;\\int_{0}^{\\infty}e^{A^T\\tau}\\,C^T\\,C\\,e^{A\\tau}\\,d\\tau, Wo=∫0∞eATτCTCeAτdτ,
它是 Lyapunov 方程
A T W o + W o A + C T C = 0 A^T\\,W_o + W_o\\,A + C^T\\,C = 0 ATWo+WoA+CTC=0
的唯一正定解 (Observability Gramian)。
对于 离散系统,
y [ k ] = C x [ k ] + D u [ k ] , y[k]=C\\,x[k]+D\\,u[k], y[k]=Cx[k]+Du[k],
可观性 Gramian 定义为
W o , d = ∑ m = 0 ∞ ( A T) m C T C A m , W_{o,d} \\;=\\;\\sum_{m=0}^{\\infty}(A^T)^{m}\\,C^T\\,C\\,A^{m}, Wo,d=m=0∑∞(AT)mCTCAm,
满足离散 Lyapunov 方程
W o , d− A T W o , d A = C T C , W_{o,d} - A^T\\,W_{o,d}\\,A = C^T\\,C, Wo,d−ATWo,dA=CTC,
当 A A A 稳定时, W o , d W_{o,d} Wo,d 为正定。
Hankel 奇异值 σ i \\sigma_i σi
Hankel 奇异值 { σ i } i = 1 n \\{\\sigma_i\\}_{i=1}^n {σi}i=1n 定义为矩阵 W c W o W_cW_o WcWo 的特征值 { λ i } \\{\\lambda_i\\} {λi} 的平方根:
σ i = λ i ( W c W o ), i = 1 , … , n . \\sigma_i \\;=\\;\\sqrt{\\lambda_i\\!\\bigl(W_c\\,W_o\\bigr)},\\quad i=1,\\dots,n. σi=λi(WcWo),i=1,…,n.
它们可视为 系统在输入–输出能量传递路径上的“能量谱”,按降序排列时,较大的 σ i \\sigma_i σi 对模型行为贡献更大。
在 MATLAB 中,通过平衡变换函数 balreal
可直接得到 W c W_c Wc 与 W o W_o Wo 对角化后的奇异值序列,即 HSV 向量。