Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

tunableSurface

ゲイン スケジューリング用の調整可能なゲイン曲面の作成

説明

tunableSurface では、"ゲイン スケジュール" をパラメーター化して調整できます。ゲイン スケジュールとは、1 つ以上のスケジューリング変数の関数として変化するゲインです。

調整を行う際には、変数ゲインを次の形式の滑らかな "ゲイン曲面" としてパラメーター化すると便利です。

K(n(σ))=γ[K0+K1F1(n(σ))++KMFM(n(σ))],

ここで

  • σ はスケジューリング変数のベクトル。

  • n(σ) は正規化関数 (出力引数 KNormalization プロパティを参照)。

  • γ はスケーリング係数 (出力引数 KNormalization プロパティを参照)。

  • F1,...,FM はユーザーが選択する基底関数。

  • K0,...,KM は調整する係数。

基底関数には汎用的な多項式展開の項を使用できます。また、K(σ) の想定される形状がわかっていれば、より具体的な関数も使用できます。その後、設計要件に合わせて、スケジューリング変数の値の範囲内で、systune を使用して係数 K0,...,KM を調整できます。

K = tunableSurface(name,K0init,domain,shapefcn) は、調整可能なゲイン曲面を作成します。

K(n(σ))=γ[K0+K1F1(n(σ))++KMFM(n(σ))].

調整可能な曲面 K には、shapefcn で指定される基底関数と、domain で表される σ 値 ("設計点") の離散集合が格納されます。調整可能なゲイン曲面には、調整可能な係数 K0,...,KM があります。ゲイン値は定数ゲイン K0init に初期化されます。K を静的または動的な他の要素と組み合わせることで、ゲイン スケジュール制御システムの閉ループ モデルを構築できます。あるいは、K を使用して、Simulink® モデルに対する slTuner インターフェイスでルックアップ テーブルをパラメーター化します。その後、選択した設計点において閉ループ システムが設計要件を満たすように、systune を使用して K0,...,KM を調整します。

K = tunableSurface(name,K0init,domain) は、一定の調整可能なゲインをもつ平面を作成します。この構文は、tunableGain(name,K0init) と等価です。

すべて折りたたむ

t の二次関数として変化するスカラー ゲイン K を作成します。

K(t)=K0+K1n(t)+K2(n(t))2.

このゲイン曲面で時間と共に変化するゲインを表現できます。係数 K0K1K2 は、この時変ゲインの調整可能なパラメーターです。この例では、t が 0 から 40 まで変化すると仮定します。この場合、正規化関数は n(t)=(t-20)/20 です。

調整可能なゲイン曲面 K(t) を MATLAB® で表現するには、まず、システムの設計点である t 値のベクトルを選びます。たとえば、設計点が時変システムの時間 t = 0 から t = 40 までの 5 秒おきのスナップショットである場合、次のサンプリング グリッドを使用します。

t = 0:5:40;
domain = struct('t',t);

変数ゲインの二次関数を指定します。

shapefcn = @(x) [x,x^2];

shapefcn は無名ベクトル関数のハンドルです。このベクトルの各要素が、変数ゲインを記述する多項式展開の項になります。tunableSurface では定数関数 f0(t)=1 が暗黙的に仮定されるため、この関数を shapefcn に含める必要はありません。

調整可能なゲイン曲面 K(t) を作成します。

K = tunableSurface('K',1,domain,shapefcn)
Tunable surface "K" of scalar gains with:
  * Scheduling variables: t
  * Basis functions: t,t^2
  * Design points: 1x9 grid of t values
  * Normalization: default (from design points)

設計点や基底関数など、ゲイン曲面の特性の概要が表示されます。K のプロパティを調べます。

get(K)
    BasisFunctions: @(x)[x,x^2]
      Coefficients: [1x3 realp]
      SamplingGrid: [1x1 struct]
     Normalization: [1x1 struct]
              Name: 'K'

