ドキュメンテーション センター

  • 評価版
  • 製品アップデート

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

ss

状態空間モデルの作成、状態空間モデルへの変換

構文

sys = ss(a,b,c,d)
sys = ss(a,b,c,d,Ts)
sys = ss(d)
sys = ss(a,b,c,d,ltisys)
sys_ss = ss(sys)
sys_ss = ss(sys,'minimal')
sys_ss = ss(sys,'explicit')
sys_ss = ss(sys, 'measured')
sys_ss = ss(sys, 'noise')
sys_ss = ss(sys, 'augmented')

説明

ss を使用して、実数値または複素数値の行列をもつ状態空間モデル (ss モデル オブジェクト) を作成するか、動的システム モデルを状態空間モデル形式に変換します。また、ss を使用して一般化状態空間 (genss) モデルを作成します。

状態空間モデルの作成

sys = ss(a,b,c,d) は、連続時間状態空間モデルを表現する状態空間モデル オブジェクトを作成します。

Nx の状態、Ny の出力、および Nu の入力をもったモデルに対して、

  • a は、NxNx 列の実数値または複素数値の行列

  • b は、NxNu 列の実数値または複素数値の行列

  • c は、NyNx 列の実数値または複素数値の行列

  • d は、NyNu 列の実数値または複素数値の行列

D = 0 を設定するには、次元とは無関係に d をスカラー 0 (ゼロ) に設定してください。

sys = ss(a,b,c,d,Ts) は、次の離散時間モデルを作成します。

サンプル時間は Ts (秒単位) です。サンプル時間を未指定のままにするには、Ts = -1 または Ts = [] を設定します。

sys = ss(d) は、静的ゲイン行列 D を指定し、次のものと同等です。

sys = ss([],[],[],d)

sys = ss(a,b,c,d,ltisys) は、モデル ltisys (サンプル時間も含む) から継承したプロパティを備えた状態空間モデルを作成します。

これまで説明したどの構文にも、次のプロパティ名/プロパティ値の組み合わせを続けることができます。

'PropertyName',PropertyValue

各組み合わせは、入力名やモデル履歴についての注釈など、モデルの特定のプロパティを指定します。使用可能な ss モデル オブジェクト プロパティについては、「プロパティ」を参照してください。

以下の式を考えます。

sys = ss(a,b,c,d,'Property1',Value1,...,'PropertyN',ValueN)

これは、次のコマンドのシーケンスと同等です。

sys = ss(a,b,c,d)
set(sys,'Property1',Value1,...,'PropertyN',ValueN)

状態空間への変換

sys_ss = ss(sys) は、動的システム モデル sys を状態空間形式に変換します。出力 sys_ss は、同等の状態空間モデル (ss オブジェクト) です。この操作を状態空間実現と呼びます。

sys_ss = ss(sys,'minimal') は、状態が制御可能または観測可能な状態空間実現を生成します。状態空間実現は、sys_ss = minreal(ss(sys)) と同等です。

sys_ss = ss(sys,'explicit') は動的システム モデル sys の明示的な実現 (E = I) を計算します。sys がプロパーでない場合、関数 ss はエラーを返します。

    メモ:   SISO の場合、状態空間への変換は、一意的には定義されません。また、MIMO の場合には、実現が最小になることも保証されません。詳細は、「推奨される使用表現」を参照してください。

同定されたモデルの変換

同定されたモデルは、形式 の入出力式によって表されます。ここで、u(t) は一連の測定された入力チャンネルで、e(t) はノイズ チャンネルを表します。If Λ = LL' はノイズ e(t) の共分散を表し、 の場合、この式は と記述することもできます。

sys_ss = ss(sys) または sys_ss = ss(sys, 'measured') は、同定された線形モデルの測定成分を状態空間形式に変換します。sys はタイプ idssidprocidtfidpoly または idgrey のモデルです。sys_ss は u と y との関係を表します。

sys_ss = ss(sys, 'noise') は、同定された線形モデルのノイズ成分を状態空間形式に変換します。これは、ノイズ入力 v(t) と出力 y_noise = HL v(t) の関係を表します。ノイズ入力チャンネルは、InputGroup 'Noise' に属します。ノイズ入力チャンネルの名前は v@yname であり、ここで yname は対応する出力チャンネルの名前です。sys_ss には出力と同じ数の入力があります。

