Main Content

evalSurf

特定の設計点でのゲイン曲面の評価

説明

GV = evalSurf(GS,X) は、配列 X で指定された点のリストでゲイン曲面を評価します。点はスケジューリング変数の値を組み合わせたものです。したがって、X は N 行 M 列の配列です。ここで、N はゲインを評価する点の数であり、M は GS 内のスケジューリング変数の数です。

GV = evalSurf(GS,X1,...,XM) は、ベクトル X1,...,XM によって生成される四角形のグリッドのゲイン曲面を評価します。各ベクトルには GS の 1 つのスケジューリング変数の値が含まれています。

GV = evalSurf(___,gridflag) は、GV のレイアウトを指定します。

すべて折りたたむ

1 つのスケジューリング変数をもつゲイン曲面を作成し、リストされたスケジューリング変数の値でゲインを評価します。

tunableSurface を使用してゲイン曲面を作成するときは、ゲイン係数を調整する設計点を指定します。これらの点は、一般的には、プラントをサンプリングまたは線形化したスケジューリング変数の値になります。ただし、指定された設計点とは別のブレークポイントをもつルックアップ テーブルとしてゲイン曲面を実装する場合もあります。この例では、一連の設計点をもつゲイン曲面を作成し、それとは別の一連のスケジューリング変数の値を使用して曲面を評価します。

1 つのスケジューリング変数 t の二次関数として変化するスカラー ゲインを作成します。t = 0 から t = 40 まで、5 秒ごとにプラントを線形化してあると仮定します。

t = 0:5:40;
domain = struct('t',t);
shapefcn = @(x) [x,x^2];
GS = tunableSurface('GS',1,domain,shapefcn);

一般的には、制御システムの一部として係数を調整します。この例では、調整する代わりに係数をゼロ以外の値に手動で設定しています。

GS = setData(GS,[12.1,4.2,2]);

別の一連の時間の値でゲイン曲面を評価します。

tvals = [0,4,11,18,25,32,39,42];   % eight values
GV = evalSurf(GS,tvals)
GV = 8×1

    9.9000
   10.0200
   10.6150
   11.7000
   13.2750
   15.3400
   17.8950
   19.1400

GV は 8 行 1 列の配列です。tvals および GV を使用して、変数ゲインをルックアップ テーブルとして実装できます。

これらの変数の値のグリッドで 2 つのスケジューリング変数をもつゲイン曲面を評価します。

tunableSurface を使用してゲイン曲面を作成するときは、ゲイン係数を調整する設計点を指定します。これらの点は、一般的には、プラントをサンプリングまたは線形化したスケジューリング変数の値になります。ただし、指定された設計点とは別のブレークポイントをもつルックアップ テーブルとしてゲイン曲面を実装する場合もあります。この例では、一連の設計点をもつゲイン曲面を作成し、それとは別の一連のスケジューリング変数の値を使用して曲面を評価します。

2 つの独立変数 α および V の双一次関数であるスカラー値ゲイン曲面を作成します。

[alpha,V] = ndgrid(0:1.5:15,300:30:600);
domain = struct('alpha',alpha,'V',V);
shapefcn = @(x,y) [x,y,x*y];
GS = tunableSurface('GS',1,domain,shapefcn);

一般的には、制御システムの一部として係数を調整します。この例では、調整する代わりに係数をゼロ以外の値に手動で設定しています。

GS = setData(GS,[100,28,40,10]);

選択した α および V の値でゲインを評価します。

alpha_vec = [7:1:13];  % N1 = 7 points
V_vec = [400:25:625];  % N2 = 10 points
GV = evalSurf(GS,alpha_vec,V_vec);

ゲイン曲面を評価するブレークポイントは、domain で指定された範囲内でなくてもかまいません。ただし、ゲインを評価する範囲が調整に使用された範囲から離れすぎていると、警告が表示されます。

ブレークポイントは等間隔にする必要もありません。evalSurfndgrid(alpha_vec,V_vec) によって形成されるグリッドのゲイン曲面を評価します。結果として生じる配列の次元を確認します。

size(GV)
ans = 1×2

     7    10

既定では、グリッドの次元 N1-by-N2 が配列の最初で、その後にゲインの次元が続きます。GS はスカラー値ゲインであるため、GV の次元は [7,10,1,1] または同等の [7,10] です。

GV の各位置にある値は、グリッド内の対応する (alpha_vec,V_vec) ペアで評価されたゲインです。たとえば、GV(2,3)(alpha_vec(2),V_vec(3))、すなわち (8,450) で評価されたゲインです。

これらの変数の値のグリッドで、2 つのスケジューリング変数をもつアレイ値のゲイン曲面を評価します。

2 つのスケジューリング変数をもつベクトル値のゲインを作成します。

[alpha,V] = ndgrid(0:1.5:15,300:30:600);
domain = struct('alpha',alpha,'V',V);
shapefcn = @(x,y) [x,y,x*y];
GS = tunableSurface('GS',ones(2,2),domain,shapefcn);

初期の定数係数を ones(2,2) に設定することで、tunableSurface によって 2 行 2 列のゲイン行列が生成されます。この行列の各エントリは、2 つのスケジューリング変数の双一次関数である個別に調整可能なゲイン曲面です。言換えれば、ゲイン曲面は次のようになります。

