ゲイン スケジュール LQG コントローラー
この例では、操作点の変化が速すぎる場合にゲイン スケジュール制御で発生する可能性がある安定性の喪失について説明します。これは、[1] の 102 ページにある例に対応します。[2] の例 5.2.1. に追加の詳細が記載されています。
LPV プラント
LPV プラントは、パラメーター に依存する 2 次モデルです。システムには、 の固定 (定数) 値に対する減衰率の小さな極が 2 つあります。プラントの方程式は次のとおりです。
ここで、パラメーター は を満たします。
G = lpvss('p',@GFCN);"固定" パラメーター値の極を表示します。
pval = -1:0.1:1; Gs = sample(G,0,pval); Gpole = pole(Gs); Gpole = Gpole(:); plot(real(Gpole),imag(Gpole),'bx'); axis([-0.2 0 -1.5 1.5]); xlabel('Real'); ylabel('Imag') grid on;

積分動作を含むゲイン スケジュール LQG コントローラー
ゲイン スケジュール線形 2 次ガウシアン (LQG) コントローラーは、状態フィードバックを状態オブザーバーと組み合わせて積分動作を含めます。オブザーバーと状態フィードバック ゲインはループ伝達再生を使用して設計されています。スケジュール コントローラー (積分動作を含む) は、[1] の図 1 の に対応します。
[1] の図 1 で示されているように、入力で積分器を使用してプラントを拡張します。コントローラーで積分器が実装されます。積分動作により、良好な低周波数の追従と一定の外乱の完全な抑制が確保されます。
Gaug = G*tf(1,[1 0]);
関数 KFCN を使用して LPV コントローラーを作成します。この関数は、任意のパラメーター値について、対応するプラントの行列の LQR ゲインとカルマン ゲインを計算します。
Ka = lpvss('p', @(t,p) KFCN(t,p,Gaug));LTI の解析
固定パラメーター値に対する開ループ応答をプロットします。ループはすべてのパラメーター値で同じであることに注意してください。スケジュール コントローラーは、固定パラメーター値の減衰率の小さな極を打ち消します。
L = G*Ka;
Ls = sample(L,[],pval);
bode(Ls)
grid on;
固定パラメーター値に対するステップ応答は、定常偏差ゼロ、オーバーシュートなし、整定時間 1 秒未満になります。
Ts = feedback(Ls,1);
step(Ts)
grid on;
LPV の解析
feedback を使用して閉ループ LPV モデルを作成し、ゆっくり変化するパラメーター に対する LPV のステップ応答をプロットします。応答は固定の に対する LTI の応答と同様になります。
T = feedback(L,1); % Slow parameter variation t = linspace(0,10,1000); pt = cos(0.02*t); step(T,t,pt) title('Step response with p(t)=cos(0.02t)') grid on

次に、変化が速いパラメーター について考えます。今度はステップ応答が不安定になります。
% Fast parameter variation t = linspace(0,100,1000); pt = cos(2*t); step(T,t,pt); title('Step response with p(t)=cos(2t)') grid on

このプロットは、[1] の図 2 に対応します。ここでの不安定性は、固定パラメーターが実際のダイナミクスを反映していないことが原因です。詳細については、[1] の「Potential Hazards of Gain Scheduling」を参照してください。
プラントとコントローラーのデータ関数
type GFCNfunction [A,B,C,D,E,dx0,x0,u0,y0,Delays] = GFCN(~,p) % Clip p to range [-1,1] p = max(-1,min(p,1)); A = [0 1; -1-p/2 -0.2]; B = [0; 1]; C = [1 0]; D = 0; E = []; dx0 = []; x0 = []; u0 = []; y0 = []; Delays = [];
type KFCNfunction [A,B,C,D,E,dx0,x0,u0,y0,Delays] = KFCN(t,p,Gaug) % This code solves Riccati equations and forms the gains for each value % of p. This is not particularly efficient especially if used for % simulations or real-time implementation. An alternative would be to % pre-solve either the Riccati equations (or the gains) on a grid of % parameters and then interpolate. % Sample augmented plant to get dynamics at (t,p) [Aaug,Baug,Caug,~] = ssdata(sample(Gaug,t,p)); % Design Parameters N = [1; 0; 1+p/2]; mu = 0.01; rho = 1e-8; % Solve observer and state-feedback Riccati equations % The observer and state-feedback gains are given by: % H = Sigma*(Caug)'/mu and G = (Baug)'*Z/rho; [~,Ht] = icare(Aaug',Caug',N*N',mu); H = Ht'; [~,G] = icare(Aaug,Baug,Caug'*Caug,rho); % Observer / state-feedback with integral action (See Fig. 1 of [1]). K = ss(Aaug-Baug*G-H*Caug, -H,-G,0); Ka = tf(1,[1 0])*K; [Ak,Bk,Ck,Dk] = ssdata(Ka); % State-space and offset data: A = Ak; B = Bk; C = Ck; D = Dk; E = []; dx0 = []; x0 = []; u0 = []; y0 = []; Delays = [];
参考文献
[1] Shamma, J. S., and M. Athans. “Gain Scheduling: Potential Hazards and Possible Remedies.” IEEE Control Systems 12, no. 3 (June 1992): 101–7. https://doi.org/10.1109/37.165527.
[2] Shamma, "Analysis and Design of Gain Scheduled Control Systems," Ph.D. Thesis, MIT, 1988.