定常偏差はなくなるが、オーバーシュートが大きすぎる
clear; close all; clc; A = [0 1 0 131.91 -1.27E-04 50.27 -168.29 1.63E-04 -136.55]; B = [0;-56.15;152.52]; C = [1 0 0]; D = 0; states = {'theta','theta_dot','phi_dot'}; inputs = {'u'}; outputs = {'theta'}; sys = ss(A,B,C,D,'statename',states,'inputname',inputs,'outputname',outputs); poles = eig(A) R = 1; Q = C'*C; K=lqr(A,B,Q,R) Nbar = rscale(sys,K); syscl = ss(A-B*K,B*Nbar,C,D); step(syscl); DCgain=dcgain(syscl)
折返し法を使って速く収束させようとしたら逆にオーバーシュートが大きくなった
clear; close all; clc; A = [0 1 0 131.91 -1.27E-04 50.27 -168.29 1.63E-04 -136.55]; B = [0;-56.15;152.52]; C = [1 0 0]; D = 0; states = {'theta','theta_dot','phi_dot'}; inputs = {'u'}; outputs = {'theta'}; sys = ss(A,B,C,D,'statename',states,'inputname',inputs,'outputname',outputs); poles = eig(A) R = 1; Q = C'*C; alpha = 8; K=lqr(A+alpha*eye(3),B,Q,R) Nbar = rscale(sys,K); syscl = ss(A-B*K,B*Nbar,C,D); step(syscl); DCgain=dcgain(syscl)