Main Content

getPassiveIndex

線形システムの受動性インデックスの計算

説明

getPassiveIndex は、特定のシステムにおける受動性の超過または不足のさまざまな測定値を計算します。

すべての I/O 軌跡 (u(t),y(t)) が次を満たす場合、線形システム G(s) は "受動的" です。

0Ty(t)Tu(t)dt>0,

すべての T > 0 について上記が成り立つとします。同様に、周波数応答が正の実数の場合、つまりすべての ω > 0 について次が成り立つ場合、システムは受動的です。

G(jω)+G(jω)H>0

(または離散時間の等価物)。

R = getPassiveIndex(G) は相対受動性インデックスを計算します。R が 1 より小さい場合、G は受動的です。R は受動性の相対的な超過 (R < 1) または不足 (R > 1) を測定します。

受動性インデックスの概念の詳細については、受動性および受動性インデックスについてを参照してください。

nu = getPassiveIndex(G,'input') は入力受動性インデックスを計算します。nu > 0 の場合、システムは "入力で厳密に受動的" です。nu は入力フィードフォワード受動性 (IFP) インデックスとも呼ばれます。nu の値は、結果として得られるシステムが受動的になる最小フィードフォワード アクションです。

受動性インデックスの概念の詳細については、受動性および受動性インデックスについてを参照してください。

rho = getPassiveIndex(G,'output') は出力受動性インデックスを計算します。rho > 0 の場合、システムは "出力で厳密に受動的" です。rho は出力フィードバック受動性 (OFP) インデックスとも呼ばれます。rho の値は、結果として得られるシステムが受動的になる最小フィードバック アクションです。

受動性インデックスの概念の詳細については、受動性および受動性インデックスについてを参照してください。

tau = getPassiveIndex(G,'io') は組み合わされた I/O 受動性インデックスを計算します。tau > 0 の場合、システムは "非常に厳密に受動的" です。

受動性インデックスの概念の詳細については、受動性および受動性インデックスについてを参照してください。

DX = getPassiveIndex(G,dQ) は、行列 dQ で指定した方向の方向受動性インデックスを計算します。

index = getPassiveIndex(___,tol) は、tol で指定した相対精度をもつ受動性インデックスを計算します。この構文では、入力引数を前述の任意の組み合わせで使用します。index は対応する受動性インデックス Rnurhotau または DX です。

index = getPassiveIndex(___,tol,fband) は、特定の周波数範囲に制限された受動性インデックスを計算します。

[index,FI] = getPassiveIndex(___) は、返されるインデックス値が得られた周波数も返します。

[index,FI,Qout,dQout] = getPassiveIndex(___) は、受動性のセクター行列 Qout と方向インデックス行列 dQout も返します。

すべて折りたたむ

次の動的システムの受動性インデックスを計算します。

G(s)=s2+s+5s+0.1s3+2s2+3s+4

G = tf([1,1,5,.1],[1,2,3,4]);

相対受動性インデックスを計算します。

R = getPassiveIndex(G)
R = 0.9512

このシステムは受動的ですが、受動性の超過は相対的に小さくなっています。

入力受動性インデックスと出力受動性インデックスを計算します。

nu = getPassiveIndex(G,'input')
nu = 0.0250
rho = getPassiveIndex(G,'output')
rho = 0.2583

このシステムは入力と出力の両方で厳密に受動的です。

組み合わされた I/O 受動性インデックスを計算します。

tau = getPassiveIndex(G,'io')
tau = 0.0250

このシステムは非常に厳密に受動的でもあります。非常に厳密に受動的なシステムは、強正実でもあります。ナイキスト線図を調べるとこの裏付けになり、周波数応答が右半平面内に完全に収まっていることがわかります。

nyquistplot(G)

比較的小さい tau 値は、周波数応答が虚軸にどれだけ接近するかに反映されます。

複素係数をもつシステムでは、指定する fband によって、getPassiveIndex は負の周波数または正の周波数でのインデックスを返す場合があります。

複素数データをもつ状態空間モデルを読み込みます。

load compCoeffModel.mat

相対受動性インデックスとその周波数を 0.0001% の相対精度で計算します。また、fband = [0.1,1] と指定して、周波数範囲 [–1,–0.1] ∪ [0.1,1] でインデックスを計算します。

[R,FI] = getPassiveIndex(sys,1e-6,[0.1,1])
R = 3.0050
FI = -0.6518

