APPENDIX
MATLAB Code:
1. Check stability of A
clear all;
clc;
% system description
A = [0 1 0 0; 20.601 0 0 0; 0 0 0 1; -0.4905 0 0 0];
disp(eig(A)); % Calulate and display the Eigen Values of A
Solution:
A= 0 1.0000 0 0
20.6010 0 0 0
0 0 0 1.0000
-0.4905 0 0 0
eig(A) = 0
0
4.5388
-4.5388
Matrix A is Unstable
2. Check Controllability of AB
clear all;
clc;
% system description
A = [0 1 0 0; 20.601 0 0 0; 0 0 0 1; -0.4905 0 0 0];
B = [0; -1; 0; 0.5];
Co = ctrb(A,B); %Compute controllability matrix
unco = length(A) - rank(Co) % Determine the number of uncontrollable
states
Solution:
unco = 0
Number of Uncontrollable states is NIL hence AB is Controllable
3. Optimal Solution using LMI toolbox
clear all;
clc;
% system description
A = [0 1 0 0; 20.601 0 0 0; 0 0 0 1; -0.4905 0 0 0];
B = [0; -1; 0; 0.5];
% performance matrices
Q = [200 0 0 0; 0 2 0 0; 0 0 2 0; 0 0 0 2];
R = 2;
% LMI flow
setlmis([])
X = lmivar(1, [4,1]); % Decision variable
lmiterm([-1 1 1 X],1 ,1); % X>0
lmiterm([2 1 1 X],A ,1, 's'); % AX +XA'
lmiterm([2 1 1 0],-B*inv(R)*B'); % -B*inv(R)*B'
lmiterm([2 1 2 X],1 ,1); %X
lmiterm([2 2 2 0],-inv(Q)); % -inv(Q)
LMIs = getlmis;
[TMIN,XFEAS] = feasp (LMIs); % feasibility of LMI (TMIN<0 implies feasible)
X = dec2mat (LMIs, XFEAS, X); % numerical form of decision variable
P=inv(X); % transforming back to P
K = inv(R)*B'*P % state feedback gain
D = (A-B*K); % closed loop matrix
eig(D) % closed loop eigenvalues
Solution:
Solver for LMI feasibility problems L(x) < R(x)
This solver minimizes t subject to L(x) < R(x) + t*I
The best value of t should be negative for feasibility
Iteration : Best value of t so far
1 0.030747
2 0.015314
3 0.015314
4 3.103825e-03
5 3.103825e-03
*** new lower bound: -0.080638
6 3.103825e-03
*** new lower bound: -0.014184
7 6.389709e-04
8 -5.522330e-04
*** new lower bound: -0.011082
Result: best value of t: -5.522330e-04
f-radius saturation: 0.000% of R = 1.00e+09
K = -80.1449 -17.7407 -2.3320 -6.2538
Eig (A-B*K) = -8.6488 + 0.0000i
-4.6197 + 0.0000i
-0.6727 + 0.3465i
-0.6727 - 0.3465i
System has stable closed loop poles, hence K is optimal Controller gain
4. Plot of States with respect to time
Clc;
clear;
close all;
% System matrix
A = [0 1 0 0; 20.601 0 0 0; 0 0 0 1; -0.4905 0 0 0];
% Control matrix
B = [0; -1; 0; 0.5];
% Controller gain
K = [-80.1449 -17.7407 -2.3320 -6.2538];
% Output matrix
C = [1 0 0 0;0 1 0 0; 0 0 1 0; 0 0 0 1];
% Feed forward matrix
D = [0;0;0;0];
% Initial state
x0 = [0.1; 0; 0; 0];
% State space modelling with controller feedback
sys_cl = ss(A-B*K,B,C,D);
t = 0:0.01:15; % Defining Time axis
[y,t,x] = initial (sys_cl,x0,t);
figure
subplot(2,2,1) % Plot of Angular Position of Pendulum w.r.t.time
plot(t,x(:,1),'k') % Plot color to be black
xlabel('Time (t)')
ylabel('\theta(t)')
title('Angular position')
grid on
set(gca,'FontSize',12)
subplot(2,2,3) % Plot of Angular Velocity of Pendulum w.r.t.time
plot(t,x(:,2),'b') % Plot color to be blue
xlabel('Time(t)')
ylabel('$\dot{\theta}(t)$', 'Interpreter','latex')
title('Angular Velocity')
grid on
set(gca,'FontSize',12)
subplot(2,2,2) % Plot of Position of Cart w.r.t.time
plot(t,x(:,3),'m') % Plot color to be magenta
xlabel('Time (t)')
ylabel('x(t)')
title('Cart poition')
grid on
set(gca,'FontSize',12)
subplot(2,2,4) % Plot of Velocity of Cart w.r.t.time
plot(t,x(:,4),'g') % Plot color to be green
xlabel('Time (t)')
ylabel('$\dot{x}(t)$', 'Interpreter','latex')
title('Cart velocity')
grid on
set(gca,'FontSize',12)
figure
plot(t,x) % Plot of all states w.r.t.time
xlabel('Time')
ylabel('States')
legend('x_1','x_2','x_3','x_4')
set(gca,'FontSize',18)