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

LPV System

線形パラメーター変動 (LPV) システムのシミュレーション

説明

Simulink® で、線形パラメーター変動 (LPV) システムを表現し、シミュレートします。このブロックは、コード生成もサポートします。

"線形パラメーター変動" (LPV) システムとは、"スケジューリング パラメーター" と呼ばれる特定の時変パラメーターの関数としてダイナミクスが変動する線形状態空間モデルです。MATLAB® では、パラメーター依存の係数を使用して、状態空間型で LPV モデルを表現します。

数学的には、LPV システムは次のように表します。

dx(t)=A(p)x(t)+B(p)u(t)y(t)=C(p)x(t)+D(p)u(t)x(0)=x0(1)

ここで、

  • u(t) は入力

  • y(t) は出力

  • x(t) は初期値 x0 をもつモデルの状態

  • dx(t) は、連続時間システムでは状態微分ベクトル x˙、離散時間システムでは状態更新ベクトル x(t+ΔT)。ΔT はサンプル時間です。

  • A(p)B(p)C(p) および D(p) は、スケジューリング パラメーター ベクトル p でパラメーター化された状態空間行列です。

  • パラメーター p = p(t) は、モデルの入力と状態の測定可能な関数です。これらは、スカラー量またはいくつかのパラメーターのベクトルで指定できます。スケジューリング パラメーターのセットにより、LPV モデルが定義される "スケジューリング空間" を定義します。

ブロックでは、LPV システムのグリッドベースの表現を実装します。スケジューリング パラメーターで値のグリッドを選択します。それぞれの値 p = p* で、状態空間 (ss または idss) モデル オブジェクトとして対応する線形システムを指定します。生成された状態空間モデルの配列を使用して、LPV System ブロックを構成します。

ブロックは、操作点情報をもつ状態空間モデルの配列を受け入れます。スケジューリング変数の情報は、LTI 配列の SamplingGrid プロパティから抽出されます。スケジューリング変数は、LPV モデルのグリッドを定義します。これらは、スカラー値の量であり、時間の関数、入力および状態、あるいは定数を指定できます。これらは動作空間でローカル ダイナミクスの選択に使用されます。ソフトウェアは、これらの変数値を内挿します。ブロックは、データの内挿および外挿の手法でこの配列を使用してシミュレーションを実行します。

LPV システム表現を拡張して、変数 dxxu および y のオフセットを使用することができます。この形式を LPV モデルの "アフィン形式" といいます。数学的には、次の式で LPV システムを表現します。

dx(t)=A(p)x(t)+B(p)u(t)+(dx¯(p)A(p)x¯(p)B(p)u¯(p))y(t)=C(p)x(t)+D(p)u(t)+(y¯(p)C(p)x¯(p)D(p)u¯(p))x(0)=x0(2)

dx¯(p),  x¯(p),  u¯(p),  y¯(p) は、与えられたパラメーター値 p = p(t) における dx(t)x(t)u(t)y(t) の値のオフセットです。

そのような線形システム配列の表現を取得するには、操作点のバッチ上で Simulink モデルを線形化します (バッチ線形化 (Simulink Control Design)を参照)。オフセットは、モデルを線形化した操作点に対応します。

linearize または getIOTransfer などの関数を呼び出すときに、追加の線形化情報を返すことでオフセットを取得できます。次に、getOffsetsForLPV を使用してオフセットを抽出できます。例については、昇圧コンバーター モデルの LPV 近似 (Simulink Control Design)を参照してください。

次の制限は、LPV System ブロックに適用されます。

  • 内部遅延は、状態空間モデル配列の最小値未満となるように外挿することはできません。

  • 線形モデルの不規則なグリッドを使用して LPV システムを定義する場合、最近傍の内挿法のみが使用されます。これにより、シミュレーション結果の精度が低下する場合があります。規則的なグリッドを使用して処理することをお勧めします。規則的および不規則的なグリッドの詳細は、規則的なグリッドと不規則なグリッドを参照してください。

データ型のサポート

single データおよび double データ。入力信号またはモデル プロパティに他のデータ型がある場合は、これらのデータ型に変換しなければなりません。

パラメーター

