modalreal
説明
[___] = modalreal( は、1 つ以上の名前と値の引数で指定されたオプションに基づいてモード実現を返します。これらのオプションは、ブロック サイズを制御し、複素数のペアに関連した 2 行 2 列のブロックを正規化するために使用します。sys,Name=Value)
スパース モデルの場合、この構文は、計算された極のサブセットに基づいて、切り捨てられたモード実現を返します。このサブセットは、Focus オプションおよび MaxOrder オプションによって制御されます。 (R2026a 以降)
例
pendulumCartSSModel.mat には、出力がカートの変位 および振子角度 である、カート上の倒立振子の状態空間モデルが含まれています。制御入力 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
msys は sys のモード実現です。blks は対角線の下のブロック サイズを表し、TL および TR はブロック対角化変換行列を表します。
この例では、二重の極および近傍の極のクラスターをもつ次のシステムについて考えてみます。
このシステムの 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=-10 と s=-10.0001 に 1 組の極があり、s=1+i と s=1-i に重複度 2 の 2 つの複素数極もあります。その結果、モード形式 msys1 は、s = -10 の近傍の 2 極に対するサイズ 2 のブロックがあり、複素固有値に対するサイズ 4 のブロックがある状態空間モデルになります。
これで、ブロック対角化変換の条件数を増やすことで、s = -10 の近傍の 2 つの極を分けます。この例では 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
msys2 の行列 A は、s = -10 の近傍の極の独立した対角要素を含みます。条件数を増やすと、B 行列の値が非常に大きくなります。
この例では、複素数のペアの極および近傍の極のクラスターをもつ次のシステムについて考えてみます。
このシステムの 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
複素数の極の場合、このオプションは複素数の極 の 2 行 2 列のブロックを に正規化します。
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)")

このワークフローを使用して、スパース モデルの切り捨てられたモード実現を迅速に取得できます。柔軟性を高めるために、まず reducespec を使用して低次元化モデルを取得し、次にその結果に modalreal を適用します。
入力引数
動的システム。SISO または MIMO 動的システム モデルとして指定します。使用できる動的システムには次のようなものがあります。
genssやuss(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) として指定します。
Normalize が true の場合、関数はブロックを正規化して極値を示します。
陽的なモデルでは、関数は複素数のペア a±jb に関連した 2 行 2 列のブロックを に正規化します。
記述子モデルでは、関数は以下のように正規化します。
1 行 1 列のブロックを Aj = a、Ej = 1 に。
2 行 2 列のブロックを Aj = 、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 モデルの場合、
TLは Nx 行 Nx 列の大きさの行列です。ここで、Nx はモデルsys内の状態数です。スパース モデルの場合、
TLは nc 行 Nx 列の大きさの行列です。ここで、nc は計算されたモーダル コンポーネントの数です。mechssモデルの場合、TLは同等の 1 次表現sparss(sys)に対応します。 (R2026a 以降)
アルゴリズムはモデルの状態空間実現 (A, B, C, D, E) をブロック対角化行列 (Am, Bm, Cm, Dm, Em) に変換します。これは以下によって与えられます。
陽的な状態空間モデルの場合
記述子状態空間モデルの場合
入力モデル sys が状態空間モデルでない場合、関数はこの引数に対して空の値 [] を返します。
ブロック対角化変換の右辺の行列。行列として返されます。
通常の LTI モデルの場合、
TRは Nx 行 Nx 列の大きさの行列です。ここで、Nx はモデルsys内の状態数です。スパース モデルの場合、
TRは Nx 行 nc 列の大きさの行列です。ここで、nc は計算されたモーダル コンポーネントの数です。mechssモデルの場合、TRは同等の 1 次表現sparss(sys)に対応します。 (R2026a 以降)
アルゴリズムはモデルの状態空間実現 (A, B, C, D, E) をブロック対角化行列 (Am, Bm, Cm, Dm, Em) に変換します。これは以下によって与えられます。
陽的な状態空間モデルの場合
記述子状態空間モデルの場合
入力モデル 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 で導入modalreal を使用して、スパース状態空間モデルの切り捨てられたモード形式を計算できるようになりました。これは、スパース モデルの切り捨てられたモード形式を迅速に取得する必要がある場合に役立ちます。
柔軟性を高めるために、まず reducespec を使用して低次元化モデルを取得し、次にその結果に modalreal を適用します。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)