メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

isstable

動的システム モデルが安定であるかどうかの判定

説明

B = isstable(sys) は、動的システム モデル sys が安定したダイナミクスをもつ場合に 1 (true) の logical 値を返し、それ以外の場合は 0 (false) の logical 値を返します。sys がモデル配列の場合、関数は、sys のすべてのモデルが安定である場合にのみ 1 を返します。

次の場合、isstable は動的システムの安定性について logical 値 1 (true) を返します。

  • 連続時間システムでは、すべての極が複素平面の左開半平面内にある。

  • 離散時間システムでは、すべての極が単位開円板内にある。

isstable は、有限個の極をもつ解析モデルでのみサポートされます。

B = isstable(sys,'elem') は、モデル配列 sys と同じ次元の logical 配列を返します。logical 配列は sys のどのモデルが安定しているかを示します。

B = isstable(___,Name=Value) は、1 つ以上の指定された名前と値の引数を使用して指定されたオプションに基づいて極のサブセットを計算することで、スパース モデル sys の安定性を判別します。sys が非スパース モデルの場合、関数は名前と値の引数を無視します。 (R2025a 以降)

すべて折りたたむ

0.1 秒のサンプル時間をもつこの離散時間 SISO 伝達関数モデルの安定性を判別します。

sys(z)=2z4z3+3z-1

離散時間伝達関数モデルを作成します。

sys = tf([2,0],[4,0,3,-1],0.1);

システムの極を調べます。

P = abs(pole(sys))
P = 3×1

    0.9159
    0.9159
    0.2980

伝達関数モデルのすべての極は 1 より小さい振幅をもつため、すべての極は単位開円板内にあり、システムは安定です。

isstable を使用してモデルの安定性を確認します。

B = isstable(sys)
B = logical
   1

システム sys は安定です。

この連続時間零点-極-ゲイン モデルの安定性を判別します。

sys(s)=2(s+2+3j)(s+2-3j)(s-0.5)

零点、極、ゲインを指定してモデルを zpk モデル オブジェクトとして作成します。

sys = zpk([],[-2-3*j,-2+3*j,0.5],2);

モデルの 1 つの極が複素平面の右半平面内にあるため、システムは不安定です。

isstable を使用してモデルの不安定性を確認します。

B = isstable(sys)
B = logical
   0

システム sys は不安定です。

-2 から 2 まで変動する極をもつ SISO 伝達関数モデルの配列の安定性を判別します。

[1s+2,1s+1,1s,1s-1,1s-2]

配列を作成するには、まずゼロ値の SISO 伝達関数をもつ次元 [length(a),1] の配列を初期化します。

a = [-2:2];
sys = tf(zeros(1,1,length(a)));

その配列に 1/(s-a) 形式の伝達関数を設定します。

for j = 1:length(a)
    sys(1,1,j) = tf(1,[1 -a(j)]);
end

isstable によって、モデル配列内のすべてのモデルが安定か、または各個別のモデルが安定かを判定できます。

モデル配列の安定性を検証します。

B_all = isstable(sys)
B_all = logical
   0

既定では、isstable は配列内のすべてのモデルが安定な場合にのみ 1 (true) となる単一の logical 値を返します。sys には、安定でない非負の極をもついくつかのモデルが含まれています。したがって、isstable は配列全体について 0 (false) を返します。

'elem' フラグを使用して配列内の各モデルの安定性を検証します。

B_elem = isstable(sys,'elem')
B_elem = 5×1 logical array

   1
   1
   0
   0
   0

この関数は、モデル配列内の対応するエントリの安定性を示す logical 値の配列を返します。たとえば、B_elem(2)1 です。これは、配列の 2 番目のモデル sys(1,1,2) が安定であることを示しています。これは、sys(1,1,2)-1 に極をもつためです。

R2025a 以降

この例では、音叉のスパース 2 次モデルが含まれている tuningForkData.mat について考えます。スパース状態空間モデルの場合、isstable は、対象の周波数範囲内の計算のサブセットに基づいて安定性を判別します。

tuningForkData.mat からワークスペースにスパース行列を読み込み、mechss モデル オブジェクトを作成します。

load tuningForkData.mat;
sys = mechss(M,[],K,B,F)
Sparse continuous-time second-order model with 2 outputs, 1 inputs, and 3024 degrees of freedom.
Model Properties

Use "spy" and "showStateInfo" to inspect model structure. 
Type "help mechssOptions" for available solver options for this model.

10000 rad/s までの周波数範囲での安定性を確認します。

b = isstable(sys,Focus=[0 1e4])
b = logical
   0

音叉モデル sys は非減衰モデルであり、isstable は期待どおりに 0 を返します。これは damp 関数を使用して確認できます。

damp(sys,Focus=[0 1e4])
                                                                       
         Pole              Damping       Frequency      Time Constant  
                                       (rad/seconds)      (seconds)    
                                                                       
  0.00e+00 + 2.96e+03i     0.00e+00       2.96e+03           Inf       
  0.00e+00 - 2.96e+03i     0.00e+00       2.96e+03           Inf       
  0.00e+00 + 2.96e+03i     0.00e+00       2.96e+03           Inf       
  0.00e+00 - 2.96e+03i     0.00e+00       2.96e+03           Inf       
  0.00e+00 + 3.01e+03i     0.00e+00       3.01e+03           Inf       
  0.00e+00 - 3.01e+03i     0.00e+00       3.01e+03           Inf       
  0.00e+00 + 3.02e+03i     0.00e+00       3.02e+03           Inf       
  0.00e+00 - 3.02e+03i     0.00e+00       3.02e+03           Inf       

次に、周波数が 3000 rad/s で最小減衰が 0.01 のレイリー減衰 C=αM+βK を追加します。