調整可能な曲面の Coefficients プロパティは、調整可能な係数の配列 [K0,K1,K2] であり、配列値の realp ブロックとして格納されます。

これで、この調整可能な曲面を制御システム モデルで使用できます。MATLAB で調整する場合は、制御設計ブロックを使用して調整可能な制御システム モデルを作成する場合と同じように、K を制御システムの他の要素と相互接続します。Simulink® で調整する場合は、setBlockParam を使用して、KslTuner インターフェイスにおける調整可能なブロックのパラメーター化にします。systune を使用してモデルまたは slTuner インターフェイスを調整すると、結果のモデルまたはインターフェイスには係数 K0K1K2 の調整後の値が格納されます。

係数を調整した後は、viewSurf コマンドを使用して結果のゲイン曲線の形状を表示できます。この例では、調整する代わりに係数をゼロ以外の値に手動で設定しています。結果のゲインを時間の関数として表示します。

Ktuned = setData(K,[12.1,4.2,2]);
viewSurf(Ktuned)

Figure contains an axes object. The axes object with title Gain K(t), xlabel t, ylabel K contains an object of type line.

viewSurf を実行すると、domain で指定されゲイン曲面の SamplingGrid プロパティに格納されているスケジューリング変数の値の範囲に対して、ゲインがスケジューリング変数の関数として表示されます。

この例では、2 つのスケジューリング変数に双線形従属する、スカラー ゲイン K をモデル化する方法を説明します。そのためには、2 つの変数の独立した依存関係を表す設計点のグリッドを作成します。

最初の変数 α は 0 ~ 15 度の範囲の入射角で、2 番目の変数 V は 300 ~ 600 m/s の範囲の速度であると仮定します。既定では、正規化された変数が以下のようになります。

x=α-7.57.5,y=V-450150.

ゲイン曲面は次のようにモデル化されます。

K(α,V)=K0+K1x+K2y+K3xy,

ここで K0,...,K3 は調整可能なパラメーターです。

α および V に線形に等間隔な設計点のグリッド (αV) を作成します。これらの設計点は、ゲイン曲面の係数の調整に使用されるスケジューリング変数の値です。プラントをサンプリングしたパラメーターの値と対応していなければなりません。

[alpha,V] = ndgrid(0:3:15,300:50:600);

これらの配列 alpha および V は、2 つのスケジューリング変数の独立した変化を、それぞれが全範囲にわたって表します。これらを構造体に含めて、調整可能な曲面の設計点を定義します。

domain = struct('alpha',alpha,'V',V);

双一次展開を記述する基底関数を作成します。

shapefcn = @(x,y) [x,y,x*y];  % or use polyBasis('canonical',1,2)

shapefcn から返された配列内にある基底関数は、次のとおりです。

F1(x,y)=xF2(x,y)=yF3(x,y)=xy.

調整可能なゲイン曲面を作成します。

K = tunableSurface('K',1,domain,shapefcn);

調整可能な曲面は、パラメーター化として、Simulink モデルのルックアップ テーブル ブロックまたは MATLAB Function ブロックで使用できます。あるいは、モデル相互接続コマンドを使用して、MATLAB でモデル化された制御システムに調整可能な要素として組み込みます。係数の調整の後は、viewSurf コマンドを使用して結果のゲイン曲面を調べることができます。この例では、調整する代わりに係数をゼロ以外の値に手動で設定し、結果のゲインを表示しています。

Ktuned = setData(K,[100,28,40,10]);
viewSurf(Ktuned)

Figure contains an axes object. The axes object with title Gain K(alpha,V), xlabel alpha, ylabel V contains an object of type surface.

viewSurf を実行すると、domain で指定されゲイン曲面の SamplingGrid プロパティに格納されている値の範囲に対して、ゲイン曲面がスケジューリング変数の関数として表示されます。

操作領域において規則的なグリッドを形成しない設計点を使用してゲイン曲面を作成します。ゲイン曲面は、正規化されたスケジューリング変数 αN および βN の双一次関数として変化します。

