主要内容

本页采用了机器翻译。点击此处可查看英文原文。

modalreal

计算模态状态空间实现

自 R2023b 起

    说明

    [msys,blks] = modalreal(sys) 返回 LTI 模型 sys 的模态解 msys。这是一个实现方案,其中 A 或 (A,E) 是模块对角矩阵,每个模块分别对应一个实极点、一对复极点或一组重复极点。blks 是一个向量,其对角线元素表示各模块的大小。

    对于稀疏模型,此语法将返回一个截断的模态实现。默认情况下,该函数计算模数最小的前 1000 个模态。 (自 R2026a 起)

    示例

    [msys,blks,TL,TR] = modalreal(sys) 还会返回块对角化变换 TLTR

    示例

    [___] = modalreal(sys,Name=Value) 根据一个或多个名称-值参量指定的选项,返回模态实现。使用这些选项来控制模块大小,并对与复数对相关的 2×2 模块进行归一化处理。

    对于稀疏模型,该语法会根据已计算的极点子集返回一个截断的模态实现。该子集由 FocusMaxOrder 选项控制。 (自 R2026a 起)

    示例

    示例

    全部折叠

    pendulumCartSSModel.mat 包含小车上倒立摆的状态空间模型,其输出为小车位移 x 和摆角 θ。控制输入 u 是作用于小车的水平力。

    [x˙x¨θ˙θ¨]=[01000-0.13000010-0.5300][xx˙θθ˙]+[0205]uy=[10000010][xx˙θθ˙]+[00]u

    首先,将状态空间模型 sys 加载到工作区。

    load('pendulumCartSSModel.mat','sys');

    sys 转换为模态形式并提取块大小。

    [msys,blks,TL,TR] = modalreal(sys)
    msys =
     
      A = 
               x1      x2      x3      x4
       x1       0       0       0       0
       x2       0   -0.05       0       0
       x3       0       0  -5.503       0
       x4       0       0       0   5.453
     
      B = 
              u1
       x1  1.875
       x2  6.298
       x3   12.8
       x4  12.05
     
      C = 
                  x1         x2         x3         x4
       y1         16     -4.763  -0.003696   0.003652
       y2          0   0.003969   -0.03663    0.03685
     
      D = 
           u1
       y1   0
       y2   0
     
    Continuous-time state-space model.
    Model Properties
    
    blks = 4×1
    
         1
         1
         1
         1
    
    
    TL = 4×4
    
        0.0625    1.2500   -0.0000   -0.1250
             0    4.1986    0.0210   -0.4199
             0    0.2285  -13.5873    2.4693
             0   -0.2251   13.6287    2.4995
    
    
    TR = 4×4
    
       16.0000   -4.7631   -0.0037    0.0037
             0    0.2381    0.0203    0.0199
             0    0.0040   -0.0366    0.0369
             0   -0.0002    0.2015    0.2009
    
    

    msyssys 的模态实现,blks 表示对角线上的模块大小,而 TLTR 表示模块对角化变换矩阵。

    例如,在此示例中,请考虑以下具有双极点和密集极点簇的系统:

    sys(s)=100(s-1)(s+1)s(s+10)(s+10.0001)(s-(1+i))2(s-(1-i))2

    创建该系统的 zpk 模型,并使用函数 modalreal 获得模态实现。

    sys = zpk([1 -1],[0 -10 -10.0001 1+1i 1-1i 1+1i 1-1i],100);
    [msys1,blks1] = modalreal(sys);
    blks1
    blks1 = 3×1
    
         1
         4
         2
    
    
    msys1.A
    ans = 7×7
    
             0         0         0         0         0         0         0
             0    1.0000    2.1220         0         0         0         0
             0   -0.4713    1.0000    1.5296         0         0         0
             0         0         0    1.0000    1.8439         0         0
             0         0         0   -0.5423    1.0000         0         0
             0         0         0         0         0  -10.0000    4.0571
             0         0         0         0         0         0  -10.0001
    
    
    msys1.B
    ans = 7×1
    
        0.1600
       -0.0052
        0.0201
       -0.0975
        0.2884
             0
        4.0095
    
    

    syss = -10s = -10.0001 处各有一对极点,并在 s = 1+is = 1-i 处各有一个重数为 2 的复极点。因此,模态形式 msys1 是一个状态空间模型,其中针对 s = -10 附近的两个极点,设有一个大小为 2 的模块;针对复特征值,设有一个大小为 4 的模块。

    现在,通过提高块对角化变换的条件数,将 s = -10 附近的两极分离。例如,在此示例中,将 SepTol 设置为 1e-10

    [msys2,blks2] = modalreal(sys,SepTol=1e-10);
    blks2
    blks2 = 4×1
    
         1
         4
         1
         1
    
    
    msys2.A
    ans = 7×7
    
             0         0         0         0         0         0         0
             0    1.0000    2.1220         0         0         0         0
             0   -0.4713    1.0000    1.5296         0         0         0
             0         0         0    1.0000    1.8439         0         0
             0         0         0   -0.5423    1.0000         0         0
             0         0         0         0         0  -10.0000         0
             0         0         0         0         0         0  -10.0001
    
    
    msys2.B
    ans = 7×1
    105 ×
    
        0.0000
       -0.0000
        0.0000
       -0.0000
        0.0000
        1.6267
        1.6267
    
    

    A 矩阵的 msys2 部分包含针对 s = -10 附近极点的独立对角元素。随着条件数的增大,B 矩阵中会出现一些非常大的值。

    例如,考虑以下具有复数成对极点和密集极点簇的系统:

    sys(s)=100(s-1)(s+1)s(s+10)(s+10.0001)(s-(3+4i))2

    创建该系统的 zpk 模型,并使用函数 modalreal 获得模态实现。

    sys = zpk([1 -1],[0 -10 -10.0001 3+4i 3-4i],100);
    [msys1,blks1] = modalreal(sys);
    blks1
    blks1 = 3×1
    
         1
         2
         2
    
    
    msys1.A
    ans = 5×5
    
             0         0         0         0         0
             0    3.0000    8.7637         0         0
             0   -1.8257    3.0000         0         0
             0         0         0  -10.0000    8.8001
             0         0         0         0  -10.0001
    
    

    msys1 是一个状态空间模型,其中在 s = -10 附近有两个极点,对应一个大小为 2 的模块;此外,在 s = 3 +4is = 3-4i

    您可以使用 Normalize 选项对 2×2 模块的值进行归一化,以显示实际的极点值。此外,放宽模块对角化变换的相对精度要求,以便分离靠近 s = -10 的模块。

    [msys2,blks2] = modalreal(sys,Normalize=true,SepTol=1e-10);
    blks2
    blks2 = 4×1
    
         1
         2
         1
         1
    
    
    msys2.A
    ans = 5×5
    
             0         0         0         0         0
             0    3.0000    4.0000         0         0
             0   -4.0000    3.0000         0         0
             0         0         0  -10.0000         0
             0         0         0         0  -10.0001
    
    

    对于复极点,此选项将复极点 a±bi 的 2×2 模块归一化为 [ab-ba]

    自 R2026a 起

    本示例演示了如何使用 modalreal 获取稀疏模型的截断模态实现。

    加载稀疏模型。

    load flowmeterSparse.mat
    size(sys)
    Sparse state-space model with 5 outputs, 1 inputs, and 9669 states.
    

    该稀疏模型包含 9669 个状态。默认情况下,modalreal 会为稀疏模型计算模值最小的前 1000 个极点,这可能会耗费较长时间。计算模态实现时,您会发现 modalreal 返回的实现大小为 1000。

    [msys,blks,TL,TR] = modalreal(sys);
    size(msys)
    State-space model with 5 outputs, 1 inputs, and 1000 states.
    

    您可以使用 FocusMaxOrder 选项来限制计算极点的子集。例如,计算频率范围为 0 rad/s 至 250 rad/s 内的模态实现值。

    [msys2,blks2,TL2,TR2] = modalreal(sys,Focus=[0 250]);
    size(msys2)
    State-space model with 5 outputs, 1 inputs, and 33 states.
    

    将截断实现的频率响应与原始稀疏模型进行比较。

    sigmaplot(sys,msys,".-",msys2,"--",w)
    legend("Original model","Truncated realization (1000 modes)",...
        "Truncated realization (33 modes)")

    MATLAB figure

    使用此工作流可快速获得稀疏模型的截断模态实现。为了获得更大的灵活性,请先使用 reducespec 获得一个降阶模型,然后对结果应用 modalreal

    输入参数

    全部折叠

    动态系统,指定为 SISO 或 MIMO 动态系统模型。您可以使用的动态系统包括:

    • 连续时间或离散时间数值 LTI 模型,如 tf (Control System Toolbox)zpk (Control System Toolbox)ss (Control System Toolbox)pid (Control System Toolbox) 模型。

    • 广义或不确定的 LTI 模型,如 genss (Control System Toolbox)uss (Robust Control Toolbox) 模型。(使用不确定模型需要 Robust Control Toolbox™ 软件。)

    • 辨识的 LTI 模型,如 idtfidssidprocidpolyidgrey 模型。

    • 稀疏状态空间模型,sparss (Control System Toolbox)mechss (Control System Toolbox) (自 R2026a 起)

      对于稀疏模型,当您希望快速获得截断模态形式时,modalreal 会很有帮助。为了获得更大的灵活性,请先使用 reducespec (Control System Toolbox) 获得一个降阶模型,然后对结果应用 modalreal

    您可以使用频率响应数据模型,如 frd (Control System Toolbox) 模型。

    名称-值参数

    全部折叠

    Name1=Value1,...,NameN=ValueN 的形式指定可选参量对组,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

    示例: [msys,blks] = modalreal(sys,Normalize=true)

    块对角化的相对精度,指定为介于 0 和 1 之间的标量。

    此选项将块对角化变换的条件数限制在约 SepTol/eps 左右。增加 SepTol 的值有助于生成更小的模块,但会以牺牲精度为代价。

    对 1×1 和 2×2 对角块进行归一化,指定为逻辑值 0 (false) 或 1 (true)。

    Normalize 等于 true 时,该函数会对该模块进行归一化处理,以显示极点值。

    • 对于显式模型,函数将与复数对 a ± jb 相关的 2×2 模块归一化为 [abba]

    • 对于描述符模型,函数执行以下归一化操作:

      • 将 1×1 模块归一化为:Aj = aEj = 1。

      • 将 2×2 模块归一化为:Aj = [abba]Ej = I

    自 R2026a 起

    感兴趣的频率范围,指定为 [fmin,fmax] 形式的向量。当您为该属性指定一个值时,算法将仅计算该频率范围内的模态。

    默认情况下,焦点未指定 ([0 inf]),算法会计算模值最小的 MaxOrder 模式。

    自 R2026a 起

    模态逼近的最高阶数,指定为一个正整数。该值限制了克雷洛夫-舒尔迭代 ([1] (Control System Toolbox)) 计算的特征值个数,以及原始稀疏模型的模态逼近阶数。

    自 R2026a 起

    在克雷洛夫-舒尔迭代中用于辨识收敛特征值的容差,指定为一个正标量。

    自 R2026a 起

    用于评估和匹配 DC 分量的频率,指定为一个非负标量。

    对于包含积分器的模型,由于 DC 增益为无穷大,因此无法在 DC 条件下评估模态贡献。要评估不同频率下的模态贡献和匹配增益,请将该属性设置为正值。该属性的默认值对应于真正的 DC 值。

    自 R2026a 起

    输入缩放因子,指定为长度为 Nu 的向量,其中 Nu 是原始模型 sys 中的输入数量。

    使用此选项可在 sys 中突出显示特定的输入通道。软件对缩放后的系统的模态贡献进行了评估。

    自 R2026a 起

    输出缩放因子,指定为长度为 Ny 的向量,其中 Ny 是原始模型 sys 中的输出数量。

    使用此选项可在 sys 中突出显示特定的输出通道。软件对缩放后的系统的模态贡献进行了评估。

    自 R2026a 起

    显示或隐藏进度报告,指定为 "off""on"

    输出参量

    全部折叠

    动态模型的模态状态空间实现,以 ss (Control System Toolbox) 模型对象的形式返回。msys 是一种实现形式,其中 A 或 (A,E) 为块对角矩阵,且每个块分别对应一个实极点、一对复极点或一组重复极点。

    模块对角实现中的模块大小,以向量形式返回。

    块对角化变换的左侧矩阵,以矩阵形式返回。

    • 对于普通的 LTI 模型,TL 是一个 Nx×Nx 的矩阵,其中 Nx 是模型中的状态数 sys

    • 对于稀疏模型,TL 是一个 ncNx 列的矩阵,其中 nc 是计算出的模态组件个数。对于 mechss 模型,TL 对应于等效的一阶表示 sparss(sys) (自 R2026a 起)

    该算法将模型的状态空间实现(ABCDE)转换为块对角矩阵(AmBmCmDmEm),其表达式如下:

    • 对于显式状态空间模型

      Am=TLATR,Bm=TLB,Cm=CTR,Dm=D,E=TLTR=I

    • 对于描述子状态空间模型

      Am=TLATR,Bm=TLB,Cm=CTR,Dm=D,Em=TLETR

    当输入模型 sys 不是状态空间模型时,该函数会为该参量返回空值 []

    块对角化变换的右侧矩阵,以矩阵形式返回。

    • 对于普通的 LTI 模型,TR 是一个 Nx×Nx 的矩阵,其中 Nx 是模型中的状态数 sys

    • 对于稀疏模型,TR 是一个 Nxnc 列的矩阵,其中 nc 是计算出的模态组件个数。对于 mechss 模型,TR 对应于等效的一阶表示 sparss(sys) (自 R2026a 起)

    该算法将模型的状态空间实现(ABCDE)转换为块对角矩阵(AmBmCmDmEm),其表达式如下:

    • 对于显式状态空间模型

      Am=TLATR,Bm=TLB,Cm=CTR,Dm=D,E=TLTR=I

    • 对于描述子状态空间模型

      Am=TLATR,Bm=TLB,Cm=CTR,Dm=D,Em=TLETR

    当输入模型 sys 不是状态空间模型时,该函数会为该参量返回空值 []

    参考

    [1] Stewart, G. W. “A Krylov--Schur Algorithm for Large Eigenproblems.” SIAM Journal on Matrix Analysis and Applications 23, no. 3 (January 2002): 601–14. https://doi.org/10.1137/S0895479800371529.

    版本历史记录

    在 R2023b 中推出

    全部展开

    另请参阅

    (Control System Toolbox) | (Control System Toolbox) | (Control System Toolbox) | (Control System Toolbox) | (Control System Toolbox) |