ltvss
説明
ltvss は、時間と共にダイナミクスが変動する線形状態空間モデルを表すために使用します。
ltvss を使用して連続時間または離散時間の線形時変状態空間モデルを作成できます。連続時間の場合、ltvss モデルは次の状態空間方程式で記述されます。
ここで、A(t)、B(t)、C(t)、D(t)、E(t) は時変状態空間行列、δ0(t)、x0(t)、u0(t)、y0(t) はそれぞれ時間依存の微分、状態、入力、出力のオフセットです。
離散時間の場合、ltvss モデルは次の状態空間方程式で記述されます。
ここで、整数インデックス k はサンプリング周期 Ts の数をカウントします。
ltvss オブジェクトを使用して以下をモデル化できます。
- 係数が時間によって変化する線形システム。 
- 特定の軌跡に沿って動作する非線形システム。例については、2 リンク ロボットの LTV モデルを参照してください。 
- 時間によって変化する定常状態条件の近くで動作する非線形システム。 
ltvss は、ダイナミクスが MATLAB® 関数 ("データ関数") で記述される LTV モデルを作成する場合に使用します。LTI のスナップショットを時間の関数として内挿する LTV モデルを作成する場合は ssInterpolant を使用します。ltvss オブジェクトに適用できる関数と演算については、LPV モデルと LTV モデルを参照してください。
作成
構文
説明
ltvSys = ltvss(DataFcn)DataFcn は、"データ関数" の名前またはハンドルです。これは、与えられた t または k の値について行列とオフセットを計算するユーザー定義の MATLAB 関数です。
ltvSys = ltvss(___,Name=Value)
入力引数
行列とオフセットを計算するユーザー定義の MATLAB 関数。関数名 (文字ベクトルまたは string) または関数ハンドルとして指定します。データ関数は次の形式でなければなりません。
- 連続時間 — 
- 離散時間 — 
Delay 引数は、それぞれ入力チャネルと出力チャネルの遅延を指定する Input と Output のフィールドをもつ構造体です。 (R2024a 以降)
データ関数の定義の詳細については、データ関数を参照してください。
この入力はプロパティ DataFunction の値を設定します。
スカラーとして指定されたサンプル時間。詳細については、Ts プロパティを参照してください。
時間のテスト値。スカラーとして指定します。オブジェクトでは DataFcn を tcheck で評価して有効であるかどうかを確認し、状態、入力、および出力の数を取得します。既定では、ltvss は tcheck = 0 を使用します。
プロパティ
モデルのデータを計算するデータ関数。関数ハンドルとして指定します。データ関数は次の形式でなければなりません。
- 連続時間 - [A,B,C,D,E,dx0,x0,u0,y0,Delay] = DataFcn(t) 
- 離散時間 - [A,B,C,D,E,dx0,x0,u0,y0,Delay] = DataFcn(k) - ここで、入力 - kはサンプリング周期- Tsの数をカウントする整数インデックスです。絶対時間は- t=- k*Tsで与えられます。
追加の入力引数を渡すには、次のように無名関数を使用します。
DataFcn = @(t) myFunction(t,arg1,arg2,...)
A、B、C、D 以外の出力引数については、t の値にない場合、いずれも [] に設定できます。
詳細については、データ関数を参照してください。
状態名。次のいずれかとして指定します。
- 文字ベクトル — - 'velocity'などの 1 次モデルの場合。
- 文字ベクトルの cell 配列 — 2 つ以上の状態をもつモデルの場合。 
StateName は、既定ではすべての状態について空 ' ' です。
線形化で状態ブロック パスを管理しやすくするための状態パス。次のいずれかとして指定します。
- 文字ベクトル — 1 次モデルの場合 
- 文字ベクトルの cell 配列 — 2 つ以上の状態をもつモデルの場合 
StatePath は、既定ではすべての状態について空 ' ' です。
状態単位。以下のいずれかとして指定します。
- 文字ベクトル — - 'm/s'などの 1 次モデルの場合
- 文字ベクトルの cell 配列 — 2 つ以上の状態をもつモデルの場合 
StateUnit を使用して、各状態の単位を追跡します。StateUnit はシステムの動作に影響しません。StateUnit は、既定ではすべての状態について空 ' ' です。
時間変数の単位。次のいずれかとして指定します。
- 'nanoseconds'
- 'microseconds'
- 'milliseconds'
- 'seconds'
- 'minutes'
- 'hours'
- 'days'
- 'weeks'
- 'months'
- 'years'
TimeUnit の変更は他のプロパティには影響しませんが、システム全体の動作が変わります。chgTimeUnit を使用して、システム動作を変更せずに時間単位を変換します。
入力チャネル名。以下のいずれかとして指定します。
- 文字ベクトル (単入力モデルの場合)。 
- 文字ベクトルの cell 配列 (多入力モデルの場合)。 
- ''(いずれの入力チャネルにも名前を指定しない場合)。
あるいは、自動的なベクトル拡張を使用して多入力モデルの入力名を割り当てることもできます。たとえば、sys が 2 入力モデルである場合は、以下のように入力します。
sys.InputName = 'controls';入力名は自動的に {'controls(1)';'controls(2)'} へと拡張されます。
省略形表記 u を使用して、InputName プロパティを参照できます。たとえば、sys.u は sys.InputName と同じです。
InputName の使用目的は次のとおりです。
- モデル表示とプロット上のチャネルの識別 
- MIMO システムのサブシステムの抽出 
- モデル相互接続時における接続点の指定 
入力チャネル単位。以下のいずれかとして指定します。
- 文字ベクトル (単入力モデルの場合)。 
- 文字ベクトルの cell 配列 (多入力モデルの場合)。 
- ''(いずれの入力チャネルにも単位を指定しない場合)。
InputUnit を使用して入力信号の単位を指定します。InputUnit はシステムの動作に影響しません。
入力チャネル グループ。構造体として指定します。InputGroup プロパティを使用して、MIMO システムの入力チャネルをグループに割り当て、各グループを名前で参照します。InputGroup のフィールド名はグループ名であり、フィールドの値は各グループの入力チャネルです。たとえば、入力チャネル 1 と 2、および 3 と 5 をそれぞれ含む、controls および noise という名前の入力グループを作成するには、次のように入力します。
sys.InputGroup.controls = [1 2]; sys.InputGroup.noise = [3 5];
その後、以下を使用して controls 入力からすべての出力にサブシステムを抽出できます。
sys(:,'controls')既定では、InputGroup はフィールドのない構造体です。
出力チャネル名。次のいずれかとして指定されます。
- 文字ベクトル (単出力モデルの場合)。 
- 文字ベクトルの cell 配列 (多出力モデルの場合)。 
- ''(いずれの出力チャネルにも名前を指定しない場合)。
あるいは、自動的なベクトル拡張を使用して多出力モデルの出力名を割り当てることもできます。たとえば、sys が 2 出力モデルである場合は、以下のように入力します。
sys.OutputName = 'measurements';出力名は自動的に {'measurements(1)';'measurements(2)'} へと拡張されます。
省略形表記 y を使用して OutputName プロパティを参照することもできます。たとえば、sys.y は sys.OutputName と同じです。
OutputName の使用目的は次のとおりです。
- モデル表示とプロット上のチャネルの識別 
- MIMO システムのサブシステムの抽出 
- モデル相互接続時における接続点の指定 
出力チャネル単位。次のいずれかとして指定されます。
- 文字ベクトル (単出力モデルの場合)。 
- 文字ベクトルの cell 配列 (多出力モデルの場合)。 
- ''(いずれの出力チャネルにも単位を指定しない場合)。
OutputUnit を使用して出力信号の単位を指定します。OutputUnit はシステムの動作に影響しません。
出力チャネル グループ。構造体として指定します。OutputGroup を使用して、MIMO システムの出力チャネルをグループに割り当て、各グループを名前で参照します。OutputGroup のフィールド名はグループ名であり、フィールドの値は各グループの出力チャネルです。たとえば、出力チャネル 1、および 3 と 5 をそれぞれ含む、temperature および measurement という名前の出力グループを作成します。
sys.OutputGroup.temperature = [1]; sys.OutputGroup.measurement = [3 5];
その後、以下を使用してすべての入力から measurement 出力にサブシステムを抽出できます。
sys('measurement',:)既定では、OutputGroup はフィールドのない構造体です。
システム名。文字ベクトルとして指定します。たとえば、'system_1' とします。
システムに関連付けるユーザー指定のテキスト。文字ベクトルまたは文字ベクトルの cell 配列として指定します。たとえば、'System is MIMO' とします。
システムに関連付けるユーザー指定のデータ。任意の MATLAB データ型として指定します。
オブジェクト関数
例
連続時間 SISO 線形時変モデルを作成します。
この例では 1 次モデルを使用します。行列とオフセットは次によって与えられます。
, , , ,
.
これらの行列とオフセットは、この例で用意されているデータ関数 ltvssDataFcn.m で定義されています。
LTV モデルを作成します。
ltvSys = ltvss(@ltvssDataFcn)
Continuous-time state-space LTV model with 1 outputs, 1 inputs, and 1 states. Model Properties
データ関数を表示します。
type ltvssDataFcn.mfunction [A,B,C,D,E,dx0,x0,u0,y0,Delays] = ltvssDataFcn(t) % SISO, first order A = -(1+0.5*sin(t)); B = 1; C = 1; D = 0; E = []; dx0 = []; x0 = []; u0 = []; y0 = 0.1*sin(5*t); Delays = [];
離散時間線形時変モデルを作成します。
この例では、行列とオフセットが次のように定義されたモデルを使用します。
これらの行列とオフセットは、この例で用意されているデータ関数 ltvFcnDiscrete.m で定義されています。
プロパティを指定し、LTV モデルを作成します。
Ts = 0.01; DataFcn = @ltvFcnDiscrete; ltvSys = ltvss(DataFcn,Ts)
Discrete-time state-space LTV model with 1 outputs, 1 inputs, and 1 states. Model Properties
ドット表記を使用してモデルの追加のプロパティを設定できます。
ltvSys.InputName = 'u'; ltvSys.OutputName = 'y';
データ関数を表示します。
type ltvFcnDiscrete.mfunction [A,B,C,D,E,dx0,x0,u0,y0,Delays] = ltvFcnDiscrete(k) A = sin(0.1*k); B = 1; C = 1; D = 0; E = []; dx0 = []; x0 = []; u0 = []; y0 = 0.1*sin(k); Delays = [];
この例では、ltvssDataFcn.m により、MIMO システムの行列とオフセットを定義します。
LTV モデルを作成します。
ltvSys = ltvss(@ltvssDataFcn);
t = 0 秒から t = 10 秒まで、任意の入力に対するこのモデルの応答をシミュレートします。
t = (0:.01:10)'; u = sin(0.2*t); x0 = 2;
応答をシミュレートしてプロットします。
[y,~,x] = lsim(ltvSys,u,t,x0); plot(t,y)