LPV System の [ブロック パラメーター] ダイアログ ボックスには、システム データ、スケジューリング アルゴリズムおよび出力端子を指定するための 5 つのタブがあります。次の表は、これらのブロック パラメーターをまとめています。

タスクパラメーター
状態空間モデルの配列と初期状態の指定

[LPV モデル] タブ:

操作点のオフセットの指定

[LPV モデル] タブ:

状態微分または更新変数のオフセットの指定

[LPV モデル] タブ:

モデル データのエントリをオーバーライドするために固定するモデル行列とその定格値を指定します。
状況に応じて、A(p) などのパラメーター依存行列を固定値 A* に置き換えてシミュレーションを実行できます。たとえば、A* はスケジューリングの範囲の平均値を表すことができます。

[固定エントリ] タブ:

内挿および外挿のオプションの指定

[スケジューリング] タブ:

ブロックの追加出力の指定

[出力] タブ:

コード生成設定の指定

[コード生成] タブ:

状態空間配列

状態空間 (ss または idss) モデルの配列です。配列内のすべてのモデルは、同じ状態の定義を使用しなければなりません。状態空間オブジェクトの SamplingGrid プロパティを使用して、モデルのスケジューリング パラメーターを指定します。SamplingGrid プロパティの詳細については、ss または idss モデルのリファレンス ページを参照してください。

ブロックが同期状態制御 (State Control ブロックを参照) を使用するモデル内にある場合は、離散時間モデルの配列を指定しなければなりません。

初期状態

シミュレーションの開始時にローカル モデルで使用する初期条件。次のいずれかで指定します。

  • 0 (既定値)

  • モデルの状態数と同じ長さの double ベクトル

入力のオフセット

入力 u(t) のオフセット。次のいずれかで指定します。

  • 0 (既定値) — 入力オフセットがない (u¯(p)=0  p) 場合に使用します。

  • 入力数と同じ長さの double ベクトル — スケジューリング空間内で入力オフセットが同じ場合に使用します。

  • サイズ [nu 1 sysArraySize] の double 配列 — オフセットが存在し、スケジューリング空間内で異なる場合に使用します。ここでは、nu = 入力数、sysArraySize = 状態空間配列の配列サイズです。size を使用して配列のサイズを決定します。

線形化中にオフセットを取得し、それらを LPV System ブロックでサポートされる形式に変換することができます。詳細については、LTI システムの配列を使用した非線形動作の近似 (Simulink Control Design)および getOffsetsForLPV を参照してください。

出力のオフセット

出力 y(t) のオフセット。次のいずれかで指定します。

  • 0 (既定値) — 出力オフセットがない (y¯(p)=0  p) 場合に使用します。

  • 出力の数と同じ長さの double ベクトル。スケジューリング空間内で出力のオフセットが同じ場合に使用します。

  • サイズ [ny 1 sysArraySize] の double 配列。オフセットが存在し、スケジューリング空間内で異なる場合に使用します。ここでは、ny = 出力数、sysArraySize = 状態空間配列の配列サイズです。size を使用して配列のサイズを決定します。

線形化中にオフセットを取得し、それらを LPV System ブロックでサポートされる形式に変換することができます。詳細については、LTI システムの配列を使用した非線形動作の近似 (Simulink Control Design)および getOffsetsForLPV を参照してください。

状態のオフセット

状態 x(t) のオフセット。次のいずれかで指定します。

  • 0 (既定値) — 状態オフセットがない (x¯(p)=0  p) 場合に使用します。

  • 状態の数と同じ長さの double ベクトル。スケジューリング空間内で状態のオフセットが同じ場合に使用します。

  • サイズ [nx 1 sysArraySize] の double 配列。ここで、nx = 状態数、sysArraySize = 状態空間配列の配列サイズです。オフセットが存在し、スケジューリング空間内で異なる場合に使用します。ここでは、nx = 状態数、sysArraySize = 状態空間配列の配列サイズです。size を使用して配列のサイズを決定します。

線形化中にオフセットを取得し、それらを LPV System ブロックでサポートされる形式に変換することができます。詳細については、LTI システムの配列を使用した非線形動作の近似 (Simulink Control Design)および getOffsetsForLPV を参照してください。

状態微分/更新のオフセット

