Main Content

varyingGoal

ゲイン スケジュール コントローラーの可変調整目標

説明

固定コントローラーまたはゲイン スケジュール コントローラーを複数の設計点 (操作条件) で調整する場合、たとえば操作範囲の一部の領域での性能を緩和するなどのために、調整目標を操作条件の関数として調整しなければならないことがあります。varyingGoal を使用して、設計点に暗黙的あるいは明示的に依存する調整目標を作成します。

VG = varyingGoal(FH,par1,par2,...) は、テンプレートと一連の目標-パラメーター値を使用して可変目標を指定します。テンプレート FH は、TuningGoal オブジェクトのいずれかとして評価される関数 TG = FH(p1,p2,...) を指定する関数ハンドルです。配列 par1,par2,... は、各設計点における調整目標パラメーター p1,p2,... の値を指定します。VG は、systune への入力で任意の TuningGoal オブジェクトと同じように使用します。

VG = varyingGoal(___,Name,Value) は、調整目標の追加プロパティを構成します。

すべて折りたたむ

設計点のグリッド全体にわたる可変のゲイン余裕と位相余裕を指定する調整目標を作成します。

次の 5 行 5 列の設計点グリッドを使用してコントローラーを調整すると仮定します。

[alpha,V] = ndgrid(linspace(0,20,5),linspace(700,1300,5));

さらに、次のようにそれぞれの設計点に対応するターゲット ゲイン余裕とターゲット位相余裕の 5 行 5 列の配列があるとします。

[GM,PM] = ndgrid(linspace(7,20,5),linspace(45,70,5));

各設計点で指定された余裕を適用するには、まず余裕目標のためのテンプレートを作成します。テンプレートは、ゲイン余裕と位相余裕の値を受け取って、これらの余裕を含む TuningGoal.Margins オブジェクトを返す関数です。

FH = @(gm,pm) TuningGoal.Margins('u',gm,pm);

テンプレートと余裕の配列を使用して可変目標を作成します。

VG = varyingGoal(FH,GM,PM);

どの設計点にどの目標が適用されるかをトレースしやすくするため、SamplingGrid プロパティを使用して VG に設計点情報を追加します。

VG.SamplingGrid = struct('alpha',alpha,'V',V);

VG は、他の任意の調整目標と同じように systune で使用します。viewGoal を使用して調整目標を可視化し、ターゲット余裕を満たさない設計点を特定します。

1 つのスケジューリング変数 a で変化するループ整形を指定する調整目標を作成します。

3 つの設計点にわたり 2*a として変化する交差周波数をもつループ整形を指定するとします。この要件を適用するには、まずループ整形目標のためのテンプレートを作成します。テンプレートは、数値スカラーの入力パラメーターを受け取って TuningGoal.LoopShape オブジェクトを返す関数です。関数によってループ整形を表す LTI モデルが作成されるように、関数入力はスカラーでなければなりません。

a = [5;10;15];
s = tf('s');
FH = @(A) TuningGoal.LoopShape('u',2*A/s);

ここで 'u' は、ループ整形要件を課す位置となる、システムの解析ポイントです。

テンプレートと配列を使用して可変目標を作成します。

VG = varyingGoal(FH,a);

VG に設計点情報を追加します。

VG.SamplingGrid = struct('a',a);

これで a の各値が、対応するループ整形を適用する調整目標に関連付けられます。たとえば、a の 3 番目のエントリ a = 15 が 3 番目のループ整形 30/s に関連付けられていることを確認します。

LS3 = getGoal(VG,'index',3);
tf(LS3.LoopGain)
ans =
 
  30
  --
  s
 
Continuous-time transfer function.

設計点のグリッド全体にわたる可変のゲイン余裕と位相余裕を指定する調整目標を作成します。位置 'LO' にあるループ開始点で評価され、1 ~ 100 rad/s の周波数範囲のみで適用されるように調整目標を構成します。

設計点のグリッドと、対応するターゲットのゲイン余裕と位相余裕のグリッドを指定します。また、可変余裕目標のためのテンプレート関数を作成します。

[alpha,V] = ndgrid(linspace(0,20,5),linspace(700,1300,5));
[GM,PM] = ndgrid(linspace(7,20,5),linspace(45,70,5));
FH = @(gm,pm) TuningGoal.Margins('u',gm,pm);

テンプレート関数と余裕配列を使用して可変目標を作成します。また、Name,Value のペアを使用して次を指定します。

  • 調整目標を評価するためにループを開く位置 (Openings プロパティ)。

  • 可変目標が適用される周波数範囲 (Focus プロパティ)。

基となる調整目標で指定したプロパティの名前と値は、可変目標の Settings プロパティに格納されます。

VG = varyingGoal(FH,GM,PM,'Openings','LO','Focus',[1,100])
VG = 
  varyingGoal with properties:

        Template: @(gm,pm)TuningGoal.Margins('u',gm,pm)
      Parameters: {[5x5 double]  [5x5 double]}
        Settings: {'Openings'  'LO'  'Focus'  [1 100]}
    SamplingGrid: [1x1 struct]
            Name: ''

  Variable tuning goal acting over a 5x5 grid of (gm,pm) values.

どの設計点にどの目標が適用されるかをトレースしやすくするため、SamplingGrid プロパティを使用して VG に設計点情報を追加します。

VG.SamplingGrid = struct('alpha',alpha,'V',V);

入力引数

すべて折りたたむ

可変目標のテンプレート。関数ハンドルとして指定します。FH は、TuningGoal オブジェクトのいずれかとして評価される 1 つ以上のパラメーターの関数を指定します。たとえば、システムで入力 r から出力 y へのステップ応答のオーバーシュートを制約し、この制約を設計点に応じて変更できるようにすると仮定します。TuningGoal.Overshoot オブジェクトを返す関数としてテンプレートを指定します。たとえば、FH無名関数として指定できます。