この範囲で、sys は負の周波数値 –0.6518 rad/s で相対受動性インデックス 3.0050 に達します。passiveplot を使用してこの範囲のインデックスをプロットします。

opt = sectorplotoptions;
opt.FreqScale = 'Linear';
opt.IndexScale = 'Linear';
w = linspace(-1,1,100);
passiveplot(sys,w,opt)

ここで、周波数範囲 [–10,–1.5] ∪ [1.5,10] で相対受動性インデックスを計算します。これを行うには fband = [1.5,10] と指定します。

[R,FI] = getPassiveIndex(sys,1e-6,[1.5,10])
R = 2.4162
FI = 2.1707

この範囲で、sys は正の周波数値 2.1707 rad/s で相対受動性インデックス 2.4162 に達します。この範囲でインデックスをプロットして結果を確認します。

w = linspace(-10,10,1000);
passiveplot(sys,w,opt)

入力引数

すべて折りたたむ

受動性について解析するモデル。tf モデル、ss モデル、genss モデルなどの動的システム モデルとして指定します。入力数と出力数が等しい場合、G は MIMO にすることができます。G は連続または離散のどちらにすることもできます。G が調整可能なブロックまたは不確かさをもつブロックを含む一般化モデルの場合、getPassiveIndex は現在の G のノミナル値の受動性を評価します。

G がモデル配列の場合、getPassiveIndex は受動性インデックスを同じサイズの配列として返します。

index(k) = getPassivityIndex(G(:,:,k),___)

ここで、index は使用する入力引数に応じて RnurhotauDX のいずれかになります。

受動性を計算するカスタム方向。1 辺が 2*ny の対称正方行列として指定します。ここで、nyG の出力数です。

rhonu および tau インデックスはそれぞれ、対応する dQ 値をもつシステムの y/u 領域における特定の方向に対応します (これらの値の詳細については、dQout を参照してください)。この引数を使用して、この方向の独自の値を指定します。

計算する受動性インデックスの相対精度。既定では、許容誤差は 1% です。つまり、返される受動性インデックスは実際の受動性インデックスの 1% 以内です。

受動性インデックスを特定するための周波数範囲。0 ≤ fmin < fmax である [fmin,fmax] 形式の配列として指定します。fband を指定すると、getPassiveIndex では受動性インデックスの周波数領域の計算がその周波数範囲に制限されます。たとえば、相対受動性インデックス R が双一次変換されたシステム (I-G)(I+G)^-1 のピーク ゲインであるとします (最小位相が (I + G) の場合)。fband を指定すると、R は周波数帯域内のピーク ゲインになります。

複素係数をもつモデルでは、getPassiveIndex は、[–fmax,–fmin][fmin,fmax] の範囲で受動性インデックスを計算します。その結果、関数は負の周波数でのインデックスを返す場合があります。

周波数は rad/TimeUnit 単位で指定します。ここで、TimeUnit は動的システム モデル GTimeUnit プロパティです。

出力引数

すべて折りたたむ

相対受動性インデックス。スカラーまたは配列 (G が配列の場合) として返されます。

R が 1 より小さい場合、システム G は受動的です。

  • R < 1 は受動性の相対的な超過を示します。

  • R > 1 は受動性の相対的な不足を示します。

I + G が最小位相の場合、R は双一次変換されたシステム (I - G)(I + G)^-1 のピーク ゲインです。

受動性インデックスの概念の詳細については、受動性および受動性インデックスについてを参照してください。

入力受動性インデックス。スカラーまたは配列 (G が配列の場合) として返されます。nu は、以下の場合の ν の最大値として定義されます。

0Ty(t)Tu(t)dt>ν0Tu(t)Tu(t)dt,

すべての T > 0 について上記が成り立つとします。同様に、nu は以下の場合の ν の最大値です。

G(jω)+G(jω)H>2νI

(または離散時間の等価物)。nu > 0 の場合、システムは "入力で厳密に受動的" です。nu は入力フィードフォワード受動性 (IFP) インデックスとも呼ばれます。nu の値は、結果として得られるシステムが受動的になる最小フィードフォワード アクションです。

出力受動性インデックス。スカラーまたは配列 (G が配列の場合) として返されます。rho は、以下の場合の ρ の最大値として定義されます。

0Ty(t)Tu(t)dt>ρ0Ty(t)Ty(t)dt,