状態微分または更新変数 dx(t) のオフセット。次のいずれかで指定します。

  • 平衡状態下の線形化により線形システム配列が取得されている場合、[平衡操作の条件の仮定] オプションを選択します。このオプションは、連続時間システムでは dx¯(p)=0、離散時間システムでは dx¯(p)=x¯(p) のオフセットに対応します。既定ではこのオプションが選択されています。

  • 線形システムに平衡でない状態で取得されたシステムが少なくとも 1 つ含まれている場合、[平衡操作の条件の仮定] オプションをオフにします。[オフセット値] フィールドで、次のいずれかを指定します。

    • dx オフセット値が、スケジューリング空間内で同じ場合、状態の数と同じ長さの double ベクトルとして指定します。

    • dx オフセットが存在し、スケジューリング空間内で異なる場合、サイズ [nx 1 sysArraySize] の double 配列として指定します。ここで、nx = 状態の数、sysArraySize = 状態空間配列の配列サイズです。

線形化中にオフセットを取得し、それらを LPV System ブロックでサポートされる形式に変換することができます。詳細については、LTI システムの配列を使用した非線形動作の近似 (Simulink Control Design)および getOffsetsForLPV を参照してください。

ノミナル モデル

固定係数の値を指定する状態空間モデル。次のいずれかで指定します。

  • 状態空間配列内の最初のモデルを使用 (既定:) — 状態空間配列の最初のモデルを使用して、LPV モデルを表現します。次の例では、状態空間配列をオブジェクト sys で指定し、固定係数をモデル sys(:,:,1) から取得しています。

    % Specify a 4-by-5 array of state-space models.
    sys = rss(4,2,3,4,5);
    a = 1:4; 
    b = 10:10:50;
    [av,bv] = ndgrid(a,b);
    % Use "alpha" and "beta" variables as scheduling parameters.
    sys.SamplingGrid = struct('alpha',av,'beta',bv);  

    固定係数は、[alpha=1, beta=10] に対応するモデル sysFixed = sys(:,:,1) から取得しています。A 行列の (2,1) 要素に強制的に固定する場合、シミュレーション時に使用する値は sysFixed.A(2,1) になります。

  • カスタム値 — 固定エントリに異なる状態空間モデルを指定します。[状態空間モデル] フィールドで、固定するモデルの変数を指定します。固定されたモデルは、LPV モデルの状態空間配列と同じ状態ベースを使用しなければなりません。

固定係数インデックス

固定する状態空間行列の係数および遅延ベクトルを指定します。

次のいずれかを指定します。

  • 行列のすべてのエントリを同じ方法で処理する場合は、スカラーの boolean (true または false)。

    状態空間行列および遅延ベクトルについての既定値は false であり、これらが自由なものとして扱われることを意味します。

  • 対応する行列のサイズと互換性があるサイズの論理行列:

    状態空間行列

    固定エントリの行列のサイズ

    A 行列

    nxnx

    B 行列

    nxnu

    C 行列

    nynx

    D 行列

    nynu

    入力遅延

    nu 行 1 列

    出力遅延

    ny 行 1 列

    内部遅延

    ni 行 1 列

    ここで、nu = 入力数、ny = 出力数、nx = 状態数、ni = 内部遅延ベクトルの長さです。

  • 固定エントリの位置を指定する数値インデックス。行列の要素の特定の添字 (i,j) に対応する数値インデックスを生成する方法については、sub2ind のリファレンス ページを参照してください。

内挿法

内挿法です。グリッドの位置から離れているスケジューリング パラメーター値の状態空間データを計算する方法を定義します。

次のオプションのうちの 1 つを指定します。

  • Flat — 現在の点に最も近く、現在の点より大きくないグリッド点の状態空間データを選択します。"現在の点" は、現在時刻におけるスケジューリング パラメーターの値です。

  • Nearest — スケジューリング空間で最も近いグリッド点の状態空間データを選択します。

  • Linear — スケジューリング空間で 2 次元最近傍の線形内挿により状態空間データを取得します。ここで、d = スケジューリング パラメーターの数です。

