最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

モデルの結合

この例では、単純な直列接続や並列接続から複雑なブロック線図に至るまで、LTI システムの相互接続をモデル化する方法を示します。

概要

Control System Toolbox™ には、LTI モデルのネットワーク構築を支援するためのさまざまな関数が用意されています。これらの関数には、以下のような関数が含まれます。

  • 直列および並列接続 (series および parallel)

  • フィードバック接続 (feedback および lft)

  • 入出力連結 ([ , ][ ; ]、および append)

  • 一般的なブロック線図構築 (connect)

上記の関数は、モデル表現のあらゆる組み合わせを処理できます。例示のために、以下の 2 つの SISO 伝達関数モデルを作成します。

H1 = tf(2,[1 3 0])
H1 =
 
      2
  ---------
  s^2 + 3 s
 
Continuous-time transfer function.

H2 = zpk([],-5,5)
H2 =
 
    5
  -----
  (s+5)
 
Continuous-time zero/pole/gain model.

直列接続

演算子 * または関数 series を使用して、以下のように LTI モデルを直列に接続します。

H = H2 * H1
H =
 
       10
  -------------
  s (s+5) (s+3)
 
Continuous-time zero/pole/gain model.

これは、次の関数と等価です。

H = series(H1,H2);

並列接続

演算子 + または関数 parallel を使用して、以下のように LTI モデルを並列に接続します。

H = H1 + H2
H =
 
  5 (s+0.7566) (s+2.643)
  ----------------------
      s (s+3) (s+5)
 
Continuous-time zero/pole/gain model.

これは、次の関数と等価です。

H = parallel(H1,H2);

フィードバック接続

標準のフィードバック構成は、以下のとおりです。

u から y への閉ループ伝達のモデルを構築するには、以下のように入力します。

H = feedback(H1,H2)
H =
 
              2 (s+5)
  --------------------------------
  (s+5.663) (s^2 + 2.337s + 1.766)
 
Continuous-time zero/pole/gain model.

関数 feedback は、既定の設定では負のフィードバックを前提としています。正のフィードバックを適用するには、以下の構文を使用します。

H = feedback(H1,H2,+1);

また、関数 lft を使用して、さらに一般的なフィードバック相互接続を以下のように構築することもできます。

入出力の連結

H1H2 という 2 つのモデルの入力を連結するには、以下のように入力します。

H = [ H1 , H2 ]
H =
 
  From input 1 to output:
     2
  -------
  s (s+3)
 
  From input 2 to output:
    5
  -----
  (s+5)
 
Continuous-time zero/pole/gain model.

結果として得られるモデルには、2 つの入力があり、以下の相互接続に対応しています。

同様に、以下のように入力すると H1H2 という出力を連結できます。

H = [ H1 ; H2 ]
H =
 
  From input to output...
          2
   1:  -------
       s (s+3)
 
         5
   2:  -----
       (s+5)
 
Continuous-time zero/pole/gain model.

結果として得られるモデル H には、2 つの出力と 1 つの入力があり、以下のブロック線図に相当します。

最後に、以下を使用して 2 つのモデルの入出力を追加します。

H = append(H1,H2)
H =
 
  From input 1 to output...
          2
   1:  -------
       s (s+3)
 
   2:  0
 
  From input 2 to output...
   1:  0
 
         5
   2:  -----
       (s+5)
 
Continuous-time zero/pole/gain model.

結果として得られるモデル H には、2 つの出力と 2 つの入力があり、以下のブロック線図に相当します。

基本的名 SISO モデルから、結合を使用して MIMO モデルを以下のように構築できます。

H = [H1 , -tf(10,[1 10]) ; 0 , H2 ]
H =
 
  From input 1 to output...
          2
   1:  -------
       s (s+3)
 
   2:  0
 
  From input 2 to output...
        -10
   1:  ------
       (s+10)
 
         5
   2:  -----
       (s+5)
 
Continuous-time zero/pole/gain model.

sigma(H), grid

ブロック線図からのモデル構築

ここまでに紹介した関数と演算を組み合わせると、簡単なブロック線図のモデルを構築できます。たとえば、以下のブロック線図に

ブロック FCGS の次のデータがあるとします。

s = tf('s');
F = 1/(s+1);
G = 100/(s^2+5*s+100);
C = 20*(s^2+s+60)/s/(s^2+40*s+400);
S = 10/(s+10);

閉ループ伝達関数 Tr から y まで以下のように計算できます。

T = F * feedback(G*C,S);
step(T), grid

さらに複雑なブロック線図では、関数 connect を使用すると、系統的かつ簡単な方法でブロック同士を配線で結合できます。関数 connect を使用するには、以下の手順に従います。

  • 加算ブロックも含め、ブロック線図内のすべてのブロックを定義する

  • すべてのブロックの入力チャネルと出力チャネルの名前付け

  • ブロック I/O のリストからブロック線図 I/O を選択します。

上記のブロック線図では、これらの手順は以下のようになります。

Sum1 = sumblk('e = r - y');
Sum2 = sumblk('u = uC + uF');

% Define block I/Os ("u" and "y" are shorthand for "InputName" and "OutputName")
F.u = 'r';   F.y = 'uF';
C.u = 'e';   C.y = 'uC';
G.u = 'u';   G.y = 'ym';
S.u = 'ym';  S.y = 'y';

% Compute transfer r -> ym
T = connect(F,C,G,S,Sum1,Sum2,'r','ym');
step(T), grid

実行の優先順位

異なるタイプのモデルを接続する場合、結果として得られるモデル タイプは、実行の優先順位によって決まります。

  FRD > SS > ZPK > TF > PID

この規則では、優先順位は、FRD が最も高く、続いて SS、ZPK、TF、そして PID は最も低くなります。たとえば、以下の直列接続では、

H1 = ss(-1,2,3,0);
H2 = tf(1,[1 0]);
H = H2 * H1;

H2 が自動的に状態空間表現に変換され、結果 H は以下の状態空間モデルとなります。

class(H)
ans =

    'ss'

SS および FRD 表現がシステムの相互接続に最も適しているため、すべての計算がこれら 2 つの表現のいずれかを使用して実行されるよう、少なくとも 1 つのモデルを SS または FRD に変換することをお勧めします。connect を使用する場合は例外であり、こうした変換が自動的に実行され、常にブロック線図の状態空間モデルまたは FRD モデルが返されます。