メインコンテンツ

modalreal

モード状態空間実現を計算する

R2023b 以降

    説明

    [msys,blks] = modalreal(sys) は LTI モデル sys のモード実現 msys を返します。これは、A または (A,E) がブロック対角であり、各ブロックが実極、複素数のペア、または繰り返しの極のクラスターに対応している実現です。blks は対角線の下のブロック サイズを含むベクトルです。

    スパース モデルの場合、この構文は切り捨てられたモード実現を返します。既定では、関数は、最小の振幅をもつ最初の 1000 個のモードを計算します。 (R2026a 以降)

    [msys,blks,TL,TR] = modalreal(sys) はブロック対角化変換 TL および TR も返します。

    [___] = modalreal(sys,Name=Value) は、1 つ以上の名前と値の引数で指定されたオプションに基づいてモード実現を返します。これらのオプションは、ブロック サイズを制御し、複素数のペアに関連した 2 行 2 列のブロックを正規化するために使用します。

    スパース モデルの場合、この構文は、計算された極のサブセットに基づいて、切り捨てられたモード実現を返します。このサブセットは、Focus オプションおよび MaxOrder オプションによって制御されます。 (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 は対角線の下のブロック サイズを表し、TL および TR はブロック対角化変換行列を表します。

    この例では、二重の極および近傍の極のクラスターをもつ次のシステムについて考えてみます。

    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
    
    

    sys には s=-10s=-10.0001 に 1 組の極があり、s=1+is=1-i に重複度 2 の 2 つの複素数極もあります。その結果、モード形式 msys1 は、s = -10 の近傍の 2 極に対するサイズ 2 のブロックがあり、複素固有値に対するサイズ 4 のブロックがある状態空間モデルになります。

    これで、ブロック対角化変換の条件数を増やすことで、s = -10 の近傍の 2 つの極を分けます。この例では SepTol1e-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
    
    

    msys2 の行列 A は、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 極に対するサイズ 2 のブロックがあり、s = 3+4i および s = 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.
    

    Focus オプションおよび MaxOrder オプションを使用して、計算される極のサブセットを制限できます。たとえば、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 動的システム モデルとして指定します。使用できる動的システムには次のようなものがあります。

    • tf モデル、zpk モデル、ss モデル、pid モデルなどの連続時間または離散時間の数値 LTI モデル。

    • genssuss (Robust Control Toolbox) モデルなどの一般化された、あるいは不確かさをもつ LTI モデル。(不確かさをもつモデルを使用するには Robust Control Toolbox™ ソフトウェアが必要です。)

    • idtf (System Identification Toolbox)idss (System Identification Toolbox)idproc (System Identification Toolbox)idpoly (System Identification Toolbox)idgrey (System Identification Toolbox) モデルなどの、同定された LTI モデル。(同定されたモデルを使用するには System Identification Toolbox™ ソフトウェアが必要です。)

    • スパース状態空間モデル sparss または mechss (R2026a 以降)

      スパース モデルの場合、modalreal は、切り捨てられたモード形式を迅速に取得する必要がある場合に役立ちます。柔軟性を高めるために、まず reducespec を使用して低次元化モデルを取得し、次にその結果に modalreal を適用します。

    frd モデルなどの周波数応答データ モデルは使用できません。

    名前と値の引数

    すべて折りたたむ

    オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

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

    ブロック対角化の相対精度。0 ~ 1 のスカラーとして指定します。

    このオプションは、ブロック対角化変換の条件数を約 SepTol/eps に制限します。SepTol を増やすと、精度を犠牲にして、得られるブロックを小さくすることができます。

    1 行 1 列および 2 行 2 列の対角ブロックを正規化します。logical 0 (false) または 1 (true) として指定します。

    Normalizetrue の場合、関数はブロックを正規化して極値を示します。

    • 陽的なモデルでは、関数は複素数のペア a±jb に関連した 2 行 2 列のブロックを [abba] に正規化します。

    • 記述子モデルでは、関数は以下のように正規化します。

      • 1 行 1 列のブロックを Aj = aEj = 1 に。

      • 2 行 2 列のブロックを Aj = [abba]Ej = I に。

    R2026a 以降

    対象の周波数範囲。[fmin,fmax] の形式のベクトルとして指定します。このプロパティの値を指定すると、アルゴリズムはこの周波数範囲のモードのみを計算します。

    既定では、焦点は未指定 ([0 inf]) であり、アルゴリズムは、最小の振幅をもつ MaxOrder 個のモードを計算します。

    R2026a 以降

    モーダル近似の最大次数。正の整数として指定します。この値により、Krylov-Schur の反復 ([1]) によって計算される固有値の数と、元のスパース モデルのモーダル近似の次数が制限されます。

    R2026a 以降

    Krylov-Schur の反復で収束した固有値を識別するための許容誤差。正のスカラーとして指定します。

    R2026a 以降

    DC の寄与を評価および照合する周波数。非負のスカラーとして指定します。

    積分器をもつモデルの場合、DC ゲインは無限であるため、DC でのモーダル寄与を評価することはできません。異なる周波数でモーダル寄与を評価してゲインを照合するには、プロパティを正の値に設定します。このプロパティの既定値は、実際の DC 値に対応します。

    R2026a 以降

    入力スケーリング係数。長さ Nu のベクトルとして指定します。ここで、Nu は元のモデル sys の入力数です。

    このオプションを使用して、sys の特定の入力チャネルを強調します。スケーリングされたシステムのモーダル寄与がソフトウェアで評価されます。

    R2026a 以降

    出力スケーリング係数。長さ Ny のベクトルとして指定します。ここで、Ny は元のモデル sys の出力数です。

    このオプションを使用して、sys の特定の出力チャネルを強調します。スケーリングされたシステムのモーダル寄与がソフトウェアで評価されます。

    R2026a 以降

    進捗レポートの表示または非表示。"off" または "on" として指定します。

    出力引数

    すべて折りたたむ

    動的モデルのモード状態空間実現。ss モデル オブジェクトとして返されます。msys は、A または (A,E) がブロック対角であり、各ブロックが実極、複素数のペア、または繰り返しの極のクラスターに対応している実現です。

    ブロック対角実現のブロック サイズ。ベクトルとして返されます。

    ブロック対角化変換の左辺の行列。行列として返されます。

    • 通常の LTI モデルの場合、TLNxNx 列の大きさの行列です。ここで、Nx はモデル sys 内の状態数です。

    • スパース モデルの場合、TLncNx 列の大きさの行列です。ここで、nc は計算されたモーダル コンポーネントの数です。mechss モデルの場合、TL は同等の 1 次表現 sparss(sys) に対応します。 (R2026a 以降)

    アルゴリズムはモデルの状態空間実現 (A, B, C, D, E) をブロック対角化行列 (Am, Bm, Cm, Dm, Em) に変換します。これは以下によって与えられます。

    • 陽的な状態空間モデルの場合

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

    • 記述子状態空間モデルの場合

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

    入力モデル sys が状態空間モデルでない場合、関数はこの引数に対して空の値 [] を返します。

    ブロック対角化変換の右辺の行列。行列として返されます。

    • 通常の LTI モデルの場合、TRNxNx 列の大きさの行列です。ここで、Nx はモデル sys 内の状態数です。

    • スパース モデルの場合、TRNxnc 列の大きさの行列です。ここで、nc は計算されたモーダル コンポーネントの数です。mechss モデルの場合、TR は同等の 1 次表現 sparss(sys) に対応します。 (R2026a 以降)

    アルゴリズムはモデルの状態空間実現 (A, B, C, D, E) をブロック対角化行列 (Am, Bm, Cm, Dm, Em) に変換します。これは以下によって与えられます。

    • 陽的な状態空間モデルの場合

      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 で導入

    すべて展開する