Sunteți pe pagina 1din 3

Matlab code:

clc,clear all;
% Define the state space matrices (A, B, C, D)
Ap = [0,1,0;
0,0,1;
0,-10,-7];
Bp = [0;
0;
1];
Cp = [1,0,0];
% Get the number of states, n, number of controls, m, and the number of
% outputs, p.
[n,m] = size(Bp);
p = size(Cp,1);
Dp = zeros(p,m);
% Define the state space model.
sys_p.Ap = Ap;
sys_p.Bp = Bp;
sys_p.Cp = Cp;
sys_p.Dp = Dp;
%define control state system
Ki = 5.55;
Kp = 1.11;
Ac = 0;
Bc1 = -Ki;
Bc2 = Ki;
Cc = 1;
Dc1 = -Kp;
Dc2 = Kp;
sys_c.Ac = Ac;
sys_c.Bc1 = Bc1;
sys_c.Bc2 = Bc2;
sys_c.Cc = Cc;
sys_c.Dc1 = Dc1;
sys_c.Dc2 = Dc2;
%closed loop system
[A,B,C,D] = closed_loop_system(sys_p, sys_c);
A
B
C
D
function [A,B,C,D] = closed_loop_system(sys_p, sys_c)
% Extract plant matrices.

Ap = sys_p.Ap;
Bp = sys_p.Bp;
Cp = sys_p.Cp;
Dp = sys_p.Dp;
% Extract controller matrices.
Ac = sys_c.Ac;
Bc1 = sys_c.Bc1;
Bc2 = sys_c.Bc2;
Cc = sys_c.Cc;
Dc1 = sys_c.Dc1;
Dc2 = sys_c.Dc2;
% Intermediate matrices.
Dc1Dp = Dc1*Dp;
Z = eye(size(Dc1Dp,1)) - Dc1Dp;
DpiZDc1 = Dp*inv(Z)*Dc1;
if (all(abs(sys_c.Ac(:)) < 1e-6) && all(abs(sys_c.Bc1(:)) < 1e-6) && ...
all(abs(sys_c.Bc2(:)) < 1e-6))
% No controller state defined.
% Closed loop A matrix.
A = Ap + Bp*inv(Z)*Dc1*Cp;
% Closed loop B matrix.
B = Bp;
% Closed loop C matrix.
C = Cp;
% Closed loop D matrix.
D = Dp;
else
% Controller state defined.
% Closed loop A matrix.
A = [Ap + Bp*inv(Z)*Dc1*Cp, Bp*inv(Z)*Cc;
Bc1*(eye(size(DpiZDc1,1))+DpiZDc1)*Cp, Ac+Bc1*Dp*inv(Z)*Cc];
% Closed loop B matrix.
B = [Bp*inv(Z)*Dc2; Bc2 + Bc1*Dp*inv(Z)*Dc2];
% Closed loop C matrix.
C = [(eye(size(DpiZDc1,1))+DpiZDc1)*Cp, Dp*inv(Z)*Cc];
% Closed loop D matrix.

D = Dp*inv(Z)*Dc2;
end
Result:
A= 0
0
-1.1100
-5.5500

1.0000
0
0
0
1.0000
0
-10.0000 -7.0000 1.0000
0
0
0

B= 0
0
1.1100
5.5500
C=1
D=0

S-ar putea să vă placă și