sys_ss = ss(sys, 'augmented') は、測定されたダイナミクスとノイズ ダイナミクスの両方を状態空間モデルに変換します。sys_ss には、最初の nu 入力がチャンネル u(t) を表し、残りはチャンネル別にノイズ チャンネル v(t) を表す ny+nu 入力があります。sys_ss.InputGroup には 'measured''noise' の 2 つの入力グループがあります。sys_ss.InputGroup.Measured は 1:nu に設定され、sys_ss.InputGroup.Noise は nu+1:nu+ny に設定されます。sys_ss は式 を表します。

    ヒント:   同定された非線形モデルは状態空間形式に変換できません。linearizelinapp などの線形近似関数を使用します。

一般化状態空間モデルの作成

次の構文を使用して、

gensys = ss(A,B,C,D)

1 つ以上の行列 ABCD が調整可能な realp または genmat モデルであるときに一般化状態空間 (genss) モデルを作成できます。一般化状態空間モデルの詳細は、「調整可能な係数をもつモデル」を参照してください。

プロパティ

ss オブジェクトには次のプロパティがあります。

a,b,c,d,e

状態空間行列。

  • a — 状態行列 A。状態と同じ数の行をもつ二乗実数または複素数値の行列。

  • b — 状態空間への入力行列 B。状態と同じ数の行と入力と同じ数の列をもつ実数または複素数値の行列。

  • c — 状態空間からの出力行列 C。出力と同じ数の行と状態と同じ数の列をもつ実数または複素数値の行列。

  • d — フィードスルー行列 D。出力と同じ数の行と入力と同じ数の列をもつ実数または複素数値の行列。

  • e — 暗黙の (記述子) 状態空間モデル用の行列 E。既定では e = [] は状態式が明示的であることを意味します。暗黙の状態式 E dx/dt = Ax + Bu を指定するには、このプロパティを a と同じサイズの正方行列をに設定します。記述子状態空間モデルの作成の詳細は、dss を参照してください。

Scaled

スケーリングが有効であるか無効であるかを示す論理値。

Scaled = 0 (偽) の場合、状態空間モデルで動作するほとんどの数値アルゴリズムは、数値の精度を向上させるために状態ベクトルを自動的に再スケーリングします。Scaled = 1 (真) を設定することで、そのような自動スケーリングを無効にすることができます。スケーリングの詳細は、prescale を参照してください。

既定値: 0 (偽)

StateName

状態名。1 次モデルでは、StateName を文字列に設定します。2 つ以上の状態を伴うモデルの場合は、StateName を文字列のセル配列に設定します。名前のない状態に空文字列 '' を使用します。

既定値: すべての状態に対して空の文字列 ''

StateUnit

状態単位。各状態が表現される単位を記録するために StateUnit を使用します。1 次モデルでは、StateUnit を文字列に設定します。2 つ以上の状態をもつモデルの場合は、StateUnit を文字列のセル配列に設定します。StateUnit はシステム動作には影響しません。

既定値: すべての状態に対して空の文字列 ''

InternalDelay

内部遅延を格納するベクトル。

内部遅延は、たとえば、システムで遅延のあるフィードバック ループを閉じるときや、遅延システムを順番にまたは並列で接続するときに生じます。内部遅延の詳細は、『Control System Toolbox™ ユーザー ガイド』の「むだ時間のある閉フィードバック ループ」を参照してください。

連続時間モデルの場合、内部遅延はモデルの TimeUnit プロパティで指定された時間単位で表現されます。離散時間モデルの場合、内部遅延はサンプリング周期 Ts の整数倍として表現されます。たとえば InternalDelay = 3 は 3 サンプリング周期の遅延を意味します。

内部遅延の値は変更できます。ただし、sys.InternalDelay のエントリの数は、モデルの構造に組み込まれているので変更できません。

InputDelay

入力遅延。InputDelay は、各入力チャンネル用のむだ時間を指定する数値ベクトルです。連続時間システムの場合、TimeUnit プロパティに格納された時間単位で入力遅延を指定します。離散時間システムの場合、サンプリング周期 Ts の整数倍で入力遅延を指定します。たとえば InputDelay = 3 は 3 サンプリング周期の遅延を意味します。

Nu 入力のあるシステムの場合、InputDelayNu 行 1 列のベクトルに設定します。このベクトルの各エントリは、対応する入力チャンネル用の入力遅延を表す数値です。InputDelay をスカラー値に設定して、同一の遅延をすべてのチャンネルに適用することもできます。