K(αN,βN)=K0+K1αN+K2βN+K3αNβN.

スケジューリング変数の対象とする値が、次の (α,β) のペアであると仮定します。

(α,β)={(-0.9,0.05)(-1.5,0.6)(-1.5,0.95)(-2.5,0.5)(-3.2,0.7)(-3.9,0.3).

(α,β) のサンプル値をベクトルとして指定します。

alpha = [-0.9;-1.5;-1.5;-2.5;-3.2;-3.9];
beta = [0.05;0.6;0.95;0.5;0.7;0.3];
domain = struct('alpha',alpha,'beta',beta);

ここでは、(α,β) の値の規則的なグリッドではなく、(α,β) 空間の等間隔でないポイントでシステムをサンプリングします。

plot(alpha,beta,'o')

Figure contains an axes object. The axes contains a line object which displays its values using only markers.

基底関数を指定します。

shapefcn = @(x,y) [x,y,x*y];

これらのサンプリングした関数の値を使用して、ゲイン曲面の調整可能なモデルを作成します。

K = tunableSurface('K',1,domain,shapefcn)
Tunable surface "K" of scalar gains with:
  * Scheduling variables: alpha,beta
  * Basis functions: alpha,beta,alpha*beta
  * Design points: 6x1 grid of (alpha,beta) values
  * Normalization: default (from design points)

領域は、6 組の (α,β) のペアのリストになります。既定では、αβ は正規化によって各変数の範囲の中心が 0 になるようシフトされ、範囲が -1 ~ 1 になるようにスケーリングされます。

K.Normalization
ans = struct with fields:
      InputOffset: [-2.4000 0.5000]
     InputScaling: [1.5000 0.4500]
    OutputScaling: 1

2 つのスケジューリング変数を受け取って 3 行 3 列のゲイン行列を返す調整可能なゲイン曲面を作成します。ゲイン行列の各エントリは、2 つのスケジューリング変数の独立した関数です。

設計点のグリッド (alpha,V) を作成します。

[alpha,V] = ndgrid(0:3:15,300:50:600);
domain = struct('alpha',alpha,'V',V);

曲面がスケジューリング変数によってどのように変化するかを記述する基底関数を作成します。alphaV で双一次展開を記述する基底を使用します。

shapefcn = polyBasis('canonical',1,2);

調整可能な曲面を作成するには、行列値のゲイン曲面の初期値を指定します。この値は、正規化されたスケジューリング変数がともに 0 である場合のゲイン曲面の値を設定します。tunableSurface は、指定した初期値からゲイン曲面の次元を取得します。したがって、3 行 3 列のゲイン行列を作成するには、3 行 3 列の初期値を使用します。

K0init = diag([0.05 0.05 -0.05]);
K0 = tunableSurface('K',K0init,domain,shapefcn)
Tunable surface "K" of 3x3 gain matrices with:
  * Scheduling variables: alpha,V
  * Basis functions: @(x1,x2)utFcnBasisOuterProduct(FDATA_,x1,x2)
  * Design points: 6x7 grid of (alpha,V) values
  * Normalization: default (from design points)

入力引数

すべて折りたたむ

調整可能なゲイン曲面を識別するラベル。文字ベクトルとして指定します。tunableSurface では、曲面の調整可能な係数を表す realp ブロックにこの名前を使用します。したがって、制御システムの genss モデルや slTuner インターフェイスでは、この名前を使用して調整可能なゲイン係数を参照できます。

調整可能なゲイン曲面の定数項の初期値。スカラーまたは配列として指定します。K0init の次元により、ゲイン曲面の I/O 次元が決まります。たとえば、ゲイン曲面で 2 入力 2 出力のゲインを表す場合、K0init = ones(2) と設定できます。残りの係数 K1,K2,... は、常に K0 と同じサイズになります。調整可能な係数は、それぞれの I/O チャネルのゲインを個別に調整できるように、自動的に展開されます。

たとえば、2 入力 2 出力の曲面の場合、ゲイン行列の各要素に対する一連の展開係数があります。

調整可能なゲイン行列 K(n(σ)) の各要素 Kij は次のようになります。

Kij(n(σ))=Kij0+Kij1F1(n(σ))++KijMFM(n(σ)).

ゲイン曲面を調整する設計点。構造体として指定します。この構造体のフィールドに、ゲイン スケジュール調整用にプラントをサンプリングするスケジューリング変数の値を格納します。たとえば、2 つのスケジューリング変数 α および V の関数として変化するゲインを調整するとします。α と V の値のグリッドで、α = [0.5,0.10,0.15] および V = [700,800,900,1000] としてプラントを線形化します。

.設計点を次のように指定します。

[alpha,V] = ndgrid([0.5,0.10,0.15],[700,800,900,1000]);
domain = struct('alpha',alpha,'V',V);

設計点は四角形または等間隔のグリッド上になくてもかまいません (不規則なグリッドのゲイン曲面を参照)。ただし、最適な結果を得るために、操作条件の全範囲をカバーする設計点を使用してください。調整時はこれらの設計点しか考慮されないため、設計点と大きく異なる操作条件においては調整後のゲイン スケジュールの有効性に問題が生じます。

スケジューリング変数でゲイン曲面をモデル化するのに使用する基底関数。関数ハンドルとして指定します。ハンドルに関連付けられた関数は、スケジューリング変数の正規化された値を入力として受け取り、基底関数の値のベクトルを返します。基底関数は常に正規化された範囲 [–1,1] で演算を行います。tunableSurface は、スケジューリング変数をこの区間に暗黙的に正規化します。

たとえば、スケジューリング変数の値が α = [0.5,0.10,0.15] および V = [700,800,900,1000] であるとします。次の式では、これらの変数において双一次のゲイン曲面に対する基底関数を作成しています。

shapefcn = @(x,y) [x y x*y];

shapefcn は 2 変数の無名関数です。基底関数はパラメーター化されたゲイン G(α,V)=G0+G1αN+G2VN+G3αNVN を記述します。ここで、αN と VN は正規化されたスケジューリング変数です (KNormalization プロパティを参照)。

無名関数を使用すると、変数ゲインを記述するために必要な一連の基底関数を任意に指定できます。また、一般的に使用される展開については、次の補助関数を使用して基底関数を自動的に生成することもできます。

  • polyBasis — べき級数展開およびチェビシェフ展開。

  • fourierBasis — 周期的なフーリエ級数展開。fourierBasis では周期的な基底関数が生成され、それらの関数で定義されるゲイン曲面 K は K(–1) = K(1) を満たします。tunableSurface を使用してゲイン曲面を作成する場合、domain で指定したスケジューリング変数の範囲は区間 [–1,1] に正規化されます。したがって、周期的な基底関数を使用する場合は、対応するスケジューリング変数のサンプリング範囲が厳密に 1 つの区間と一致していなければなりません。この制限により、基底関数の周期性がスケジューリング変数の周期性と一致するようになります。たとえば、定期的に変化するスケジューリング変数が 0 ~ 2π の範囲の角度である場合、domain の対応する値の範囲も 0 ~ 2π でなければなりません。

  • ndBasis — 低次元の展開からの多次元展開の作成。この関数は、スケジューリング変数ごとに異なる基底関数を使用する場合に便利です。

これらの関数で生成される基底関数の詳細については、それぞれの関数のリファレンス ページを参照してください。

出力引数

すべて折りたたむ

調整可能なゲイン曲面。tunableSurface オブジェクトとして返されます。このオブジェクトには、ゲイン曲面の係数、基底関数、その他の情報を格納する次のプロパティがあります。

  • BasisFunctions — 基底関数。関数ハンドルとして指定されます。ゲイン曲面の作成時、shapefcn 入力引数でこのプロパティの初期値が設定されます。

  • Coefficients — ゲイン曲面の調整可能な係数。配列値の調整可能なパラメーター realp として指定されます。K0init の次元と shapefcn の基底関数の数によって、K.Coefficients の次元が決まります。

    スカラー ゲインの場合、K.Coefficients の次元は [1,M+1] (M は基底関数の数) になります。K.Coefficients 内の要素は、調整可能な係数 K0,...,KM に対応します。

    配列値ゲインの場合、各係数が K0init の次元に展開されます。これらの展開された係数は K.Coefficients で水平方向に連結されます。したがって、たとえば 2 入力 2 出力のゲイン曲面の場合、K.Coefficients の次元は [2,2(M+1)] になります。

    調整可能なゲイン行列 K(n(σ)) の各要素 Kij は次のようになります。

    Kij(n(σ))=Kij0+Kij1F1(n(σ))++KijMFM(n(σ)).

  • SamplingGrid — 設計点のグリッド。データ構造体として指定されます。ゲイン曲面の作成時、domain 入力引数でこのプロパティの初期値が設定されます。

  • Normalization — 正規化オフセットおよびスケーリング。次のフィールドをもつ構造体として指定されます。

    • InputOffset — 各スケジューリング変数のオフセットのベクトル。

    • InputScaling — 各スケジューリング変数のスケーリング係数のベクトル。

    • OutputScaling — 全体のゲインのスケーリング係数。

    一般的に、tunableSurface のパラメーター化は次の形式を取ります。

    K(σ)=OutputScaling[K0+K1F1(n(σ))++KmFm(n(σ))],

    ここで n(σ) は、次で与えられる正規化されたスケジューリング変数です。

    n(σ)=σInputOffsetInputScaling.

    tunableSurface は、スケジューリング変数を正規化してその数値範囲を圧縮し、最適化プロセスの数値的安定性を改善します。既定では OutputScaling = 1 で、tunableSurface は、各スケジューリング変数の SamplingGrid 領域を [–1,1] にマッピングする InputOffsetInputScaling の値を計算します。したがって、設計点範囲の中心で n = 0 になります。

    これらのフィールドの値を調整することで、既定の正規化を変更できます。以下に例を示します。

    • 特定の設計点に対して既知のゲイン値がある場合、設計点で n = 0 となる Normalization.InputOffset を設定できます。その後、K0init を既知のゲイン値に設定します。

    • スケジューリング変数を非負の値に制限する場合、Normalization.InputOffset を設計グリッドにおけるその変数の最小値に設定します。この制限は、たとえば基底関数が σ を含む場合などに有用です。

  • Name — ゲイン曲面の名前。文字ベクトルとして指定されます。ゲイン曲面の作成時、name 入力引数でこのプロパティの初期値が設定されます。

ヒント

  • MATLAB® でモデル化された制御システムでゲイン曲面を調整する場合: domain の設計点に対応するプラント モデルの配列でゲイン曲面を接続します。たとえば、G がそのような配列になっていて、K が変数の積分時間を表しているとします。次のコマンドにより、systune コマンドで調整可能な閉ループ モデルが作成されます。

    C0 = tf(K,[1 0]);
    T0 = feedback(C0*G,1);
  • Simulink でモデル化された制御システムでゲイン曲面を調整する場合: ゲイン曲面を使用して、Simulink モデルのルックアップ テーブル、行列内挿、または MATLAB function ブロックをパラメーター化します。たとえば、Simulink モデルに対する slTuner インターフェイスが ST0 で、インターフェイスの調整ブロックの名前が GainTable であるとします。次のコマンドにより、調整可能なゲイン曲面への GainTable のパラメーター化が設定されます。

    ST0 = setBlockParam(ST0,'GainTable',K);

    詳細については、ゲイン スケジュールのパラメーター化を参照してください。

  • writeBlockValue (Simulink Control Design) を使って調整されたゲイン曲面を Simulink モデルに書き戻す場合、ソフトウェアは codegen を使用してゲイン曲面の MATLAB コードを生成します。codegen を手動で使用して、このコードを確認することができます。

バージョン履歴

R2015b で導入