すべての T > 0 について上記が成り立つとします。rho > 0 の場合、システムは "出力で厳密に受動的" です。rho は出力フィードバック受動性 (OFP) インデックスとも呼ばれます。rho の値は、結果として得られるシステムが受動的になる最小フィードバック アクションです。

組み合わされた I/O 受動性インデックス。スカラーまたは配列 (G が配列の場合) として返されます。tau は、以下の場合の τ の最大値として定義されます。

0Ty(t)Tu(t)dt>τ0T(u(t)Tu(t)+y(t)Ty(t))dt,

すべての T > 0 について上記が成り立つとします。tau > 0 の場合、システムは "非常に厳密に受動的" です。

dQ で指定した方向の方向受動性インデックス。スカラーまたは配列 (G が配列の場合) として返されます。方向受動性インデックスは以下の場合の D の最大値です。

0Ty(t)Tu(t)dt>D0T((y(t)u(t))TdQ(y(t)u(t)))dt,

すべての T > 0 について上記が成り立つとします。rhonu および tau インデックスは dQ の特定の選択に対応します (出力引数 dQout を参照)。DX の計算には、ユーザー指定のカスタム dQ 値 dQ が使用されます。

返される受動性インデックスが得られた周波数。スカラーまたは配列 (G が配列の場合) として返されます。一般に、受動性インデックスは周波数によって異なります (passiveplot を参照)。各インデックス タイプの戻り値は、すべての周波数における最大値です。FI はこの値が発生している周波数で、rad/TimeUnit 単位で返されます。ここで、TimeUnitGTimeUnit プロパティです。

FI は複素係数をもつシステムに対して負になる場合があります。

受動性インデックスの計算に使用されたセクターの形状。行列として返されます。受動性インデックスの場合、Qout は次のようになります。

Qout = [zeros(ny),-1/2*eye(ny);-1/2*eye(ny),zeros(ny)]; 

ここで、nyG の出力数です。たとえば、SISO G の場合は以下のとおりです。

Qout = [ 0,  -0.5;
     -0.5, 0   ];

セクターの形状の詳細については、getSectorIndex を参照してください。

受動性が計算された方向。1 辺が 2*ny の正方行列として返されます。ここで、nyG の出力数です。dQout の戻り値は、計算する受動性インデックスの種類によって異なります。

  • nu — 入力受動性インデックスの場合、dQout は次のようになります。

    dQout = [zeros(ny),zeros(ny);zeros(ny),eye(ny)];

    たとえば、SISO システムの場合は dQout = [0,0;0,1] です。

  • rho — 出力受動性インデックスの場合、dQout は次のようになります。

    dQout = [eye(ny),zeros(ny);zeros(ny),zeros(ny)];

    たとえば、SISO システムの場合は dQout = [1,0;0,0] です。

  • tau — 組み合わされた I/O 受動性インデックスの場合、dQout は次のようになります。

    dQout = eye(2*ny);

    たとえば、SISO システムの場合は dQout = [1,0;0,1] です。

  • DXdQoutdQ 入力引数で指定したカスタム値です。

  • R — 相対受動性インデックスには方向は関係しないため、この場合、関数は dQout = [] を返します。

方向インデックスの詳細については、getSectorIndex を参照してください。

制限

  • getPassiveIndex(G,'output') は、次の状況が発生した場合に正しくない結果を返すことがあります。

    • G^-1 が非プロパーであり、ゲインが s = Inf または z = Inf で無限大である。

    • G^-1 の極が虚軸 (G が連続時間の場合) または単位円 (G が離散時間の場合) にある。

    この制限を回避するには、極と同じ数の零点をもち、安定した零点だけになるように、G に摂動を加えます。次の例では、G について、最初は getPassiveIndex から正しくない答えが返されます。

    G = tf([1 0],[1 0.2 1]);
    [rho,freq] = getPassiveIndex(G,'output')

    バイプロパーで安定した零点をもつように G に摂動を加えます。これにより、期待する答えが getPassiveIndex から返されるようになります。

    zpk(G+1e-4)
    [rho,freq] = getPassiveIndex(G+1e-4,'output');

参照

[1] Xia, M., P. Gahinet, N. Abroug, C. Buhr, and E. Laroche. “Sector Bounds in Stability Analysis and Control Design.” International Journal of Robust and Nonlinear Control 30, no. 18 (December 2020): 7857–82. https://doi.org/10.1002/rnc.5236.

バージョン履歴

R2016a で導入