既定値: すべての入力チャンネルに対して 0

OutputDelay

出力遅延。OutputDelay は、各出力チャンネル用のむだ時間を指定する数値ベクトルです。連続時間システムの場合、TimeUnit プロパティに格納された時間単位で出力遅延を指定します。離散時間システムの場合、サンプリング周期 Ts の整数倍で出力遅延を指定します。たとえば OutputDelay = 3 は 3 サンプリング周期の遅延を意味します。

Ny 出力のあるシステムの場合、OutputDelayNy 行 1 列のベクトルに設定します。ここで、それぞれのエントリは、対応する出力チャンネル用の出力遅延を表す数値です。OutputDelay をスカラー値に設定して、同一の遅延をすべてのチャンネルに適用することもできます。

既定値: すべての出力チャンネルに対して 0

Ts

サンプリング時間。連続時間モデルの場合、Ts = 0。離散時間モデルの場合、Ts はサンプリング周期を表す正のスカラーです。この値は、モデルの TimeUnit プロパティで指定される単位で表されます。指定のないサンプリング時間を伴う離散時間モデルを示すには、Ts = -1 と設定します。

このプロパティを変更してもモデルの離散化やリサンプルは行われません。c2dd2c を使用して、連続時間表現と離散時間表現の間の変換を行います。d2d を使用して、離散時間システムのサンプリング時間を変更します。

既定値: 0 (連続時間)

TimeUnit

時間変数の単位を表す文字列。連続時間モデルの場合、このプロパティはモデルにおける任意のむだ時間を表します。離散時間モデルの場合はサンプリング時間 Ts を表します。以下のいずれかの値を使用します。

  • 'nanoseconds'

  • 'microseconds'

  • 'milliseconds'

  • 'seconds'

  • 'minutes'

  • 'hours'

  • 'days'

  • 'weeks'

  • 'months'

  • 'years'

このプロパティを変更すると、システム全体の動作が変更されます。chgTimeUnit を使用して、システム動作を変更せずに時間単位を変換します。

既定値: 'seconds'

InputName

入力チャンネル名。単入力モデルでは、InputName を文字列に設定します。多入力モデルの場合は、InputName を文字列のセル配列に設定します。

または、自動的なベクトル拡張を使用して多入力モデルの入力名を割り当てます。たとえば、sys が 2 入力モデルである場合は、以下のようになります。

sys.InputName = 'controls';

入力名は自動的に {'controls(1)';'controls(2)'} へと拡張されます。

省略形表記 u を使用して、InputName プロパティを参照できます。たとえば、sys.usys.InputName と同じです。

以下を含めて、入力チャンネル名はいくつかの用途をもちます。

  • モデル表示とプロット上のチャンネルの識別

  • MIMO システムのサブシステムの抽出

  • モデル相互接続時における接続点の指定

既定値: すべての入力チャンネルに対して空の文字列 ''

InputUnit

入力チャンネル単位。InputUnit を使用して入力信号単位を記録します。単入力モデルの場合、InputUnit を文字列に設定します。多入力モデルの場合は、InputUnit を文字列のセル配列に設定します。InputUnit はシステム動作には影響しません。

既定値: すべての入力チャンネルに対して空の文字列 ''

InputGroup

入力チャンネル グループ。InputGroup プロパティによって、MIMO システムの入力チャンネルをグループに割り当て、各グループを名前で参照することができます。入力グループを構造体として指定します。この構造体においてフィールド名はグループ名であり、フィールド値は各グループに属する入力チャンネルです。以下に例を示します。

sys.InputGroup.controls = [1 2];
sys.InputGroup.noise = [3 5];

これは、入力チャンネル 1、2 および 3、5 をそれぞれ含む controls および noise という名前の入力グループを作成します。その後、以下を使用して controls 入力からすべての出力にサブシステムを抽出できます。

sys(:,'controls')

既定値: フィールドのない構造体

OutputName

出力チャンネル名。単出力モデルでは、OutputName を文字列に設定します。多出力モデルの場合は、OutputName を文字列のセル配列に設定します。

または、自動的なベクトル拡張を使用して多出力モデルの出力名を割り当てます。たとえば、sys が 2 出力力モデルである場合は、以下のようになります。

