-
Notifications
You must be signed in to change notification settings - Fork 3
/
FSF_H2.m
64 lines (54 loc) · 1.27 KB
/
FSF_H2.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
% Arizona State University
% MAE 598 LMIs in Control Systems
clear all
close all
clc
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% LMI for Opimal FSF H_2 Control
% Bring in Data
A = [];
B = [];
C = [];
D = [];
% Determine sizes
ns = size(A,1); % number of states
nai = size(B,2); % number of actuator inputs
nmo = size(C,1); % number of measured outputs
nd = nai+nmo; % number of disturbances
nro = nmo+nai; % number of regulated outputs
eta = 0.0001;
% 9 Matrix Representation
B1 = [B zeros(ns,nmo)];
B2 = B;
C1 = [C;...
zeros(nai,ns)];
C2 = C;
D11 = [D zeros(nai);...
zeros(nmo) zeros(nmo)];
D12 = [D;...
eye(nmo)];
D21 = [D eye(nmo)];
D22 = D;
% Settings
opt = sdpsettings('verbose',0,'solver','sedumi');
% Define Variables
gam= sdpvar(1);
X = sdpvar(6);
W = sdpvar(6);
Z = sdpvar(3,6);
% Define matricies
mat1 = [A B2]*[X;Z] + [X Z']*[A';B2']+ B1*B1';
mat2 = [X (C1*X+D12*Z)';C1*X+D12*Z W];
mat3 = trace(W);
% Define Constraints
F = [];
F = [F, X>=eta*eye(6)];
F = [F, mat1<=-eta*eye(6)];
F = [F, mat2>=eta*eye(12)];
F = [F, mat3<=gam];
% Optimization Problem
optimize(F,gam,opt);
gam= sqrt(gam);
disp('The H-2 gain is: ');
disp(value(gam));
K= value(Z)*inv(value(X));