wmin = 3000;
zmin = 0.01;
alpha = zmin*wmin;
beta = zmin/wmin;
C_d = alpha*M+beta*K;
sys_d = mechss(M,C_d,K,B,F)
Sparse continuous-time second-order model with 2 outputs, 1 inputs, and 3024 degrees of freedom.
Model Properties

Use "spy" and "showStateInfo" to inspect model structure. 
Type "help mechssOptions" for available solver options for this model.

この減衰モデルの安定性を確認します。

isstable(sys_d,Focus=[0 1e4])
ans = logical
   1

減衰を追加すると、モデルの計算された極はすべて左半平面内に存在します。

damp(sys_d,Focus=[0 1e4])
                                                                       
         Pole              Damping       Frequency      Time Constant  
                                       (rad/seconds)      (seconds)    
                                                                       
 -2.96e+01 + 2.96e+03i     1.00e-02       2.96e+03         3.38e-02    
 -2.96e+01 - 2.96e+03i     1.00e-02       2.96e+03         3.38e-02    
 -2.96e+01 + 2.96e+03i     1.00e-02       2.96e+03         3.38e-02    
 -2.96e+01 - 2.96e+03i     1.00e-02       2.96e+03         3.38e-02    
 -3.01e+01 + 3.01e+03i     1.00e-02       3.01e+03         3.33e-02    
 -3.01e+01 - 3.01e+03i     1.00e-02       3.01e+03         3.33e-02    
 -3.02e+01 + 3.02e+03i     1.00e-02       3.02e+03         3.31e-02    
 -3.02e+01 - 3.02e+03i     1.00e-02       3.02e+03         3.31e-02    

入力引数

すべて折りたたむ

動的システム。SISO または MIMO 動的システム モデル、あるいは SISO または MIMO 動的システム モデルの配列として指定します。使用できる動的システムには、tfzpkss モデルなどの連続時間または離散時間の数値 LTI モデルが含まれます。

sys が一般化状態空間モデル genss または不確かさをもつ状態空間モデル uss (Robust Control Toolbox) である場合、isstable は、sys の現在の値またはノミナル値の安定性を確認します。

sys がスパース状態空間モデル (sparss または mechss) の場合、ソフトウェアは指定した焦点の周波数帯域内における極のサブセットを計算して安定性を確認します。スパース モデルの場合は、名前と値の引数を使用して計算オプションを指定します。オプションを指定しなかった場合、ソフトウェアは最小の振幅をもつ最初の 1000 個の極を計算します。レイリー減衰をもつ mechss モデルの場合、ソフトウェアは (K,M) の固有値から極を計算します。それ以外の場合、ソフトウェアは同等の sparss モデルから極を計算します。 (R2025a 以降)

sys がモデルの配列である場合、isstable は配列内のすべてのモデルの安定性を確認します。

  • B = isstable(sys) を使用する場合、配列内のすべてのモデルが安定である場合にのみ、出力は 1 (true) です。

  • B = isstable(sys,'elem') を使用する場合、出力は logical 配列であり、そのエントリは、モデル配列内の対応するエントリの安定性を示しています。

モデル配列の詳細については、モデル配列を参照してください。

名前と値の引数

すべて折りたたむ

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

例: B = isstable(sparseSys,Focus=[0 10],Display="off")

R2025a 以降

対象の周波数範囲。[fmin,fmax] の形式のベクトルとして指定します。焦点の周波数範囲を指定すると、アルゴリズムはこの範囲内の固有振動数をもつ極のみを計算します。離散時間モデルの場合、ソフトウェアは双一次変換を使用して同等の固有振動数を近似します。

対称半正定値スパース モデルの場合、0 ≤ fmin < fmax の任意の周波数範囲を指定できます。非対称 sparss モデルの場合、周波数範囲を [0,fmax] または [fmin,inf] のいずれかとして指定する必要があります。

ソフトウェアは指定した周波数範囲内のすべての極を計算するため、通常は低周波数範囲を指定して多数の極を計算しないように制限します。既定では、焦点は未指定 ([0 Inf]) であり、アルゴリズムは MaxNumber 個までの極を計算します。

R2025a 以降

計算する極と零点の最大数。正の整数として指定します。この値は、アルゴリズムによって計算される極の数を制限します。

R2025a 以降

スペクトル シフト。有限スカラーとして指定します。

ソフトウェアは A-sigma*E に逆べき乗法を使用して、指定した範囲 [0,fmax] 内の固有振動数をもつ極を計算し、シフト sigma に最も近い固有値を取得します。A が特異で、sigma がゼロの場合、逆が存在しないためアルゴリズムは失敗します。したがって、積分動作をもつスパース モデル (s = 0 または z = 1 (離散時間モデルの場合)) では、このオプションを使用して、極または零点をこのシフト値に最も近い値に暗黙的にシフトできます。元のモデルの既存の極値と等しくないシフト値を指定します。

R2025a 以降

計算された極の精度の許容誤差。正の有限スカラーとして指定します。この値は、逆べき乗法における計算された固有値の収束を制御します。

R2025a 以降

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

出力引数

すべて折りたたむ

True または false の結果。安定モデルの場合 1、または不安定モデルの場合 0 として返されます。

'elem' フラグによって isstable はモデル配列と同じ次元をもつ logical 値の配列を返します。配列の値は、モデル配列の対応するエントリの安定性を示しています。

アルゴリズム

スパース状態空間モデルの場合、ソフトウェアは逆べき乗法に Krylov-Schur アルゴリズム [1] を使用して、指定した周波数帯域内の極を計算します。

参照

[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.

バージョン履歴

R2012a で導入

すべて展開する

参考

| |