clear all; close all;
A = [0 1;-6 -5];
b = [0;1];
c = [1 0];
d = 0;
fbp = [-3; -3];
disp('求めるフィードバックゲイン');
f = acker(A,b,fbp)
Af = A - b * f
disp('閉ループ極')
eig(A - b * f)
cp = eye(2);
dp = [0;0];
sys_s_fbk = ss(Af, b, cp, dp);
t = 0:0.01:5;
x0 = [-1;0];
y_sf = initial(sys_s_fbk,x0,t);
figure(1)
plot(t,y_sf(:,1),t,y_sf(:,2));
xlim([0 5]);
ylim([-1 2]);
grid;
xlabel('time t[s]');
ylabel('state');
legend('x_1(t)','x_2(t)');
Q1=[13 0; 0 1];
R1=1;
[f_lqr_1, P1, e1] = lqr(A,b,Q1,R1);
disp('最適レギュレータによるフィードバックゲイン')
f_lqr_1
A_lqr1 = A - b * f_lqr_1;
sys_s_lqr1 = ss(A_lqr1, b, cp, dp);
y_lqr1 = initial(sys_s_lqr1,x0,t);
figure(2)
plot(t,y_lqr1(:,1),t,y_lqr1(:,2));
xlim([0 5]);
ylim([-1 2]);
grid;
xlabel('time t[s]');
ylabel('state');
legend('x_1(t)','x_2(t)');
u_sf = - f(1) * y_sf(:,1) - f(2) * y_sf(:,2);
u_lqr1 = - f_lqr_1(1) * y_lqr1(:,1) - f_lqr_1(2) * y_lqr1(:,2);
figure(3)
plot(t,u_sf,t,u_lqr1);
xlim([0 5]);
ylim([0 3]);
grid;
xlabel('time t[s]');
ylabel('u(t)');
legend('極配置法', '最適制御則');
Q2=[1 0; 0 1];
R2=3;
[f_lqr_2, P2, e2] = lqr(A,b,Q2,R2);
disp('最適レギュレータによるフィードバックゲイン')
f_lqr_2
A_lqr2 = A - b * f_lqr_2;
sys_s_lqr2 = ss(A_lqr2, b, cp, dp);
y_lqr2 = initial(sys_s_lqr2,x0,t);
u_lqr2 = - f_lqr_2(1) * y_lqr2(:,1) - f_lqr_2(2) * y_lqr2(:,2);
figure(4)
plot(t,u_lqr1,t,u_lqr2);
xlim([0 5]);
ylim([-0.2 1.2]);
grid;
xlabel('time t[s]');
ylabel('u(t)');
legend('r=1', 'r=3');
求めるフィードバックゲイン
f =
3 1
Af =
0 1
-9 -6
閉ループ極
ans =
-3.0000 + 0.0000i
-3.0000 - 0.0000i
最適レギュレータによるフィードバックゲイン
f_lqr_1 =
1.0000 0.2915
最適レギュレータによるフィードバックゲイン
f_lqr_2 =
0.0277 0.0387