既定の内挿法は、スケジューリング パラメーター値の規則的なグリッドの場合は [Linear] です。不規則なグリッドの場合、選択した内容にかかわらず、常に [Nearest] 内挿法が使用されます。規則的および不規則なグリッドの詳細は、規則的なグリッドと不規則なグリッドを参照してください。

[Linear] 法は、精度は高いのですが、計算に時間がかかります。[Flat] および [Nearest] 法は、モード切り替えダイナミクスをもつモデルに最適です。

外挿法

外挿法です。状態空間配列に指定されている (SamplingGrid プロパティで指定した) 範囲外となるスケジューリング パラメーター値の状態空間データを計算する方法を定義します。

次のオプションのうちの 1 つを指定します。

  • Clip (既定:) — 外挿を無効にして、現在の点に最も近い使用可能な最新のスケジューリング グリッド点に対応するデータを返します。

  • Linear — 現在値が最初のグリッド点の値より小さいか、最後のグリッド点の値より大きいかによって、各スケジューリング パラメーターの値の最初または最後のペア間の直線をそれぞれ近似させます。この方法では、現在の値に対応する直線上の点を返します。線形外挿では、内挿法も線形である必要があります。

インデックス検索法

スケジューリング空間の現在のスケジューリング パラメーター値の位置は、事前ルックアップ アルゴリズムで決定されます。[Linear search] または [Binary search] を選択します。各検索法は、それぞれ異なる状況で速度の利点をもっています。このパラメーターの詳細については、Prelookupブロックのリファレンス ページを参照してください。

前回のインデックス結果を使ってインデックス検索を始める

前のタイム ステップで検出されたインデックスを使用してブロックで検索を開始する場合、このチェック ボックスを選択します。このパラメーターの詳細については、Prelookupブロックのリファレンス ページを参照してください。

状態の出力

状態値を出力するブロックに x 端子を追加します。既定ではこのオプションが選択されています。

状態微分 (連続時間) または更新 (離散時間) の出力

状態微分の値を出力するブロックまたはその値を更新するブロックに dx 端子を追加します。既定ではこのオプションが選択されています。

内挿された状態空間データの出力

構造体として状態空間データを出力するブロックに ss 端子を追加します。既定ではこのオプションが選択されています。

生成される構造体のフィールドは次のとおりです。

  • 状態空間行列 ABCD

  • 遅延 InputDelayOutputDelay および InternalDelayInternalDelay フィールドは、モデルに内部遅延がある場合にのみ使用できます。

内挿されたオフセットの出力

LPV モデル オフセット (u¯(p), y¯(p), x¯(p),dx¯(p)) を出力するブロックに offset 端子を追加します。

構造体のフィールドは、次のとおりです。

  • 連続時間の場合、InputOffsetOutputOffsetStateOffset および StateDerivativeOffset

  • 離散時間の場合、InputOffsetOutputOffsetStateOffset および StateUpdateOffset

ブロックのデータ型 (離散時間の場合のみ)

サポートされているデータ型。このオプションは、離散時間状態空間モデルにのみ使用します。double または single を指定します。

遅延の初期バッファー サイズ

遅延を含むモデル用に格納する入力ポイントの数に対応した、メモリ割り当ての初期サイズ。入力ポイントの数が初期バッファー サイズを超えた場合、ブロックは追加のメモリを割り当てます。既定のサイズは 1024 です。

モデルをアクセラレータ モードで実行するかモデルをビルドする場合は、初期バッファー サイズを、モデル内で予測される最大の遅延を扱えるよう十分大きいものにしてください。

固定バッファー サイズを使用

前のタイム ステップでの遅延入出力データを保存するために固定バッファー サイズを使用するかどうかを指定します。このオプションは、入力または出力の遅延を含む連続時間 LPV システムに使用します。バッファーが満杯になると、新規データにより、既にバッファー内にあるデータが置き換えられます。ソフトウェアにより線形外挿が使用されて、バッファー内にない出力値を予測します。

スケジューリング パラメーター入力端子の構成

2 入力、3 出力、4 状態の LPV モデルについて考えます。入力 u(2) および状態 x(1) をスケジューリング パラメーターとして使用します。次の図に示すように Simulink モデルを構成します。

線形パラメーター変動システムのシミュレーション