GS=K0+K1α+K2V+K3αV,

ここで、係数 K0,,K3 はそれぞれが 2 行 2 列の行列です。

一般的には、これらのゲイン曲面の係数を制御システムの一部として調整します。この例では、調整する代わりに係数をゼロ以外の値に手動で設定しています。

K0 = 10*rand(2);
K1 = 10*rand(2);
K2 = 10*rand(2);
K3 = 10*rand(2);

tunableSurface オブジェクトは配列値の係数を連結して 2 行 8 列の配列にすることで保存します (tunableSurface のリファレンス ページを参照)。したがって、K0,,K3 のこれらの値を連結して GS の係数を変更します。

GS = setData(GS,[K0 K1 K2 K3]);

選択されたスケジューリング変数の値でゲイン曲面を評価します。

alpha_vec = [7:1:13];  % N1 = 7 points
V_vec = [400:25:625];  % N2 = 10 points
GV = evalSurf(GS,alpha_vec,V_vec,'gridlast');

'gridlast' は、ゲイン値のグリッドの次元 (7 行 10 列) が最後になるように配列 GV を並べます。ゲイン配列自体の次元 (2 行 2 列) が最初です。

size(GV)
ans = 1×4

     2     2     7    10

入力引数

すべて折りたたむ

評価するゲイン曲面。tunableSurface オブジェクトとして指定します。GS は任意の数のスケジューリング変数をもつことができ、スカラー値または配列値のいずれかです。

ゲイン曲面を評価する点。配列として指定します。点はスケジューリング変数の値を組み合わせたものです。X の次元は N 行 M 列です。ここで、M は GS 内のスケジューリング変数の数であり、N は GS を評価する点の数です。したがって、X はゲインを評価するスケジューリング変数の値の組み合わせをリストしたものです。たとえば、GS には 2 つのスケジューリング変数 (a および b) があり、10 組 (a,b) のペアで GS を評価すると仮定します。この場合、X は (a,b) をリストする 10 行 2 列の配列です。X の点は GS.SamplingGrid の設計点と一致している必要はありません。

ゲイン曲面を評価するスケジューリング変数の値。M 配列として指定します。ここで、M は GS 内のスケジューリング変数の数です。たとえば、GS に 2 つのスケジューリング変数 (a および b) がある場合、X1 および X2 はそれぞれ a および b の値のベクトルです。ゲイン曲面はグリッド ndgrid(X1,X2) で評価されます。このグリッドの値は GS.SamplingGrid の設計点と一致している必要はありません。

出力配列のレイアウト。'gridfirst' または 'gridlast' のいずれかで指定します。

  • 'gridfirst'GV のサイズは [N1,...,NM,Ny,Nu] で、最初がグリッドの次元、最後がゲインの次元です。このレイアウトは Ny = Nu = 1 であるスカラー ゲインの本来の形式です。

  • 'gridlast'GV のサイズは [Ny,Nu,N1,...,NM] で、最初がゲインの次元です。これは、行列値のゲインのより読みやすい形式です。

出力引数

すべて折りたたむ

ゲイン値。配列として返されます。GV には、X または X1,...,XM で指定された点 (スケジューリング変数の値) で評価されたゲインが含まれています。GV のサイズは、GS 内のスケジューリング変数の数、GS によって定義されるゲインの I/O 次元および gridflag の値によって異なります。

配列 X で指定された N 個の点のリストでゲインを計算する場合、GV のサイズは [N,Ny,Nu] です。ここで、[Ny,Nu] はゲインの I/O 次元です。たとえば、GS は 2 つのスケジューリング変数 (a および b) をもつスカラー ゲイン曲面であり、X は 10 組の (a,b) のペアを含む 10 行 2 列の配列であると仮定します。GV は 10 個の値の列ベクトルです。

ベクトル X1,...,XM で指定されたグリッドのゲインを計算する場合、GV の次元は gridflag の値に応じて異なります。

  • gridflag = 'gridfirst' (既定) — GV のサイズは [N1,...,NM,Ny,Nu] です。各 NiXi の長さ、つまり i 番目のスケジューリング変数の値の数です。たとえば、GS は 2 つのスケジューリング変数 (a および b) をもつスカラー ゲイン曲面であり、X1 および X2 はそれぞれ 4 個の a 値と 5 個の b 値のベクトルであると仮定します。GV のサイズは [4,5,1,1] または同等の [4,5] です。または、GS が 3 出力 2 入力のベクトル値ゲインの場合、GV のサイズは [4,5,3,2] です。

  • gridflag = 'gridlast'GV のサイズは [Ny,Nu,N1,...,NM] です。たとえば、GS は 2 つのスケジューリング変数 (a および b) をもつスカラー ゲイン曲面であり、X1 および X2 はそれぞれ 4 個の a 値と 5 個の b 値のベクトルであると仮定します。GV のサイズは [1,1,4,5] です。または、GS が 3 出力 2 入力のベクトル値ゲインの場合、GV のサイズは [3,2,4,5] です。

ヒント

  • evalSurf を使用して、調整されたゲイン曲面をルックアップ テーブルに変換します。X1,...,XM を目的のテーブルのブレークポイントに設定し、GV をテーブル データとして使用します。テーブルのブレークポイントは GS の調整に使用される設計点と一致する必要はありません。

バージョン履歴

R2015b で導入