FH = @(os) TuningGoal.Overshoot('r','y',os);

TuningGoal.Overshoot には入力と出力信号以外にはパラメーターが 1 つしかないため、FH は 1 つの引数の関数のハンドルとなります。他の調整目標には、複数の引数を使用します。たとえば、TuningGoal.Margins にはゲイン余裕と位相余裕の 2 つのパラメーターがあります。したがって、可変余裕目標 FH はパラメーターを 2 つもちます。

FH = @(gm,pm) TuningGoal.Margins('u',gm,pm);

テンプレート関数によって、設計目標を非常に柔軟に作成することができます。たとえば、調整目標の仕様をパラメーター (a,b) の自明でない関数として作成する関数 goalspec(a,b) を記述して、MATLAB® ファイルに保存することができます。すると、テンプレート関数は次のように goalspec を呼び出します。

FH = @(a,b) TuningGoal.Margins('u',goalspec(a,b)); 

同様に、調整目標パラメーターが数値配列に収まらない場合、FH への入力に設計点インデックスを使用できます。たとえば、ゲイン余裕と位相余裕のデータが GMPM のフィールドをもつ struct 配列 S に格納されている場合、次を使用できます。

FH = @(idx) TuningGoal.Margins('u',S(idx).GM,S(idx).PM);

idx は設計点のグリッドの絶対インデックスです。

調整目標パラメーター。ゲイン スケジュール調整に使用されるモデル配列と同じ次元をもつ数値配列として指定します。調整目標のパラメーターごとに 1 つの配列を指定します。配列の各エントリは、対応する設計点に適用するパラメーター値です。たとえば、TuningGoal.Overshoot 目標には、最大オーバーシュートの 1 つのパラメーターのみがあります。したがって、パラメーターを次のように指定します。

par = osvals;

osvals は各設計点で適用するオーバーシュート値の配列です。

TuningGoal.Margins 目標にはゲイン余裕と位相余裕の 2 つのパラメーターがあります。したがって、可変余裕目標にはパラメーターを次のように指定します。

par1 = GM;
par2 = PM;

ここで GM は各設計点で適用するゲイン余裕値の配列、PM は各設計点で適用する位相余裕値の配列です。

特定の設計点で可変調整目標を非アクティブにするには、配列 par の対応するエントリを NaN に設定します。

名前と値の引数

引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

Name,Value ペアを使用して、基になる調整目標のプロパティを指定します。たとえば、点 'L' と点 'V' 間の可変ゲイン プロファイルを指定する、可変ゲイン目標を作成すると仮定します。さらに、周波数帯域 [0 pi/Ts] 内のみで、OuterLoop というラベルの付いた解析ポイントにループ開始点を設定してゲイン目標を適用します。Name,Value ペアを使用して、ゲイン目標のこれらのプロパティを指定します。

 FH = @(w) TuningGoal.Gain('F','V',tf(w,[1 w]));
 VG = varyingGoal(FH,wdata,'Focus',[0 pi/Ts],'Openings','OuterLoop');

設定が可能なプロパティは、関数 FH がどの TuningGoal オブジェクトに評価されるかによって決まります。たとえば、大半の可変調整目標で OpeningsModelsFocus などのプロパティを設定できます。可変の TuningGoal.Gain 目標の場合、Name,Value ペアを使用して StabilizeInputScalingOutputScaling などのプロパティを設定することもできます。各調整目標のプロパティのリストについては、それぞれの TuningGoal オブジェクトのリファレンス ページを参照してください。

出力引数

すべて折りたたむ

変数調整目標。varyingGoal オブジェクトとして返されます。このオブジェクトは、MATLAB 変数にあるすべての設計点における調整目標とその変動をキャプチャします。VG は、systune の入力引数で任意の TuningGoal オブジェクトと同じように使用します。

VG には次のプロパティがあります。

プロパティ説明
Template

可変目標のテンプレート。調整のために操作範囲全体にわたって値が変化する 1 つ以上のパラメーターの関数の関数ハンドルとして格納されます。このプロパティの初期値は FH 入力引数によって設定されます。

Parameters

各設計点での調整目標パラメーター。cell 配列として格納されます。cell 配列の各エントリは、各設計点でのパラメーター値を含む数値配列です。たとえば、次のテンプレートを使用した可変余裕目標があるとします。

FG = FH = @(gm,pm) TuningGoal.Margins('u',gm,pm);
このプロパティの値は {GM,PM} です。ここで GMPM は、各設計点での目的のゲイン余裕と位相余裕を含む配列です。

このプロパティの初期値は入力引数 par1,par2,... によって設定されます。

Settings

可変目標にある各目標インスタンスに適用されるプロパティの名前と値。cell 配列として格納されます。

既定: {}

SamplingGrid

設計点。各サンプリング変数用の値の配列を含む構造体として格納されます。設計点は四角形グリッド上に配置する必要はなく、操作範囲全体に分散させることができます。SamplingGrid プロパティと Parameters プロパティの配列のサイズは一致しなければなりません。

サンプリング グリッドの詳細については、ss リファレンス ページの SamplingGrid プロパティの説明を参照してください。

既定: フィールドのない struct

Name

可変目標の名前。目標にラベルを付けるには Name を string に設定します。

既定: ''

ヒント

  • 調整目標を可視化するには viewGoal を使用します。可変調整目標の場合、viewGoal で生成した調整目標プロットを使用して各設計点での調整目標を確認することができます。詳細については、ゲイン スケジュール制御システムの検証を参照してください。

バージョン履歴

R2017b で導入