このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
varyingGoal
ゲイン スケジュール コントローラーの可変調整目標
説明
固定コントローラーまたはゲイン スケジュール コントローラーを複数の設計点 (操作条件) で調整する場合、たとえば操作範囲の一部の領域での性能を緩和するなどのために、調整目標を操作条件の関数として調整しなければならないことがあります。varyingGoal
を使用して、設計点に暗黙的あるいは明示的に依存する調整目標を作成します。
は、調整目標の追加プロパティを構成します。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. Model Properties
設計点のグリッド全体にわたる可変のゲイン余裕と位相余裕を指定する調整目標を作成します。位置 '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: {[5×5 double] [5×5 double]} Settings: {'Openings' 'LO' 'Focus' [1 100]} SamplingGrid: [1×1 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
への入力に設計点インデックスを使用できます。たとえば、ゲイン余裕と位相余裕のデータが GM
と PM
のフィールドをもつ 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
オブジェクトに評価されるかによって決まります。たとえば、大半の可変調整目標で Openings
、Models
、Focus
などのプロパティを設定できます。可変の TuningGoal.Gain
目標の場合、Name,Value
ペアを使用して Stabilize
、InputScaling
、OutputScaling
などのプロパティを設定することもできます。各調整目標のプロパティのリストについては、それぞれの TuningGoal
オブジェクトのリファレンス ページを参照してください。
出力引数
変数調整目標。varyingGoal
オブジェクトとして返されます。このオブジェクトは、MATLAB 変数にあるすべての設計点における調整目標とその変動をキャプチャします。VG
は、systune
の入力引数で任意の TuningGoal
オブジェクトと同じように使用します。
VG
には次のプロパティがあります。
プロパティ | 説明 |
---|---|
Template | 可変目標のテンプレート。調整のために操作範囲全体にわたって値が変化する 1 つ以上のパラメーターの関数の関数ハンドルとして格納されます。このプロパティの初期値は |
Parameters | 各設計点での調整目標パラメーター。cell 配列として格納されます。cell 配列の各エントリは、各設計点でのパラメーター値を含む数値配列です。たとえば、次のテンプレートを使用した可変余裕目標があるとします。 FG = FH = @(gm,pm) TuningGoal.Margins('u',gm,pm); {GM,PM} です。ここで GM と PM は、各設計点での目的のゲイン余裕と位相余裕を含む配列です。 このプロパティの初期値は入力引数 |
Settings | 可変目標にある各目標インスタンスに適用されるプロパティの名前と値。cell 配列として格納されます。 既定: |
SamplingGrid | 設計点。各サンプリング変数用の値の配列を含む構造体として格納されます。設計点は四角形グリッド上に配置する必要はなく、操作範囲全体に分散させることができます。 サンプリング グリッドの詳細については、 既定: フィールドのない |
Name | 可変目標の名前。目標にラベルを付けるには 既定: |
ヒント
調整目標を可視化するには
viewGoal
を使用します。可変調整目標の場合、viewGoal
で生成した調整目標プロットを使用して各設計点での調整目標を確認することができます。詳細については、ゲイン スケジュール制御システムの検証を参照してください。
バージョン履歴
R2017b で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)