rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
ReducedData.m
1 classdef ReducedData < handle
2 
3  properties
4  A_comp;
5  B_comp;
6  C_comp;
7  E_comp;
8  R_comp;
9  Q_comp;
10 
11  estim;
12  gamma_function;
13  gamma_mode;
14 
15  RB_V;
16  RB_W;
17 
18  RB_size;
19  end
20  methods
21  function rd = ReducedData(model, detailed_data)
22  %rd@ARE.ReducedData(model, detailed_data);
23 
24  model_data = gen_model_data(model);
25 
26  % Get reduced basis matrices
27  V = detailed_data.RB_V;
28  W = detailed_data.RB_W;
29 
30  rd.RB_V = V;
31  rd.RB_W = W;
32  rd.RB_size = size(W,2);
33 
34 
35  % Computing the components for the reduced system matrices
36  for k = 1:length(model_data.A_comp)
37  rd.A_comp{k} = W'*model_data.A_comp{k}*V;
38  end
39 
40  for k = 1:length(model_data.B_comp)
41  rd.B_comp{k} = W'*model_data.B_comp{k};
42  end
43 
44  for k = 1:length(model_data.C_comp)
45  rd.C_comp{k} = model_data.C_comp{k}*V;
46  end
47 
48  for k = 1:length(model_data.E_comp)
49  rd.E_comp{k} = W'*model_data.E_comp{k}*V;
50  end
51 
52  rd.R_comp = model_data.R_comp;
53  rd.Q_comp = model_data.Q_comp;
54 
55  % Computation of components for the matrix B'*B which is
56  % necessary for checking the stability criterion
57 
58  estim.BTB = {};
59  for i=1:length(model_data.B_comp)
60  for j=1:length(model_data.B_comp)
61  estim.BTB{i,j} = (model_data.B_comp{i})'*(model_data.B_comp{j});
62  end
63  end
64 
65 
66  % Components of the parameter separable matrices for the
67  % residual calculation
68 
69  estim.CCT = {};
70  for i = 1:length(model_data.C_comp)
71  for j = 1:length(model_data.C_comp)
72  estim.CCT{i,j} = model_data.C_comp{i}*model_data.C_comp{j}';
73  end
74  end
75 
76  estim.WTEATW = {};
77  for i = 1:length(model_data.E_comp)
78  for j = 1:length(model_data.A_comp)
79  estim.WTEATW{i,j} = W'*model_data.E_comp{i}*model_data.A_comp{j}'*W;
80  end
81  end
82 
83  estim.WTEETW = {};
84  for i = 1:length(model_data.E_comp)
85  for j = 1:length(model_data.E_comp)
86  estim.WTEETW{i,j} = W'*model_data.E_comp{i}*model_data.E_comp{j}'*W;
87  end
88  end
89 
90  estim.CATW = {};
91  for i = 1:length(model_data.C_comp)
92  for j = 1:length(model_data.A_comp)
93  estim.CATW{i,j} = model_data.C_comp{i}*model_data.A_comp{j}'*W;
94  end
95  end
96 
97  estim.WTAATW = {};
98  for i = 1:length(model_data.A_comp)
99  for j = 1:length(model_data.A_comp)
100  estim.WTAATW{i,j} = W'*model_data.A_comp{i}*model_data.A_comp{j}'*W;
101  end
102  end
103 
104  estim.WTECT = {};
105  for i = 1:length(model_data.E_comp)
106  for j = 1:length(model_data.C_comp)
107  estim.WTECT{i,j} = W'*model_data.E_comp{i}*model_data.C_comp{j}';
108  end
109  end
110 
111 
112  % Components for the matrices which arise when computing the
113  % norm of the closed-loop matrix A_X
114 
115  estim.traceATA = {};
116  for i = 1:length(model_data.A_comp)
117  for j = 1:length(model_data.A_comp)
118  estim.traceATA{i,j} = trace(model_data.A_comp{i}'*model_data.A_comp{j});
119  end
120  end
121  estim.BTAATW = {};
122  for i = 1:length(model_data.B_comp)
123  for j = 1:length(model_data.A_comp)
124  for k = 1:length(model_data.A_comp)
125  estim.BTAATW{i,j,k} = model_data.B_comp{i}'*model_data.A_comp{j}*model_data.A_comp{k}'*W;
126  end
127  end
128  end
129 
130  % Frobenius norm of E for the efficiency bound
131  estim.traceETE = {};
132  for i = 1:length(model_data.E_comp)
133  for j =1:length(model_data.E_comp)
134  estim.traceETE{i,j} = trace(model_data.E_comp{i}'*model_data.E_comp{j});
135  end
136  end
137  rd.estim = estim;
138 
139  if ~isempty(detailed_data.gamma)
140  rd.gamma_function = detailed_data.gamma_calculation.gen_reduced_data(model, detailed_data, rd);
141  end
142  rd.gamma_mode = detailed_data.gamma_mode;
143 
144  if model.RB_closed_loop_norm == 2 | ...
145  strcmp(model.RB_closed_loop_norm, '2') | ...
146  model.RB_closed_loop_stable == true
147  rd.estim.model_data = model_data;
148  end
149 
150  end
151  end
152 end
Implementation of the parametric algebraic Riccati equation.