ゲイン スケジュール制御の隠れ結合
この例では、コントローラーの構成に応じてゲイン スケジュール制御で発生する可能性がある "隠れ結合" について説明します。これは、[1] の例 2、8、9、11 に対応します。
LPV プラント
次の方程式で非線形プラントが定義されます。
平衡点の集合は でパラメーター化されています。
これらの平衡点の周囲の線形化によって LPV モデルが得られます。
lpvss を使用して、この LPV プラントを作成します。データ関数はファイル lpvHCModel.m で定義されています。 が で無限であるため、特異点を避けるために を範囲 [–0.99,0.99] にクリップします。
pmax = 0.99; G = lpvss('p',@(t,p) lpvHCModel(t,p,pmax),'StateName','x');
ゲイン スケジュール PI コントローラー
ゲイン スケジュールの比例積分 (PI) コントローラー は、領域の各点において閉ループの減衰比 および固有振動数 を達成するように設計されています。このコントローラーは 2 つの異なる形式で作成できます。
コントローラー では、積分器の入力に積分ゲインがあります。
コントローラー では、積分器の出力に積分ゲインがあります。
これらの形式は、 が定数であれば等価です。ただし、パラメーターが時間によって変化する場合は 2 つの形式で入出力応答が異なります。この例では、これらの 2 つのオプションの閉ループ性能を比較します。
この例では、これらの 2 つのコントローラーのコードがファイル hcKinFCN.m および hcKoutFCN.m に用意されています。lpvss を使用して 2 つのコントローラーを作成します。
Kin = lpvss('p',@(t,p) hcKinFCN(t,p,pmax)); Kout = lpvss('p',@(t,p) hcKoutFCN(t,p,pmax));
feedback を使用して、各コントローラーの閉ループ システムの LPV モデルを作成します。
CLin = feedback(G*Kin,1); CLout = feedback(G*Kout,1);
LTI の解析
いくつかの の固定値について、閉ループ応答を評価します。
5 つの 値で LPV システムをサンプリングします。
Nvals = 5; pvals = linspace(-0.9,0.9,Nvals); CLinvals = sample(CLin,[],pvals); CLoutvals = sample(CLout,[],pvals);
の固定値に対するボード応答をプロットします。
bode(CLinvals,'b',CLoutvals,'r--',{1e-2,1e1});

が定数の場合、積分ゲインの位置はコントローラーに影響しません。したがって、2 つのフィードバック ループの応答が同じになります。
LPV シミュレーション
2 つのステップ振幅 rstep = 0.3 および rstep = 0.7 について、閉ループ LPV モデルのステップ応答を計算します。これにより、非線形モデルに対する各ゲイン スケジュール コントローラーの追従性能の近似が得られます。どちらのコントローラーでも をスケジューリング変数として使用します。
Kout では においてフィードバック ループが局所的に不安定になり、Kin では のすべてにおいて局所的な安定性が維持されます [1]。これらの結果を LPV シミュレーションで再現してみます。
Tf = 30; tsim = linspace(0,Tf,1000); xinit = [0;0]; rstep = 0.3; Config = RespConfig('Amplitude',rstep,'Delay',1,'InitialState',xinit); pFcn = @(t,x,u) tanh(x(1)); step(CLin,CLout,tsim,pFcn,Config), grid title('Step Amplitude 0.3') legend('Kin','Kout','location','Best')

rstep = 0.7; Config = RespConfig('Amplitude',rstep,'Delay',1,'InitialState',xinit); step(CLin,CLout,tsim,pFcn,Config), grid title('Step Amplitude 0.7') legend('Kin','Kout','location','Best')

LPV シミュレーションにおいて、Kin (積分器の入力の積分ゲイン) ではフィードバック ループの安定性が維持されますが、Kout では大きい設定点の変化でリミット サイクルが見られます。出力 が 1 を超えることはないため、このサイクルは実際の非線形動作の近似にすぎません。LPV プラント モデルは局所的に線形であり、関数 の飽和動作を捉えることはできません。
LPV モデルの忠実度をさらに評価するために、非線形シミュレーションで実際の非線形プラントを使用して比較します。
閉ループ システムの Simulink® モデルを開きます。
mdl = 'HiddenCouplings';
open_system(mdl)
積分器の出力の Ki で応答をシミュレートします。
usey = 1;
useKout = 1;
simout = sim('HiddenCouplings',Tf);LPV と非線形の応答をコントローラー Kout で比較します。
y = step(CLout,tsim,pFcn,Config); plot(tsim,y,simout.tout,simout.y,'--') title('Limit cycle detection for Kout') legend('LPV','Nonlinear','location','Best')