次に、モデルのステップ応答とインパルス応答をシミュレートします。
RespConfig を使用してオプション セットを作成し、初期オフセットと状態値を指定します。
respOpt = RespConfig(InitialState=x0,Delay=1);
ステップ応答を計算します。
step(ltvSys,t,respOpt)

インパルス応答を計算します。
impulse(ltvSys,t,respOpt)

データ関数を表示します。
type ltvssDataFcn.mfunction [A,B,C,D,E,dx0,x0,u0,y0,Delays] = ltvssDataFcn(t) % SISO, first order A = -(1+0.5*sin(t)); B = 1; C = 1; D = 0; E = []; dx0 = []; x0 = []; u0 = []; y0 = 0.1*sin(5*t); Delays = [];
R2024a 以降
この例は、固定と可変の入力遅延と出力遅延を含む線形時変モデルを作成する方法を示しています。
この例では、行列、オフセット、および遅延が次のデータ関数で定義されたモデルを使用します。
function [A,B,C,D,E,dx0,x0,u0,y0,Delays] = ltvDataFcnDelay(t) A = [-2 1;1 -0.5*(2+sin(10*t))]; B = [1 cos(t);sin(5*t) 0]; C = [1,2*cos(3*t);-1 3;sqrt(t) 0]; D = [0 0;-1 1;0 0.5*sin(t)]; E = []; dx0 = [cos(10*t)/(1+0.1*t);0]; x0 = [0;sqrt(t)/(1+0.1*t)]; u0 = [sin(10*t);1]; y0 = [1/(1+t);-1;cos(3*t)]; Delays.Input = [NaN;abs(cos(0.3*t))]; Delays.Output = [1.7;NaN;abs(sin(0.5*t))]; end
遅延の引数は、それぞれ入力チャネルと出力チャネルに対応する遅延を指定する Input と Output のフィールドをもつ構造体です。このデータ関数では、遅延が次のように定義されます。 
- 1 番目の入力チャネルは常に遅延なし、2 番目の入力チャネルは 秒の可変の遅延。 
- 1 番目の出力チャネルは 1.7 秒の固定の遅延、2 番目の出力チャネルは遅延なし、3 番目の出力チャネルは 秒の可変の遅延。 
LTV モデルを作成します。
ltvsysD = ltvss(@ltvDataFcnDelay)
Continuous-time state-space LTV model with 3 outputs, 2 inputs, and 2 states. Model Properties
指定した遅延はソフトウェアで管理され、サンプリングなどの操作を実行するときに伝播されます。
モデルを 2 つの時間の値でサンプリングします。
t = [3,5]; sys = psample(ltvsysD,t)
sys(:,:,1,1) [Time=3] =
 
  A = 
           x1      x2
   x1      -2       1
   x2       1  -0.506
 
  B = 
           u1      u2
   x1       1   -0.99
   x2  0.6503       0
 
  C = 
           x1      x2
   y1       1  -1.822
   y2      -1       3
   y3   1.732       0
 
  D = 
            u1       u2
   y1        0        0
   y2       -1        1
   y3        0  0.07056
 
  Input delays (seconds): 0  0.622 
  Output delays (seconds): 1.7  0  0.997 
 
