lpvss
説明
lpvss
は、時間依存パラメーターの関数としてダイナミクスが変動する線形状態空間モデルを表すために使用します。"線形パラメーター変動" (LPV) モデルは、非線形システムの複雑度が低い局所的な線形近似を取得するのに役立ちます。特にパラメーターが内部状態に依存する場合 (準 LPV) など、LTI モデルよりもはるかに高度な動作をモデル化できます。そのため、lpvss
モデルを使用すると、ゲイン スケジュール制御などの設計法を非線形モデルに効率的に適用できます。
lpvss
を使用して連続時間または離散時間の線形パラメーター変動状態空間モデルを作成できます。連続時間の場合、lpvss
モデルは次の状態空間方程式で記述されます。
ここで、p は時間依存の外生パラメーターのベクトル、δ0(t,p)、x0(t,p)、u0(t,p)、y0(t,p) はそれぞれ可変の微分、状態、入力、出力のオフセットです。
離散時間の場合、lpvss
モデルは次の状態空間方程式で記述されます。
ここで、整数インデックス k はサンプリング周期 Ts
の数をカウントします。
lpvss
オブジェクトを使用して以下をモデル化できます。
係数が外部パラメーターまたは環境パラメーターに依存する線形システム。例については、回転ディスクの制御設計を参照してください。
少数の物理パラメーターに依存して時間によって変化する定常状態条件の近くで動作する非線形システム。たとえば、航空機の非線形ピッチ ダイナミクスのゲイン スケジュール コントローラーの設計と検証を参照してください。
lpvss
は、ダイナミクスが MATLAB® 関数 ("データ関数") で記述される LPV モデルを作成する場合に使用します。線形化された LTI ダイナミクスを操作条件のグリッドで内挿する LPV モデルを作成する場合は ssInterpolant
を使用します。lpvss
オブジェクトでは、LPV モデルとスケジューリング マップ p(t) = h(t,x,u) で構成される準 LPV モデルは表現できませんが、パラメーターの軌跡を時間 t、状態 x、および入力 u の関数として指定して準 LPV モデルをシミュレートできます。lpvss
オブジェクトに適用できる関数と演算については、LPV モデルと LTV モデルを参照してください。
作成
構文
説明
は、連続時間 LPV モデルを作成します。lpvSys
= lpvss(ParamNames
,DataFcn
)ParamNames
で、パラメーター ベクトル p の各要素の名前を指定します。DataFcn
は、"データ関数" の名前またはハンドルです。これは、与えられた (t,p) の値 (離散時間の場合は (k,p) の値) について行列とオフセットを計算するユーザー定義の MATLAB 関数です。
は、サンプル時間 lpvSys
= lpvss(ParamNames
,DataFcn
,ts
)ts
の離散時間 LPV モデルを作成します。
は、lpvSys
= lpvss(ParamNames
,DataFcn
,ts
,tcheck
,pcheck
)DataFcn
を (tcheck
,pcheck
) で評価し、状態、入力、および出力の数を特定します。既定では、lpvss
は (tcheck
,pcheck
) = (0,0) を使用します。
は、1 つ以上の名前と値の引数を使用して線形パラメーター変動モデルのプロパティを設定します。この構文は、前述の任意の入力引数の組み合わせで使用します。lpvSys
= lpvss(___,Name=Value
)
入力引数
ParamNames
— パラメーターの名前
文字ベクトルの cell 配列
パラメーターの名前。Np 行 1 列の文字ベクトルの cell 配列として指定します。ここで、Np はスカラー パラメーターの数、つまりパラメーター ベクトル p の要素の数です。この入力はプロパティ ParameterName
の値を設定します。
DataFcn
— データ関数
関数名 | 関数ハンドル
行列とオフセットを計算するユーザー定義の MATLAB 関数。関数名 (文字ベクトルまたは string) または関数ハンドルとして指定します。データ関数は次の形式でなければなりません。
連続時間 —
離散時間 —
Delay
引数は、それぞれ入力チャネルと出力チャネルの遅延を指定する Input
と Output
のフィールドをもつ構造体です。 (R2024a 以降)
データ関数の定義の詳細については、データ関数を参照してください。
この入力はプロパティ DataFunction
の値を設定します。
ts
— サンプル時間
スカラー
スカラーとして指定されたサンプル時間。詳細については、Ts
プロパティを参照してください。
tcheck
— 時間のテスト値
スカラー
時間のテスト値。スカラーとして指定します。オブジェクトでは DataFcn
を (tcheck
,pcheck
) で評価し、状態、入力、および出力の数を特定します。既定では、lpvss
は (tcheck
,pcheck
) = (0,0) を使用します。
pcheck
— パラメーターのテスト値
スカラー | ベクトル
パラメーターのテスト値。スカラーまたは長さ Np のベクトルとして指定します。オブジェクトでは DataFcn
を (tcheck
,pcheck
) で評価し、状態、入力、および出力の数を特定します。既定では、lpvss
は (tcheck
,pcheck
) = (0,0) を使用します。
プロパティ
ParameterName
— パラメーターの名前
''
(既定値) | 文字ベクトルの cell 配列
LPV モデルのパラメーターの名前。文字ベクトルの cell 配列として指定します。パラメーター ベクトル p の長さと等しい長さの cell 配列を指定します。
DataFunction
— データ関数
[] (既定値) | 関数ハンドル
モデルのデータを計算するデータ関数。関数ハンドルとして指定します。データ関数は次の形式でなければなりません。
連続時間
[A,B,C,D,E,dx0,x0,u0,y0,Delay] = DataFcn(t,p)
離散時間
[A,B,C,D,E,dx0,x0,u0,y0,Delay] = DataFcn(k,p)
ここで、入力
k
はサンプリング周期Ts
の数をカウントする整数インデックスです。絶対時間はt
=k*Ts
で与えられます。
追加の入力引数を渡すには、次のように無名関数を使用します。
DataFcn = @(t) myFunction(t,arg1,arg2,...)
A
、B
、C
、D
以外の出力引数については、(t
,p
) の値にない場合、いずれも []
に設定できます。
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 線形パラメーター変動モデルを作成します。
この例では、dataFcnMaglev.m
で磁気浮上システムの行列とオフセットを定義します。ボールに対する磁力を発生させるコイル電流を使用して、磁気浮上で浮遊するボールの高さを制御します。
これらの行列とオフセットは、この例で用意されているデータ関数 dataFcnMaglev.m
で定義されています。
LPV モデルを作成します。
lpvsys = lpvss('p',@dataFcnMaglev)
Continuous-time state-space LPV model with 1 outputs, 1 inputs, 2 states, and 1 parameters. Model Properties
データ関数を表示します。
type dataFcnMaglev.m
function [A,B,C,D,E,dx0,x0,u0,y0,Delays] = dataFcnMaglev(~,p) % MAGLEV example: % x = [h ; dh/dt] % p=hbar (equilibrium height) mb = 0.02; % kg g = 9.81; alpha = 2.4832e-5; A = [0 1;2*g/p 0]; B = [0 ; -2*sqrt(g*alpha/mb)/p]; C = [1 0]; % h D = 0; E = []; dx0 = []; x0 = [p;0]; u0 = sqrt(mb*g/alpha)*p; % ibar y0 = p; % y = h = hbar + (h-hbar) Delays = [];
離散時間線形パラメーター変動モデル
離散時間線形パラメーター変動モデルを作成します。
行列とオフセットは次によって与えられます。
, , ,
.
これらの行列とオフセットは、この例で用意されているデータ関数 lpvFcnDiscrete.m
で定義されています。
プロパティを指定し、LPV モデルを作成します。
Ts = 0.01;
ParamNames = 'p';
DataFcn = @lpvFcnDiscrete;
lpvSys = lpvss(ParamNames,DataFcn,Ts)
Discrete-time state-space LPV model with 1 outputs, 1 inputs, 1 states, and 1 parameters.
データ関数を表示します。
type lpvFcnDiscrete.m
function [A,B,C,D,E,dx0,x0,u0,y0,Delays] = lpvFcnDiscrete(k,p) A = sin(0.1*p); B = 1; C = 1; D = 0; E = []; dx0 = []; x0 = []; u0 = []; y0 = 0.1*sin(k); Delays = [];
線形パラメーター変動状態空間モデルの時間応答
この例では、dataFcnMaglev.m
で磁気浮上システムの行列とオフセットを定義します。ボールに対する磁力を発生させるコイル電流を使用して、磁気浮上で浮遊するボールの高さを制御します。この例では、開ループでモデルをシミュレートします。
LPV モデルを作成します。
lpvSys = lpvss('h',@dataFcnMaglev)
Continuous-time state-space LPV model with 1 outputs, 1 inputs, 2 states, and 1 parameters. Model Properties
ドット表記を使用して追加のプロパティを設定できます。
lpvSys.StateName = {'h','hdot'}; lpvSys.InputName = 'current'; lpvSys.InputName = 'height';
このモデルの任意の正弦波入力電流に対する応答をシミュレートします。
h0 = 1; [~,~,~,~,~,~,x0,u0,~] = dataFcnMaglev([],h0); t = 0:1e-3:1; u = u0*(1+0.1*sin(10*t)); y = lsim(lpvSys,u,t,x0,@(t,x,u) x(1));
応答をプロットします。
plot(t,y,t,u/u0) legend('height','current')
電流が最初に増加した時点でボールが磁石に引き寄せられます (h
が減少します)。その後の電流の減少は、元に戻るほど十分なものではありません。
このモデルの特異点は h
= 0、つまりボールが磁石に当たるときです。LPV モデルは、この時点で有効ではなくなります。
LPV モデルのダイナミクスのサンプリング
LPV モデルのダイナミクスを (,) の値の点またはグリッドでサンプリングし、特定の時間またはパラメーターの値におけるアフィン ダイナミクスを取得できます。
この例では、dataFcnMaglev.m
で磁気浮上システムの行列とオフセットを定義します。ボールに対する磁力を発生させるコイル電流を使用して、磁気浮上で浮遊するボールの高さを制御します。
LPV モデルを作成します。
lpvSys = lpvss('h',@dataFcnMaglev)
Continuous-time state-space LPV model with 1 outputs, 1 inputs, 2 states, and 1 parameters.
LPV ダイナミクスを 3 つの h
値でサンプリングして局所的な LTI モデルを取得します。
hmin = 0.05; hmax = 0.25; hcd = linspace(hmin,hmax,3); ssArray = psample(lpvSys,[],hcd); size(ssArray)
1x3 array of state-space models. Each model has 1 outputs, 1 inputs, and 2 states.
関数により、モデルのオフセットが配列の Offsets
プロパティに格納されます。
ssArray.Offsets
ans=1×3 struct array with fields:
dx
x
u
y
ボード応答をプロットします。
bodemag(ssArray)
データ関数を表示します。
type dataFcnMaglev.m
function [A,B,C,D,E,dx0,x0,u0,y0,Delays] = dataFcnMaglev(~,p) % MAGLEV example: % x = [h ; dh/dt] % p=hbar (equilibrium height) mb = 0.02; % kg g = 9.81; alpha = 2.4832e-5; A = [0 1;2*g/p 0]; B = [0 ; -2*sqrt(g*alpha/mb)/p]; C = [1 0]; % h D = 0; E = []; dx0 = []; x0 = [p;0]; u0 = sqrt(mb*g/alpha)*p; % ibar y0 = p; % y = h = hbar + (h-hbar) Delays = [];
遅延をもつ LPV モデルの作成
R2024a 以降
この例は、可変の遅延を含む線形パラメーター変動モデルを作成する方法を示しています。この例では、出力遅延を含むコントローラーで閉ループ プラントをシミュレートし、コントローラー応答の遅延による効果も確認します。
この例では、dataFcnMaglev.m
で磁気浮上システムの行列とオフセットを定義します。ボールに対する磁力を発生させるコイル電流を使用して、磁気浮上で浮遊するボールの高さを制御します。
LPV モデルを作成します。
h0 = 1; % Note: Singular for h=0 G = lpvss("h",@dataFcnMaglev,0,0,h0);
この例では、磁気浮上プラントのゲイン スケジュール PD コントローラーを定義するデータ関数 maglevPD.m
も用意されています。このコントローラーには時間依存の出力遅延が含まれています。この遅延は時間と共に減少します。
PD = lpvss("h",@maglevPD,0,0,h0);
閉ループ応答を作成します。
CL = feedback(G*PD,1);
最初の状態である実際の軌跡 に対する応答をシミュレートします。
xinit = [h0;0;0]; % init: h=1 t = 0:1e-2:10; href = h0+0.5*sin(t); % desired height pFcn = @(t,x,u) x(1); [y1,~,x1,p1] = lsim(CL,href,t,xinit,pFcn);
シミュレーション結果をプロットし、基準の高さと比較します。
plot(t,href,t,y1,'r--') legend("Height reference","LPV simulation")
コントローラーの動作に含まれる遅延により、基準入力に正確に追従する出力信号の応答にも遅延が生じます。時間と共に遅延が減少すると、LPV シミュレーションが基準と一致します。
データ関数
type dataFcnMaglev.m
function [A,B,C,D,E,dx0,x0,u0,y0,Delays] = dataFcnMaglev(~,p) % MAGLEV example: % x = [h ; dh/dt] % p=hbar (equilibrium height) mb = 0.02; % kg g = 9.81; alpha = 2.4832e-5; A = [0 1;2*g/p 0]; B = [0 ; -2*sqrt(g*alpha/mb)/p]; C = [1 0]; % h D = 0; E = []; dx0 = []; x0 = [p;0]; u0 = sqrt(mb*g/alpha)*p; % ibar y0 = p; % y = h = hbar + (h-hbar) Delays = [];
type maglevPD.m
function [A,B,C,D,E,dx0,x0,u0,y0,Delays] = maglevPD(t,p) % Gain-scheduled PD for MAGLEV example: % dz = A(p) z + B(p) e % u = u0 + C(p) z + D(p) e % p=h (equilibrium height) mb = 0.02; % kg g = 9.81; alpha = 2.4832e-5; a0 = 2*g/p; b0 = -2*sqrt(g*alpha/mb)/p; wn = 10; zeta = 0.7; Kp = (a0+wn^2)/b0; Kd = 2*zeta*wn/b0; % linear in p % Kp = (2*zeta*wn-a0)/b0; % Kd = wn^2/b0; wf = 100; A = -wf; B = wf; C = -wf*Kd; D = Kp+wf*Kd; E = []; dx0 = []; x0 = []; u0 = []; y0 = sqrt(mb*g/alpha)*p; % ibar, feedforward term Delays.Output = 0.1/(1+t); % decreasing delay Delays.Input = NaN; end
バージョン履歴
R2023a で導入R2024a: データ関数: 入力遅延と出力遅延の指定のサポート
データ関数の Delay
引数は、固定または可変の遅延を指定する場合に使用します。Delay
引数は、それぞれ入力チャネルと出力チャネルの遅延を指定する Input
と Output
のフィールドをもつ構造体です。Delay.Input
と Delay.Output
は、それぞれ入力チャネルと出力チャネルの数に等しい長さのベクトルに設定します。特定のチャネルに常に遅延がないことを示すには、ベクトルの対応する値を NaN
に設定します。たとえば、3 入力のシステムについて、遅延が Delay.Input = [0.1 NaN sin(0.2*p)]
と定義されている場合、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)