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 モデルを参照してください。
作成
構文
説明
は、連続時間 LTV モデルを作成します。ltvSys
= ltvss(DataFcn
)DataFcn
は、"データ関数" の名前またはハンドルです。これは、与えられた t または k の値について行列とオフセットを計算するユーザー定義の MATLAB 関数です。
は、1 つ以上の名前と値のペアの引数を使用して線形時変モデルのプロパティを設定します。この構文は、前述の任意の入力引数の組み合わせで使用します。ltvSys
= ltvss(___,Name=Value
)
入力引数
DataFcn
— データ関数
関数名 | 関数ハンドル
行列とオフセットを計算するユーザー定義の MATLAB 関数。関数名 (文字ベクトルまたは string) または関数ハンドルとして指定します。データ関数は次の形式でなければなりません。
連続時間 —
離散時間 —
Delay
引数は、それぞれ入力チャネルと出力チャネルの遅延を指定する Input
と Output
のフィールドをもつ構造体です。 (R2024a 以降)
データ関数の定義の詳細については、データ関数を参照してください。
この入力はプロパティ DataFunction
の値を設定します。
ts
— サンプル時間
スカラー
スカラーとして指定されたサンプル時間。詳細については、Ts
プロパティを参照してください。
tcheck
— 時間のテスト値
スカラー
時間のテスト値。スカラーとして指定します。オブジェクトでは DataFcn
を tcheck
で評価して有効であるかどうかを確認し、状態、入力、および出力の数を取得します。既定では、ltvss
は tcheck
= 0 を使用します。
プロパティ
DataFunction
— データ関数
[] (既定値) | 関数ハンドル
モデルのデータを計算するデータ関数。関数ハンドルとして指定します。データ関数は次の形式でなければなりません。
連続時間
[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
の値にない場合、いずれも []
に設定できます。
詳細については、データ関数を参照してください。
StateName
— 状態名
' '
(既定値) | 文字ベクトル | 文字ベクトルの cell 配列
状態名。次のいずれかとして指定します。
文字ベクトル —
'velocity'
などの 1 次モデルの場合。文字ベクトルの cell 配列 — 2 つ以上の状態をもつモデルの場合。
StateName
は、既定ではすべての状態について空 ' '
です。
StatePath
— 状態パス
' '
(既定値) | 文字ベクトル | 文字ベクトルの cell 配列
線形化で状態ブロック パスを管理しやすくするための状態パス。次のいずれかとして指定します。
文字ベクトル — 1 次モデルの場合
文字ベクトルの cell 配列 — 2 つ以上の状態をもつモデルの場合
StatePath
は、既定ではすべての状態について空 ' '
です。
StateUnit
— 状態単位
' '
(既定値) | 文字ベクトル | 文字ベクトルの cell 配列
状態単位。以下のいずれかとして指定します。
文字ベクトル —
'm/s'
などの 1 次モデルの場合文字ベクトルの cell 配列 — 2 つ以上の状態をもつモデルの場合
StateUnit
を使用して、各状態の単位を追跡します。StateUnit
はシステムの動作に影響しません。StateUnit
は、既定ではすべての状態について空 ' '
です。
TimeUnit
— 時間変数の単位
'seconds'
(既定値) | 'nanoseconds'
| 'microseconds'
| 'milliseconds'
| 'minutes'
| 'hours'
| 'days'
| 'weeks'
| 'months'
| 'years'
| ...
時間変数の単位。次のいずれかとして指定します。
'nanoseconds'
'microseconds'
'milliseconds'
'seconds'
'minutes'
'hours'
'days'
'weeks'
'months'
'years'
TimeUnit
の変更は他のプロパティには影響しませんが、システム全体の動作が変わります。chgTimeUnit
を使用して、システム動作を変更せずに時間単位を変換します。
InputName
— 入力チャネル名
''
(既定値) | 文字ベクトル | 文字ベクトルの cell 配列
入力チャネル名。以下のいずれかとして指定します。
文字ベクトル (単入力モデルの場合)。
文字ベクトルの cell 配列 (多入力モデルの場合)。
''
(いずれの入力チャネルにも名前を指定しない場合)。
あるいは、自動的なベクトル拡張を使用して多入力モデルの入力名を割り当てることもできます。たとえば、sys
が 2 入力モデルである場合は、以下のように入力します。
sys.InputName = 'controls';
入力名は自動的に {'controls(1)';'controls(2)'}
へと拡張されます。
省略形表記 u
を使用して、InputName
プロパティを参照できます。たとえば、sys.u
は sys.InputName
と同じです。
InputName
の使用目的は次のとおりです。
モデル表示とプロット上のチャネルの識別
MIMO システムのサブシステムの抽出
モデル相互接続時における接続点の指定
InputUnit
— 入力チャネル単位
''
(既定値) | 文字ベクトル | 文字ベクトルの cell 配列
入力チャネル単位。以下のいずれかとして指定します。
文字ベクトル (単入力モデルの場合)。
文字ベクトルの cell 配列 (多入力モデルの場合)。
''
(いずれの入力チャネルにも単位を指定しない場合)。
InputUnit
を使用して入力信号の単位を指定します。InputUnit
はシステムの動作に影響しません。
InputGroup
— 入力チャネル グループ
構造体
入力チャネル グループ。構造体として指定します。InputGroup
プロパティを使用して、MIMO システムの入力チャネルをグループに割り当て、各グループを名前で参照します。InputGroup
のフィールド名はグループ名であり、フィールドの値は各グループの入力チャネルです。たとえば、入力チャネル 1
と 2
、および 3
と 5
をそれぞれ含む、controls
および noise
という名前の入力グループを作成するには、次のように入力します。
sys.InputGroup.controls = [1 2]; sys.InputGroup.noise = [3 5];
その後、以下を使用して controls
入力からすべての出力にサブシステムを抽出できます。
sys(:,'controls')
既定では、InputGroup
はフィールドのない構造体です。
OutputName
— 出力チャネル名
''
(既定値) | 文字ベクトル | 文字ベクトルの cell 配列
出力チャネル名。次のいずれかとして指定されます。
文字ベクトル (単出力モデルの場合)。
文字ベクトルの cell 配列 (多出力モデルの場合)。
''
(いずれの出力チャネルにも名前を指定しない場合)。
あるいは、自動的なベクトル拡張を使用して多出力モデルの出力名を割り当てることもできます。たとえば、sys
が 2 出力モデルである場合は、以下のように入力します。
sys.OutputName = 'measurements';
出力名は自動的に {'measurements(1)';'measurements(2)'}
へと拡張されます。
省略形表記 y
を使用して OutputName
プロパティを参照することもできます。たとえば、sys.y
は sys.OutputName
と同じです。
OutputName
の使用目的は次のとおりです。
モデル表示とプロット上のチャネルの識別
MIMO システムのサブシステムの抽出
モデル相互接続時における接続点の指定
OutputUnit
— 出力チャネル単位
''
(既定値) | 文字ベクトル | 文字ベクトルの cell 配列
出力チャネル単位。次のいずれかとして指定されます。
文字ベクトル (単出力モデルの場合)。
文字ベクトルの cell 配列 (多出力モデルの場合)。
''
(いずれの出力チャネルにも単位を指定しない場合)。
OutputUnit
を使用して出力信号の単位を指定します。OutputUnit
はシステムの動作に影響しません。
OutputGroup
— 出力チャネル グループ
構造体
出力チャネル グループ。構造体として指定します。OutputGroup
プロパティを使用して、MIMO システムの出力チャネルをグループに割り当て、各グループを名前で参照します。OutputGroup
のフィールド名はグループ名であり、フィールドの値は各グループの出力チャネルです。たとえば、出力チャネル 1
、および 3
と 5
をそれぞれ含む、temperature
および measurement
という名前の出力グループを作成します。
sys.OutputGroup.temperature = [1]; sys.OutputGroup.measurement = [3 5];
その後、以下を使用してすべての入力から measurement
出力にサブシステムを抽出できます。
sys('measurement',:)
既定では、OutputGroup
はフィールドのない構造体です。
Name
— システム名
''
(既定値) | 文字ベクトル
システム名。文字ベクトルとして指定します。たとえば、'system_1'
とします。
Notes
— ユーザー指定のテキスト
{}
(既定値) | 文字ベクトル | 文字ベクトルの cell 配列
システムに関連付けるユーザー指定のテキスト。文字ベクトルまたは文字ベクトルの cell 配列として指定します。たとえば、'System is MIMO'
とします。
UserData
— ユーザー指定のデータ
[]
(既定値) | 任意の MATLAB データ型
システムに関連付けるユーザー指定のデータ。任意の MATLAB データ型として指定します。
オブジェクト関数
サンプリングと内挿
sample | (非推奨) 線形パラメーター変動または線形時変のダイナミクスをサンプリング |
ssInterpolant | 状態空間データからグリッド付きの LTV モデルまたは LPV モデルを作成 |
時間応答シミュレーション
モデルの相互接続
例
連続時間線形時変モデル
連続時間 SISO 線形時変モデルを作成します。
この例では 1 次モデルを使用します。行列とオフセットは次によって与えられます。
, , , ,
.
これらの行列とオフセットは、この例で用意されているデータ関数 ltvssDataFcn.m
で定義されています。
LTV モデルを作成します。
ltvSys = ltvss(@ltvssDataFcn)
Continuous-time state-space LTV model with 1 outputs, 1 inputs, and 1 states.
データ関数を表示します。
type ltvssDataFcn.m
function [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.
ドット表記を使用してモデルの追加のプロパティを設定できます。
ltvSys.InputName = 'u'; ltvSys.OutputName = 'y';
データ関数を表示します。
type ltvFcnDiscrete.m
function [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.m
function [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 = [];
固定と可変の遅延をもつ LTV モデルの作成
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 で導入R2024a: データ関数: 入力遅延と出力遅延の指定のサポート
データ関数の Delay
引数は、固定または可変の遅延を指定する場合に使用します。Delay
引数は、それぞれ入力チャネルと出力チャネルの遅延を指定する Input
と Output
のフィールドをもつ構造体です。Delay.Input
と Delay.Output
は、それぞれ入力チャネルと出力チャネルの数に等しい長さのベクトルに設定します。特定のチャネルに常に遅延がないことを示すには、ベクトルの対応する値を NaN
に設定します。たとえば、3 入力のシステムについて、遅延が Delay.Input = [0.1 NaN sin(0.2*t)]
と定義されている場合、1 番目の入力チャネルは固定の遅延、2 番目のチャネルは遅延なし、3 番目の入力チャネルは可変の遅延となります。データ関数の詳細については、データ関数を参照してください。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)