予想どおり、 の厳密な非線形性により、結果は完全には一致しません。それでも、LPV シミュレーションでは、ほぼ正しい周期でリミット サイクルが正しく予測されます。
基準信号でのスケジューリング
でスケジューリングすると、スケジューリング機能によってプラントとコントローラーの間に追加のフィードバック ループが作成されます。つまり、step でシミュレートされた閉ループ モデルは準 LPV であり、状態依存のスケジューリングが原因で不安定になります。出力 は基準信号 に追従することになるため、真に外因的な信号である でコントローラーをスケジューリングすることが代替手法となります。step コマンドでパラメーターの軌跡 を に置き換えることで、2 つの手法を簡単に比較できます。
rstep = 0.3; Config = RespConfig('Amplitude',rstep,'Delay',1,'InitialState',xinit); r = rstep*(tsim>=1); step(CLin,CLout,'r--',tsim,r,Config), grid title('Scheduling on r, Step Amplitude 0.3') legend('Kin','Kout','location','Best')

より大きいステップ振幅でシミュレートします。
rstep = 0.7; Config = RespConfig('Amplitude',rstep,'Delay',1,'InitialState',xinit); step(CLin,CLout,'r--',tsim,r,Config), grid
Warning: While saving an object of class 'controllib.chart.StepPlot':
Legend cannot be a child of AxesLayoutManager.
Error in <a href="matlab:matlab.lang.internal.introspective.errorDocCallback('controllib.chart.internal.mixin.chartview.core.LegendMixin/initializeLegends', '/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/shared/controllib/graphics/+controllib/+chart/+internal/+mixin/+chartview/+core/LegendMixin.m', 226)" style="font-weight:bold">controllib.chart.internal.mixin.chartview.core.LegendMixin/initializeLegends</a> (<a href="matlab: opentoline('/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/shared/controllib/graphics/+controllib/+chart/+internal/+mixin/+chartview/+core/LegendMixin.m',226,0)">line 226</a>)
set(this.Legends(ii,jj),Axes=ax(ii,jj),Parent=ax(ii,jj).Parent,...
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in <a href="matlab:matlab.lang.internal.introspective.errorDocCallback('controllib.chart.internal.mixin.chartview.core.LegendMixin/updateLegends', '/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/shared/controllib/graphics/+controllib/+chart/+internal/+mixin/+chartview/+core/LegendMixin.m', 105)" style="font-weight:bold">controllib.chart.internal.mixin.chartview.core.LegendMixin/updateLegends</a> (<a href="matlab: opentoline('/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/shared/controllib/graphics/+controllib/+chart/+internal/+mixin/+chartview/+core/LegendMixin.m',105,0)">line 105</a>)
initializeLegends(this);
^^^^^^^^^^^^^^^^^^^^^^^
Error in <a href="matlab:matlab.lang.internal.introspective.errorDocCallback('controllib.chart.internal.foundation.BaseChartView/updateAxes', '/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/shared/controllib/graphics/+controllib/+chart/+internal/+foundation/BaseChartView.m', 661)" style="font-weight:bold">controllib.chart.internal.foundation.BaseChartView/updateAxes</a> (<a href="matlab: opentoline('/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/shared/controllib/graphics/+controllib/+chart/+internal/+foundation/BaseChartView.m',661,0)">line 661</a>)
updateLegends(this);
^^^^^^^^^^^^^^^^^^^
Error in <a href="matlab:matlab.lang.internal.introspective.errorDocCallback('controllib.chart.internal.foundation.BaseChartView/update', '/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/shared/controllib/graphics/+controllib/+chart/+internal/+foundation/BaseChartView.m', 414)" style="font-weight:bold">controllib.chart.internal.foundation.BaseChartView/update</a> (<a href="matlab: opentoline('/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/shared/controllib/graphics/+controllib/+chart/+internal/+foundation/BaseChartView.m',414,0)">line 414</a>)
updateAxes(this);
^^^^^^^^^^^^^^^^
Error in <a href="matlab:matlab.lang.internal.introspective.errorDocCallback('controllib.chart.internal.foundation.AbstractPlot/updateView', '/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/shared/controllib/graphics/+controllib/+chart/+internal/+foundation/AbstractPlot.m', 658)" style="font-weight:bold">controllib.chart.internal.foundation.AbstractPlot/updateView</a> (<a href="matlab: opentoline('/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/shared/controllib/graphics/+controllib/+chart/+internal/+foundation/AbstractPlot.m',658,0)">line 658</a>)
update(this.View);
^^^^^^^^^^^^^^^^^
Error in <a href="matlab:matlab.lang.internal.introspective.errorDocCallback('controllib.chart.internal.foundation.AbstractPlot/update', '/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/shared/controllib/graphics/+controllib/+chart/+internal/+foundation/AbstractPlot.m', 574)" style="font-weight:bold">controllib.chart.internal.foundation.AbstractPlot/update</a> (<a href="matlab: opentoline('/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/shared/controllib/graphics/+controllib/+chart/+internal/+foundation/AbstractPlot.m',574,0)">line 574</a>)
updateView(this);
^^^^^^^^^^^^^^^^
Error in matlab.graphics.chart.internal.ChartBaseProxy/doUpdateInternal
Error in matlab.graphics.chart.internal.ChartBaseProxy/doUpdateChart
Error in matlab.graphics.chartcontainer.mixin.internal.Positionable/get.InnerPosition
Error in matlab.graphics.chartcontainer.mixin.internal.Positionable/getPositionStorageImpl
Error in matlab.graphics.chartcontainer.mixin.internal.Positionable/get.PositionStorage
Error in matlab.internal.editor.figure.SerializedFigureState/serialize
Error in matlab.internal.editor.FigureProxy/createWebFigureSnapshot
Error in matlab.internal.editor.FigureManager
Error in matlab.internal.editor.FigureManager
Error in matlab.internal.editor.FigureManager.saveSnapshot
Error in matlab.internal.editor.FigureManager
Error in matlab.internal.editor.FigureManager.figureBeingCleared
Error in <a href="matlab:matlab.lang.internal.introspective.errorDocCallback('matlab.graphics.internal.clearNotify', '/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/matlab/graphics/graphics/+matlab/+graphics/+internal/clearNotify.m', 43)" style="font-weight:bold">matlab.graphics.internal.clearNotify</a> (<a href="matlab: opentoline('/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/matlab/graphics/graphics/+matlab/+graphics/+internal/clearNotify.m',43,0)">line 43</a>)
matlab.internal.editor.FigureManager.figureBeingCleared(fig, flag);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in <a href="matlab:matlab.lang.internal.introspective.errorDocCallback('controllib.chart.internal.utils.ControlsChartFactory/parseAxes', '/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/shared/controllib/graphics/+controllib/+chart/+internal/+utils/ControlsChartFactory.m', 357)" style="font-weight:bold">controllib.chart.internal.utils.ControlsChartFactory/parseAxes</a> (<a href="matlab: opentoline('/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/shared/controllib/graphics/+controllib/+chart/+internal/+utils/ControlsChartFactory.m',357,0)">line 357</a>)
matlab.graphics.internal.clearNotify(fig, ax);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in <a href="matlab:matlab.lang.internal.introspective.errorDocCallback('controllib.chart.internal.utils.ControlsChartFactory/processParent', '/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/shared/controllib/graphics/+controllib/+chart/+internal/+utils/ControlsChartFactory.m', 312)" style="font-weight:bold">controllib.chart.internal.utils.ControlsChartFactory/processParent</a> (<a href="matlab: opentoline('/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/shared/controllib/graphics/+controllib/+chart/+internal/+utils/ControlsChartFactory.m',312,0)">line 312</a>)
[chartInputs,ax] = controllib.chart.internal.utils.ControlsChartFactory.parseAxes(ax,type);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in <a href="matlab:matlab.lang.internal.introspective.errorDocCallback('controllib.chart.internal.utils.ControlsChartFactory.plot', '/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/shared/controllib/graphics/+controllib/+chart/+internal/+utils/ControlsChartFactory.m', 28)" style="font-weight:bold">controllib.chart.internal.utils.ControlsChartFactory.plot</a> (<a href="matlab: opentoline('/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/shared/controllib/graphics/+controllib/+chart/+internal/+utils/ControlsChartFactory.m',28,0)">line 28</a>)
[hParent,chartInputs,ax] = controllib.chart.internal.utils.ControlsChartFactory.processParent(hParent,type);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in <a href="matlab:matlab.lang.internal.introspective.errorDocCallback('stepplot', '/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/shared/controllib/graphics/charts/stepplot.m', 71)" style="font-weight:bold">stepplot</a> (<a href="matlab: opentoline('/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/shared/controllib/graphics/charts/stepplot.m',71,0)">line 71</a>)
h = controllib.chart.internal.utils.ControlsChartFactory.plot("step",...
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in <a href="matlab:matlab.lang.internal.introspective.errorDocCallback('DynamicSystem/step', '/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/shared/controllib/engine/@DynamicSystem/step.m', 93)" style="font-weight:bold">DynamicSystem/step</a> (<a href="matlab: opentoline('/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/shared/controllib/engine/@DynamicSystem/step.m',93,0)">line 93</a>)
h = stepplot(varargin{:});
^^^^^^^^^^^^^^^^^^^^^
Error in <a href="matlab:matlab.lang.internal.introspective.errorDocCallback('LiveEditorEvaluationHelperEeba0b16e3e9c42ec9744cc50ec25cdab', '/tmp/Bdoc26a_3146167_4015016/Editor_pomtx/LiveEditorEvaluationHelperEeba0b16e3e9c42ec9744cc50ec25cdab.m', 90)" style="font-weight:bold">LiveEditorEvaluationHelperEeba0b16e3e9c42ec9744cc50ec25cdab</a> (<a href="matlab: opentoline('/tmp/Bdoc26a_3146167_4015016/Editor_pomtx/LiveEditorEvaluationHelperEeba0b16e3e9c42ec9744cc50ec25cdab.m',90,0)">line 90</a>)
step(CLin,CLout,'r--',tsim,r,Config), grid %[output:8459cf08]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in <a href="matlab:matlab.lang.internal.introspective.errorDocCallback('matlab.internal.liveeditor.LiveEditorUtilities.doExecute', '/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/matlab/codetools/+matlab/+internal/+liveeditor/@LiveEditorUtilities/doExecute.m', 85)" style="font-weight:bold">matlab.internal.liveeditor.LiveEditorUtilities.doExecute</a> (<a href="matlab: opentoline('/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/matlab/codetools/+matlab/+internal/+liveeditor/@LiveEditorUtilities/doExecute.m',85,0)">line 85</a>)
builtin('_liveCodeExecutionPortal', 'matlab.internal.editor.EvaluationOutputsService.evalRegions', editorId, uuid, startLine, endLine, fullFileText, false, true, fileName, -1, '', sectionData);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in <a href="matlab:matlab.lang.internal.introspective.errorDocCallback('matlab.internal.liveeditor.LiveEditorUtilities.execute', '/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/matlab/codetools/+matlab/+internal/+liveeditor/@LiveEditorUtilities/execute.m', 27)" style="font-weight:bold">matlab.internal.liveeditor.LiveEditorUtilities.execute</a> (<a href="matlab: opentoline('/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/toolbox/matlab/codetools/+matlab/+internal/+liveeditor/@LiveEditorUtilities/execute.m',27,0)">line 27</a>)
executionTime = LiveEditorUtilities.doExecute(editorId, fileName, persistOutput, isSynchronousDrawnowRequired);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in <a href="matlab:matlab.lang.internal.introspective.errorDocCallback('mwtools.liveCodeToDocbook>doRun', '/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/matlab/tools/examples/exampletools/+mwtools/liveCodeToDocbook.m', 474)" style="font-weight:bold">mwtools.liveCodeToDocbook>doRun</a> (<a href="matlab: opentoline('/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/matlab/tools/examples/exampletools/+mwtools/liveCodeToDocbook.m',474,0)">line 474</a>)
LiveEditorUtilities.execute(editorId, source);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in <a href="matlab:matlab.lang.internal.introspective.errorDocCallback('mwtools.liveCodeToDocbook>doRunConvert', '/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/matlab/tools/examples/exampletools/+mwtools/liveCodeToDocbook.m', 382)" style="font-weight:bold">mwtools.liveCodeToDocbook>doRunConvert</a> (<a href="matlab: opentoline('/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/matlab/tools/examples/exampletools/+mwtools/liveCodeToDocbook.m',382,0)">line 382</a>)
[startTimeStamp,finishTimeStamp,exampleTime,exampleWarnings, exampleErrors] = doRun(editorObj, javaRichDocument, source);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in <a href="matlab:matlab.lang.internal.introspective.errorDocCallback('mwtools.liveCodeToDocbook', '/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/matlab/tools/examples/exampletools/+mwtools/liveCodeToDocbook.m', 156)" style="font-weight:bold">mwtools.liveCodeToDocbook</a> (<a href="matlab: opentoline('/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/matlab/tools/examples/exampletools/+mwtools/liveCodeToDocbook.m',156,0)">line 156</a>)
[startTimeStamp,finishTimeStamp,exampleTime,exampleRunWarnings,exampleRunErrors, errorMessage, webWindow] = doRunConvert(...
^^^^^^^^^^^^^^^^
Error in <a href="matlab:matlab.lang.internal.introspective.errorDocCallback('BML', '/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/matlab/tools/build_using_matlab/BML.m', 13)" style="font-weight:bold">BML</a> (<a href="matlab: opentoline('/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/matlab/tools/build_using_matlab/BML.m',13,0)">line 13</a>)
evalin('base', s);
^^^^^^^^^^^^^^^^^
title('Scheduling on r, Step Amplitude 0.7') legend('Kin','Kout','location','Best')

両方のコントローラーで安定性が維持されるようになり、性能が同じになります。これは、 が区分的に一定であり、両方のコントローラーを相互交換可能な LTI の場合に十分に近いためです。次に説明するハイブリッド方式との比較のために Kout で結果を保存します。
y = step(CLout,tsim,r,Config);
ハイブリッド方式
LPV プラントは に依存し、PI コントローラーは でスケジューリングされるハイブリッド方式を使用することもできます。この手法を試すために、pc という別のパラメーターを使用して LPV コントローラーを作成します。
Kout = lpvss('pc',@(t,p) hcKoutFCN(t,p,pmax));
CLout = feedback(G*Kout,1);閉ループ モデルが p と pc の 2 つのパラメーターに依存するようになります。p を 、pc を に設定し、応答をシミュレートします。
pFcn = @(t,x,u) [tanh(x(1)) ; interp1(tsim,r,t)]; yh = step(CLout,tsim,pFcn,Config);
最後に、実際のプラントと積分器の出力の を使用して でスケジューリングされた PI コントローラーを使用して非線形シミュレーションを実行します。
usey = 0; useKout = 1;
simout = sim('HiddenCouplings',Tf);スケジューリング方式とハイブリッド スケジューリング方式を実際の非線形応答と比較します。
plot(tsim,y,tsim,yh,simout.tout,simout.y,'k--') title('Step Amplitude 0.7') legend('r scheduling','y/r scheduling','nonlinear','location','Best')

ここで、プラントとコントローラーの両方を でスケジューリングした方が非線形応答に近い近似になっています。
プラントとコントローラーのデータ関数
type lpvHCModelfunction [A,B,C,D,E,dx0,x0,u0,y0,Delays] = lpvHCModel(~,p,pmax) % Plant model p = max(-pmax,min(p,pmax)); tau = atanh(p); A = -1; B = 1; C = 1-p^2; D = 0; E = []; dx0 = []; x0 = tau; u0 = tau; y0 = p; Delays = [];
type hcKinFCNfunction [A,B,C,D,E,dx0,x0,u0,y0,Delays] = hcKinFCN(~,p,pmax)
% PI Gains
if abs(p)< pmax
Kp = 1/3/(1-p^2);
Ki = 1/(1-p^2);
else
% Protect against |p|>=1
Kp = 1/3/(1-pmax^2);
Ki = 1/(1-pmax^2);
end
% State-space and offset data: Ki at the input
A = 0;
B = Ki;
C = 1;
D = Kp;
E = [];
dx0 = [];
x0 = [];
u0 = [];
y0 = [];
Delays = [];
type hcKoutFCNfunction [A,B,C,D,E,dx0,x0,u0,y0,Delays] = hcKoutFCN(~,p,pmax)
% PI Gains
if abs(p)< pmax
Kp = 1/3/(1-p^2);
Ki = 1/(1-p^2);
else
% Protect against |p|>=1
Kp = 1/3/(1-pmax^2);
Ki = 1/(1-pmax^2);
end
% State-space and offset data: Ki at the output
A = 0;
B = 1;
C = Ki;
D = Kp;
E = [];
dx0 = [];
x0 = [];
u0 = [];
y0 = [];
Delays = [];
参考文献
Rugh, Wilson J., and Jeff S. Shamma. “Research on Gain Scheduling.” Automatica 36, no. 10 (October 2000):1401–25. https://doi.org/10.1016/S0005-1098(00)00058-3.