sys(:,:,1,2) [Time=5] =
 
  A = 
            x1       x2
   x1       -2        1
   x2        1  -0.8688
 
  B = 
            u1       u2
   x1        1   0.2837
   x2  -0.1324        0
 
  C = 
           x1      x2
   y1       1  -1.519
   y2      -1       3
   y3   2.236       0
 
  D = 
            u1       u2
   y1        0        0
   y2       -1        1
   y3        0  -0.4795
 
  Input delays (seconds): 0  0.0707 
  Output delays (seconds): 1.7  0  0.598 
 
1x2 array of continuous-time state-space models.
Model Properties
サンプリングした LTV モデルに、データ関数で定義された固定の遅延と時間と共に変化する遅延が含まれています。
バージョン履歴
R2023a で導入データ関数の Delay 引数は、固定または可変の遅延を指定する場合に使用します。Delay 引数は、それぞれ入力チャネルと出力チャネルの遅延を指定する Input と Output のフィールドをもつ構造体です。Delay.Input と Delay.Output は、それぞれ入力チャネルと出力チャネルの数に等しい長さのベクトルに設定します。特定のチャネルに常に遅延がないことを示すには、ベクトルの対応する値を NaN に設定します。たとえば、3 入力のシステムについて、遅延が Delay.Input = [0.1 NaN sin(0.2*t)] と定義されている場合、1 番目の入力チャネルは固定の遅延、2 番目のチャネルは遅延なし、3 番目の入力チャネルは可変の遅延となります。データ関数の詳細については、データ関数を参照してください。
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)