質量が外部負荷コマンドの関数として変化する線形マス-バネ-ダンパー システムについて考えます。支配方程式は次のとおりです。

m(u)y¨+cy˙+k(y)y=F(t)

ここで、m(u) は外部コマンド u に依存する質量、c は減衰比、k はバネの剛性、F(t) は強制入力です。y(t) は特定の時刻 t における質量の位置です。u の固定値に対して、システムは線形であり、次のように表せます。

A=[01kmcm],  B=[01m],  C=[10]x˙=Ax+Bu,  y=Cx

ここで、x=[yy˙] は状態ベクトル、mu の特定の値に対する質量の値です。

この例では、1 ~ 10 V の入力値の範囲でモデルの動作を学習します。u の各値に対して、質量を測定し、システムの線形表現を計算します。質量が m(u)=10u+0.1u2 という関係で入力と関連付けられるとします。1 ~ 10 の u の値に対して、次のような線形システムの配列の結果となります。

% Specify damping coefficient.
c = 5;   
% Specify stiffness.
k = 300; 
% Specify load command.
u = 1:10;
% Specify mass.
m = 10*u + 0.1*u.^2;
% Compute linear system at a given mass value.
for i = 1:length(u)
   A = [0 1; -k/m(i), -c/m(i)];
   B = [0; -1/m(i)];
   C = [1 0];
   sys(:,:,i) = ss(A,B,C,0); 
end

変数 u はスケジューリング入力です。この情報をモデルに追加します。

sys.SamplingGrid = struct('LoadCommand',u);

LPV System ブロックを構成します。

  • [状態空間配列] フィールドに sys を入力します。

  • 入力端子 par を、load コマンドの値を生成する 1 次元のソース信号に接続します。ソースが 1 ~ 10 の値を提供する場合、内挿を使用して特定の時刻インスタンスで線形モデルを計算します。それ以外は、外挿を使用します。

線形化の結果から LPV オフセットを抽出

Simulink モデルを開きます。

model = 'watertank';
open_system(model)

線形化 I/O を指定します。

io(1) = linio('watertank/Desired  Water Level',1,'input');
io(2) = linio('watertank/Water-Tank System',1,'output');

プラント パラメーター A および b を変化させ、3 行 4 列のパラメーター グリッドを作成します。

[A_grid,b_grid] = ndgrid(linspace(0.9*A,1.1*A,3),linspace(0.9*b,1.1*b,4));
params(1).Name = 'A';
params(1).Value = A_grid;
params(2).Name = 'b';
params(2).Value = b_grid;

線形化オプション セットを作成して、StoreOffsets オプションを true に設定します。

opt = linearizeOptions('StoreOffsets',true);

指定されたパラメーター グリッドを使用してモデルを線形化し、線形化のオフセットを info 構造体に返します。

[sys,op,info] = linearize('watertank',io,params,opt);

線形化のオフセットを抽出します。

offsets = getOffsetsForLPV(info)
offsets = 

  struct with fields:

     x: [2x1x3x4 double]
     y: [1x1x3x4 double]
     u: [1x1x3x4 double]
    dx: [2x1x3x4 double]

LPV System ブロックを構成するには、offsets からのフィールドを直接使用します。

端子

端子名

端子タイプ

(入/出力)

説明
u 入力

式 2で説明した入力信号 u(t)。多入力の場合、この端子は入力の次元の信号を受け入れます。

par入力

スケジューリング空間を定義する変数の信号を提供します ("サンプリング グリッド" 変数)。スケジューリング変数は、時間の関数、入力および状態、あるいは定数に指定できます。必要に応じて、LPV ブロックのクロック入力 (時刻)、入力信号 (u) よび出力信号 (xdx/dty) を使用してスケジューリング信号を準備することで、必要な依存関係を実現できます。

y出力

モデルの出力

x 出力

モデルの状態の値

xdot 出力

状態微分の値。状態微分は、スケジューリング パラメーターの定義に使用される場合があります。

ss出力

主要なシミュレーション タイム ステップにおけるローカル状態空間モデル

offset出力LPV モデルのオフセット

拡張機能

C/C++ コード生成
Simulink® Coder™ を使用して C および C++ コードを生成します。

R2014b で導入