メインコンテンツ

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 (Control System Toolbox) モデル、zpk (Control System Toolbox) モデル、ss (Control System Toolbox) モデル、pid (Control System Toolbox) モデルなどの連続時間または離散時間の数値 LTI モデル。

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

    • idtfidssidprocidpolyidgrey モデルなどの、同定された LTI モデル。

    • スパース状態空間モデル 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 列の対角ブロックを正規化します。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] (Control System Toolbox)) によって計算される固有値の数と、元のスパース モデルのモーダル近似の次数が制限されます。

    R2026a 以降

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

    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 モデルの場合、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 で導入

    すべて展開する

    参考

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

    トピック