sys.OutputName = 'measurements';

出力名は自動的に {'measurements(1)';'measurements(2)'} へと拡張されます。

省略形表記 y を使用して、OutputName プロパティを参照できます。たとえば、sys.ysys.OutputName と同じです。

以下を含めて、出力チャンネル名はいくつかの用途をもちます。

  • モデル表示とプロット上のチャンネルの識別

  • MIMO システムのサブシステムの抽出

  • モデル相互接続時における接続点の指定

既定値: すべての入力チャンネルに対して空の文字列 ''

OutputUnit

出力チャンネル単位。OutputUnit を使用して出力信号単位を記録します。単出力モデルの場合、OutputUnit を文字列に設定します。多出力モデルの場合は、OutputUnit を文字列のセル配列に設定します。OutputUnit はシステム動作には影響しません。

既定値: すべての入力チャンネルに対して空の文字列 ''

OutputGroup

出力チャンネル グループ。OutputGroup プロパティによって、MIMO システムの出力チャンネルをグループに割り当て、各グループを名前で参照できます。出力グループを構造体として指定します。この構造体内においてフィールド名はグループ名であり、フィールド値は各グループに属する出力チャンネルです。以下に例を示します。

sys.OutputGroup.temperature = [1];
sys.InputGroup.measurement = [3 5];

これは、出力チャンネル 1 および 3、5 をそれぞれ含む temperature および measurement という名前の出力グループを作成します。その後、以下を使用してすべての入力から measurement 出力にサブシステムを抽出できます。

sys('measurement',:)

既定値: フィールドのない構造体

Name

システム名。システムをラベル付けする文字列に Name を設定します。

既定値: ''

Notes

システムに関連付ける任意のテキスト。文字列または文字列のセル配列のいずれかに Notes を設定します。

既定値: {}

UserData

システムに関連付ける任意のデータ型。UserData を任意の MATLAB® データ型に設定します。

既定値: []

SamplingGrid

モデル配列のサンプリング グリッド。データ構造として指定されます。

1 つまたは複数の独立変数をサンプリングすることによって得られるモデル配列の場合、このプロパティは配列内の各モデルに関連付けられた変数値を追跡します。 この情報はモデル配列を表示またはプロットすると表示されます。この情報を使用して、結果を独立変数まで遡ります。

データ構造のフィールド名をサンプリング変数の名前に設定します。フィールドの値を、配列内の各モデルに関連付けられているサンプリングされた変数の値に設定します。すべてのサンプリング変数は数値でスカラー値でなければならず、サンプル値のすべての配列はモデル配列の次元に一致しなければなりません。

たとえば、t = 0:10 の各時点で線形時変システムのスナップショットを記録することにより、線形モデルの 11 行 1 列の配列 sysarr を作成するとします。次のコードは線形モデルでの時間サンプルを格納します。

 sysarr.SamplingGrid = struct('time',0:10)

同様に、2 つの変数 zetaw を個別にサンプリングすることにより、6 行 9 列のモデル配列 M を作成するとします。次のコードは (zeta,w) の値を M に付加します。

[zeta,w] = ndgrid(<6 values of zeta>,<9 values of w>)
M.SamplingGrid = struct('zeta',zeta,'w',w)

M を表示する際、配列の各エントリは対応する zetaw の値を取り込みます。

M
M(:,:,1,1) [zeta=0.3, w=5] =
 
        25
  --------------
  s^2 + 3 s + 25
 

M(:,:,2,1) [zeta=0.35, w=5] =
 
         25
  ----------------
  s^2 + 3.5 s + 25
 
...

既定値: []

例 1

離散時間状態空間モデル

サンプル時間が 0.25 s で次の状態空間行列をもつ状態空間モデルを作成します。

これを実行するには、次のコマンドを入力します。

A = [0 1;-5 -2];
B = [0;3];
C = [0 1];
D = 0;
sys = ss(A,B,C,D,0.25);

最後の引数がサンプル時間を設定します。

例 2

カスタムの状態と入力名をもつ離散時間状態空間モデル

行列 A,B,C,D とサンプル時間 0.05 秒をもつ離散時間モデルを作成します。

sys = ss(A,B,C,D,0.05,'statename',{'position' 'velocity'},...
                          'inputname','force',...
                          'notes','Created 01/16/11');

