> 技术文档 > 平衡截断(Balanced Truncation)—— MTALAB 和 Python 实现_平衡截断法

平衡截断(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 对角线;TTi:相似变换矩阵及其逆,用于在原始和平衡化坐标间转换。

算法起源与扩展

  • 历史:最早由 Moore 提出“平衡化(balancing)”概念,后由 Glover 完善,成为经典的 SVD 基模型约简方法。
  • 数学基础:本质上是 对可控性 Gramian 和可观性 Gramian 的同时对角化问题,等价于 对两正定矩阵进行相似对角化

其基本思路是:

  • 将原始系统通过相似变换(similarity transformation)转化到可控性和可观性 Gramian 相等且对角化的坐标下,所得对角线即为 Hankel 奇异值(Hankel singular values)
  • 奇异值较小的状态对系统输入-输出行为贡献较小,可 予以截断以简化模型,同时可利用理论上严格的误差界评估截断误差。

    截断阶段可选择多种策略,包括简单删除(Truncate)和匹配直流增益(MatchDC),并提供基于奇异值的 ∞ ∞ -范数误差上界估计。

    • Truncate:直接删除最后 n − r n-r nr 个状态,频域近似效果较好,但不保证直流增益匹配。
    • 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 GGr2i=r+1nσ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,以 提示截断时勿删除不稳定状态

最后将两部分按并联结构拼回。

为什么要先分离 稳定/不稳定 子系统?

  1. 稳定性保证:Gramian 只有在系统稳定时才存在有限、正定的解;对不稳定部分直接调用 Lyapunov 会发散或得到非正定结果。
  2. 误差界仅对稳定部分:平衡截断的 H ∞\\mathcal H_\\infty H 误差界 ∥ G − G r ∥ ∞ ≤ 2 ∑ i > r σ i\\|G - G_r\\|_\\infty \\le 2\\sum_{i>r} \\sigma_i GGr2i>rσi只对稳定子系统有意义。
  3. 保留不稳定行为:不稳定极点通常对系统行为至关重要,不能被截断。

平衡截断过程

下面用坐标变换
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 xRn u∈ R m u\\in\\mathbb R^m uRm y∈ R p y\\in\\mathbb R^p yRp

  1. 求解 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=0eAτ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=0eATτ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.
  2. 平衡变换的构造

    • 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,T1=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=TTWoT1=Σ

  3. 坐标变换
    定义
    x ˉ = T   x ⟹ x = T − 1   x ˉ . \\bar x = T\\,x \\quad\\Longrightarrow\\quad x = T^{-1}\\,\\bar x. xˉ=Txx=T1xˉ.
    将原系统变换得
    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)=(TAT1)xˉ+(TB)u,y=Cx+Du=(CT1)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=TAT1,Bb=TB,Cb=CT1,
    则平衡化系统为
    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 刚好是各状态的能量度量。

  4. 截断降阶
    根据 Σ = d i a g ( σ 1 , … , σ n ) \\Sigma=\\mathrm{diag}(\\sigma_1,\\dots,\\sigma_n) Σ=diag(σ1,,σn)保留能量大的前 r r r 个分量,舍弃后 n − r n-r nr 个分量。将
    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ˉ1Rr,xˉ2RnrAb=[A11A21A12A22],Bb=[B1B2],Cb=[C1C2],

丢弃 x ˉ 2 \\bar x_2 xˉ2 及其关联块,令 x r ≡ x ˉ 1 x_r\\equiv\\bar x_1 xrxˉ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:rCx(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,其主要原因有以下几点:

  1. 避免显式构造乘积矩阵,降低计算成本与内存开销

    • 如果直接计算 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 本身,从而节省了额外的存储和矩阵乘法开销。

  2. 提高数值稳定性

    • 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 本身对误差更不敏感,能够在高病态情况下仍然给出可靠的奇异值排序和数值结果。
  3. 天然支持低秩/截断优化

    • 在大规模系统中,Gramian 往往是低秩或数值低秩的。Cholesky 分解(或其它“平方根”算法)可以直接求出低秩因子 R , S R,S R,S,保留有效维度 r ≪ n r\\ll n rn,随后只对 S T R ∈ R r × r S^T R\\in\\mathbb R^{r\\times r} STRRr×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 slycotpip uninstall pymor,然后再重新安装 pip install pymor
  • 可能这就是 Python 的好处带来的弊端吧,开源的同时带来了很多不规范。

注意, V,W∈ R n × r V,W\\in\\mathbb R^{n\\times r} V,WRn×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,xrRr
  • 重构到原空间 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.Vbt.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)
    平衡截断(Balanced Truncation)—— MTALAB 和 Python 实现_平衡截断法
  • 在平衡截断的理论推导里,习惯把基矩阵写成 V , W ∈ R n × r V,W\\in\\mathbb R^{n\\times r} V,WRn×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=0eAτ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=0AmBBT(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,dAWc,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=0eATτ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,dATWo,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 向量。