clear; close all; clc; A = [0 1 0;0 0 1;1 0 0]; B = [0.3 1;0 1;-0.3 0.9]; C = [1.9 1.3 1]; D = [0.53 -0.61]; sys = ss(A,B,C,D); nx = 3; %Number of states ny = 1; %Number of outputs Qn = [4 2 0; 2 1 0; 0 0 1]; Rn = 0.7; R = [1 0;0 2] QXU = blkdiag(0.1*eye(nx),R); QWV = blkdiag(Qn,Rn); QI = eye(ny); KLQG = lqg(sys,QXU,QWV) KLQG1 = lqg(sys,QXU,QWV,QI,'1dof'); KLQG2 = lqg(sys,QXU,QWV,QI,'2dof'); G = tf(sys); G1=G(1); G2=G(2); KLQG_TF1=tf(KLQG1); C1 = KLQG_TF1(1); step(feedback(C1*G1,1)); title('状態1のステップ応答(1自由度)'); figure(); C2 = KLQG_TF1(2); step(feedback(C2*G2,1)); title('状態2のステップ応答(1自由度)'); figure(); KLQG_TF2 = tf(KLQG2); Cr = KLQG_TF2(1,1); Cy = KLQG_TF2(1,2); T1 = G1*Cr/(1-G1*Cy); %closed loop TFcn step(T1); title('状態1のステップ応答(2自由度)'); figure(); KLQG_TF2 = tf(KLQG2); Cr = KLQG_TF2(2,1); Cy = KLQG_TF2(2,2); T2 = G2*Cr/(1-G2*Cy); %closed loop TFcn step(T2); title('状態2のステップ応答(2自由度)');
状態2に関して2自由度の方がオーバーシュートが小さくなっているので好ましい。