このモデルには、positionvelocity という 2 つの状態、および force という 1 つの入力があります (A,B,C,D の次元は、この状態と入力の数と一致しているはずです)。最後に、モデル作成日と共に注釈が追加されます。

例 3

伝達関数モデルを状態空間モデルに変換

伝達関数モデルを状態空間モデルに変換します。

それには、次のように入力します。

H = [tf([1 1],[1 3 3 2]) ; tf([1 0 3],[1 1 1])];
sys = ss(H);
size(sys)
State-space model with 2 outputs, 1 input, and 5 states.

状態の数は、H(s) の SISO エントリの累積次数に等しくなります。

H(s) の最小実現を得るには、次のように入力します。

sys = ss(H,'min');
size(sys)
State-space model with 2 outputs, 1 input, and 3 states.

結果として得られる状態空間モデルの次数は 3 です。これは、H(s) を表現するために必要とされる最小の状態数です。この状態数は、H(s) を1 次系と 2 次系の積として因数分解することによって確認することができます。

例 4

記述子状態空間モデル

記述子状態空間モデルを作成します。

a = [2 -4; 4 2];
b = [-1; 0.5];
c = [-0.5, -2];
d = [-1];
e = [1 0; -3 0.5];
% Create a descriptor state-space model.
sys1 = dss(a,b,c,d,e); 

% Compute an explicit realization.
sys2 = ss(sys1,'explicit')

これらのコマンドは、以下の結果を作成します。

a = 
        x1   x2
   x1    2   -4
   x2   20  -20
 
b = 
       u1
   x1  -1
   x2  -5
 
c = 
         x1    x2
   y1  -0.5    -2
 
d = 
       u1
   y1  -1
 
Continuous-time model.

結果は、明示的な状態空間モデル (E = I) になります。ボード線図は、sys1sys2 が等価であることを示しています。

bode(sys1,sys2)

例 5

一般化状態空間モデル

この例は、固定パラメーターと調整可能なパラメーターの両方をもつ状態空間 (genss) モデルを作成する方法を示します。

次の状態空間行列をもつ状態空間モデルを作成します。

ここで、a と b は調整可能なパラメーターであり、その初期値はそれぞれ –1 と 3 です。

  1. realp を使用して調整可能なパラメーターを作成します。

     a = realp('a',-1);
     b = realp('b',3);
  2. ab の代数式を使って一般化行列を定義します。

    A = [1 a+b;0 a*b]

    A は、Blocks プロパティに ab を含む一般化行列です。ab の初期値からの A の初期値は M = [1 2;0 -3] です。

  3. 固定値状態空間行列を作成します。

    B = [-3.0;1.5];
    C = [0.3 0];
    D = 0;
  4. ss を使用して状態空間モデルを作成します。

    sys = ss(A,B,C,D)

sys は、調整可能なパラメーター a および b を含む一般化 LTI モデル (genss) です。

例 6

同定された多項式モデルの測定成分とノイズ成分を 2 つの別々の状態空間モデルに抽出します。前者 (測定された成分) はプラント モデルとなることができ、後者は制御システム設計の外乱モデルとなることができます。

load icEngine
z = iddata(y,u,0.04);
sys = ssest(z, 3);

sysMeas = ss(sys, 'measured')
sysNoise = ss(sys, 'noise')

あるいは、ss(sys) を使用して測定された成分を抽出することもできます。

詳細

すべて展開する

アルゴリズム

TF から SS へのモデル変換の場合、ss(sys_tf) は可制御正準型の修正版を返します。tf2ss に類似したアルゴリズムが使用されますが、状態ベクトルのスケールがさらに変更されます。これは、状態行列 A の数値範囲を圧縮して、それ以降の計算における数値を改善するためです。

ZPK から SS への変換の場合、ss(sys_zpk) は直接型 II 構造を使用します。これは、信号処理テキストで定義されます。詳細は、『Discrete-Time Signal Processing』(Oppenheim と Schafer の共著) を参照してください。

たとえば、次のコードで Asys.a は対角状態変換により異なるものになります。

n=[1 1];
d=[1 1 10];
[A,B,C,D]=tf2ss(n,d);
sys=ss(tf(n,d));
A

A =

    -1   -10
     1     0

sys.a

ans =
    -1    -5
     2     0

詳細は、「balance」を参照してください。

参考

| | | | | |

チュートリアル

この情報は役に立ちましたか?