% Pole placement design for flexible structure
% 2 coupled masses
% States are [d ddot y ydot]' M = 1; m = 0.1; k = 0.091; b = 0.0036;
A = [
   0  1  0  0
   -k/m  -b/m  k/m  b/m
   0  0  0  1
   k/M  b/M  -k/M  -b/M
];
B = [0; 0; 0; 1/M];
C = [1 0 0 0
   0 0 1 0
   0 0 0 0];  % get d, y and u as outputs
D = [0; 0; 1]; Gp = ss(A, B, C, D, 'InputName', 'force u', 'OutputName', ...
   {'disp d', 'disp y', 'force u'});
set(Gp, 'StateName', {'d', 'ddot', 'y', 'ydot'});
Gpa = augstate(Gp(1:2,:));  % augment outputs with states for Simulink model % Select sample rate about 15 rad/s
T = 0.4; % Discrete model
Gpd = c2d(Gp, T);
Phi = Gpd.a; Gam = Gpd.b;
[n, n] = size(Phi);  % no. states
[p, n] = size(C);  % no. outputs dclz = [0.9+j*0.05; 0.9-j*0.05; 0.8+j*0.4; 0.8-j*0.4];
K = acker(Phi, Gam, dclz); % Tracking system gains
Nxu = [Phi - eye(n) Gam; C(1,:) D(1,1)]\[zeros(n,1); 1];
Nx = Nxu(1:n), Nu = Nxu(n+1) % Closed-loop system
Gpda = augstate(Gpd);
G1 = Gpda * K;
G2a = feedback(G1, eye(n), [1:n], [p+1:p+n], -1);
G2 = G2a(1:p,:);   % remove state outputs
Gcl = G2 * Nx; figure(1), step(Gcl) 