rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
porsche_create_basis.m
1 function porsche_create_basis(step)
2 
3 %Script zur Basisgenerierung für jeweils [mu_k_min, mu_k_original,
4 %mu_k_max]
5 switch step
6 
7  %%%%%%%%%%%%%%%%%%%%%%%%
8  %%% Aus mu_ranges maxima, minima und mittelpunkte für basis nehmen
9  %%%%%%%%%%%%%%%%%%%%%%%%
10  case 1
11  %%%%%%%%%%%%%%%
12  % In model.mu_names die richtigen Daten eintragen!!!
13  %%%%%%%%%%%%%%%
14 
15  model = porsche_model;
16  model_data = gen_model_data(model);
17  model = elliptic_discrete_model(model,model_data.grid);
18 
19  %erzeuge die richtige lagrangebasis:
20 
21  %mus aus model auslesen
22  for k=1:length(model.mu_names)
23  model_mus{k}=[model.mu_ranges{k}(1), model.(model.mu_names{k}), model.mu_ranges{k}(2)];
24  end
25 
26 
27  %mit diesen vektoren alle möglichen kombinationen bilden
28  combination_mus=createCombinations(model_mus);
29 
30  model.RB_mu_list=[];
31  for k=1:size(combination_mus,2)
32  RB_mu_list{k} = combination_mus(:,k)';
33  end
34 
35  % RB_mu_list=RB_mu_list(1:2:end); %nur die halbe basis berechnen!
36  % RB_mu_list=RB_mu_list(1:2:end); %nur ein viertel der basis berechnen!
37  % RB_mu_list=RB_mu_list(1:2:end); %nur ein achtel der basis berechnen!
38  % RB_mu_list=RB_mu_list(1:2:end); %nur ein sechzehntel der basis berechnen!
39  model.RB_mu_list=RB_mu_list;
40 
41  tic;
42  disp('-------------------------------------');
43  disp('start generation of detailed_data...');
44  detailed_data = gen_detailed_data(model,model_data);
45  disp('finished generation of detailed_data!');
46  disp('-------------------------------------');
47  time2gen_detailed_data = toc;
48 
49  tic;
50  disp('-------------------------------------');
51  disp('start generation of reduced_data...');
52  reduced_data=gen_reduced_data(model,detailed_data);
53  disp('finished generation of reduced_data!');
54  disp('-------------------------------------');
55  time2gen_reduced_data = toc;
56 
57  disp('saving the data...');
58  save porsche_basis_2params_x3_y3 model model_data detailed_data reduced_data time2gen_detailed_data time2gen_reduced_data
59 
60 
61  %%%%%%%%%%%%%%%%%%%%%%%%
62  %%%% aus detailliertem Suchpfad die Snapshots erstellen
63  %%%%%%%%%%%%%%%%%%%%%%%%
64  case 2
65 
66  clear
67  load SQP_sol_det_x3_y3
68  model = porsche_model;
69  model_data = gen_model_data(model);
70  model=elliptic_discrete_model(model,model_data.grid);
71 
72  % Lösungs-mus in RB_mu_list schreiben:
73  A=SQP_sol_det.mu_k';
74  B=mat2cell(A,ones(length(SQP_sol_det.mu_k),1),2);
75  model.RB_mu_list = B;
76 
77  %reduced_data generieren
78  detailed_data=gen_detailed_data(model,model_data);
79  reduced_data=gen_reduced_data(model,detailed_data);
80 
81  clear A B;
82  save porsche_basis_SQP_det_path_x3_y4
83 
84 
85  %%%%%%%%%%%%%%%%%%%%%%%%%%%
86  %%%%%% circle-basis: unterteile den kreis in n punkte und erstelle zu
87  %%%%%% jedem punkt einen snapshot
88  %%%%%%%%%%%%%%%%%%%%%%%%%%%
89  case 3
90  TO BE DONE!!!
91 
92 
93 
94  %%%%%%%%%%%%%%%%%%%%%%%
95  %%%%%%%% Normales Gridsearch in gewissem bereich xmin, xmax, ymin, ymax
96  %%%%%%%%%%%%%%%%%%%%%%%%%
97  case 4
98  n=50; %Unterteilung des x-/y-Bereichs in jeweils n Punkte
99  mu_range = 20; % optimalwert aus SQP_sol_det_x3_y3 +/- mu_range liefert parameterbereich
100 
101  model = porsche_model;
102  model_data = gen_model_data(model);
103  model=elliptic_discrete_model(model,model_data.grid);
104 
105  load SQP_sol_det_x3_y3
106  xmin = SQP_sol_det.x_min - mu_range;
107  xmax = SQP_sol_det.x_min + mu_range;
108  ymin = SQP_sol_det.y_min - mu_range;
109  ymax = SQP_sol_det.y_min + mu_range;
110 
111  x_vektor = linspace(xmin, xmax, n);
112  y_vektor = linspace(ymin, ymax, n);
113 
114  l=0;
115  for xind=1:n
116  for yind=1:n
117  l=l+1;
118  RB_mu_list{l}=[x_vektor(xind), y_vektor(yind)];
119  end
120  end
121  model.RB_mu_list=RB_mu_list;
122 
123  detailed_data = gen_detailed_data(model,model_data);
124  reduced_data=gen_reduced_data(model,detailed_data);
125 
126  save porsche_basis_complete_grid_x3_y3_optplusminus20 model model_data detailed_data reduced_data
127 
128 case 10
129  %%%%%%%%%%%%%%%
130  % Basis mit mu_min und mu_max als begrenzung, dazwischen noch 2
131  % werte, also insgesamt 4 werte pro richtung, = 16 basisvektoren!
132  %
133  % --> ähnlich wie case 1, aber mit 4 statt 3 snapshots pro
134  % richtung!
135  % --> Insbesondere Verfeinerung von Basis mit 3 Punkten pro
136  % richtung!!! --> sollte bessere werte für iteriertenverlauf
137  % liefern!
138  %%%%%%%%%%%%%%%
139 
140  %%%%%%%%%%%%%%%
141  % In model.mu_names die richtigen Daten eintragen!!!
142  %%%%%%%%%%%%%%%
143 
144  model = porsche_model;
145  model_data = gen_model_data(model);
146  model = elliptic_discrete_model(model,model_data.grid);
147 
148  %erzeuge die richtige lagrangebasis:
149 
150  %mus aus model auslesen
151  for k=1:length(model.mu_names)
152  %model_mus_bounds{k}=[model.mu_ranges{k}(1), model.mu_ranges{k}(2)];
153  model_mus{k}=linspace(model.mu_ranges{k}(1),model.mu_ranges{k}(2),5);
154  end
155 
156 
157  %mit diesen vektoren alle möglichen kombinationen bilden
158  combination_mus=createCombinations(model_mus);
159 
160  model.RB_mu_list=[];
161  for k=1:size(combination_mus,2)
162  RB_mu_list{k} = combination_mus(:,k)';
163  end
164 
165  % RB_mu_list=RB_mu_list(1:2:end); %nur die halbe basis berechnen!
166  % RB_mu_list=RB_mu_list(1:2:end); %nur ein viertel der basis berechnen!
167  % RB_mu_list=RB_mu_list(1:2:end); %nur ein achtel der basis berechnen!
168  % RB_mu_list=RB_mu_list(1:2:end); %nur ein sechzehntel der basis berechnen!
169  model.RB_mu_list=RB_mu_list;
170 
171  tic;
172  disp('-------------------------------------');
173  disp('start generation of detailed_data...');
174  detailed_data = gen_detailed_data(model,model_data);
175  disp('finished generation of detailed_data!');
176  disp('-------------------------------------');
177  time2gen_detailed_data = toc;
178 
179  tic;
180  disp('-------------------------------------');
181  disp('start generation of reduced_data...');
182  reduced_data=gen_reduced_data(model,detailed_data);
183  disp('finished generation of reduced_data!');
184  disp('-------------------------------------');
185  time2gen_reduced_data = toc;
186 
187  disp('saving the data...');
188  save porsche_basis_2params_x3_y3_4steps model model_data detailed_data reduced_data time2gen_detailed_data time2gen_reduced_data
189 
190 
191 
192 
193 case 11
194  % Verfeinerung der Basis porsche_basis_2params_x3_y3
195  % mit 5 statt 3 dimensionen pro richtung!
196  % punkte kommen innen dazu!
197 
198  %%%%%%%%%%%%%%%
199  % In model.mu_names die richtigen Daten eintragen!!!
200  %%%%%%%%%%%%%%%
201 
202  load porsche_basis_2params_x3_y3
203  clear detailed_data model_data reduced_data
204 
205 
206  %erzeuge die richtige lagrangebasis:
207 
208  %mus aus model auslesen + zwischenpunkte ergänzen
209  RB_mu_list_x = [model.RB_mu_list{1}(1), model.RB_mu_list{2}(1), model.RB_mu_list{3}(1)];
210  model_mus{1} = [RB_mu_list_x(1), (RB_mu_list_x(1)+RB_mu_list_x(2))/2, RB_mu_list_x(2), (RB_mu_list_x(2)+RB_mu_list_x(3))/2, RB_mu_list_x(3)];
211 
212  RB_mu_list_y = [model.RB_mu_list{1}(2), model.RB_mu_list{4}(2), model.RB_mu_list{7}(2)];
213  model_mus{2} = [RB_mu_list_y(1), (RB_mu_list_y(1)+RB_mu_list_y(2))/2, RB_mu_list_y(2), (RB_mu_list_y(2)+RB_mu_list_y(3))/2, RB_mu_list_y(3)];
214 
215  %mit diesen vektoren alle möglichen kombinationen bilden
216  combination_mus=createCombinations(model_mus);
217 
218  model.RB_mu_list=[];
219  for k=1:size(combination_mus,2)
220  RB_mu_list{k} = combination_mus(:,k)';
221  end
222 
223  % RB_mu_list=RB_mu_list(1:2:end); %nur die halbe basis berechnen!
224  % RB_mu_list=RB_mu_list(1:2:end); %nur ein viertel der basis berechnen!
225  % RB_mu_list=RB_mu_list(1:2:end); %nur ein achtel der basis berechnen!
226  % RB_mu_list=RB_mu_list(1:2:end); %nur ein sechzehntel der basis berechnen!
227  model.RB_mu_list=RB_mu_list;
228 
229  model_data=gen_model_data(model);
230 
231  tic;
232  disp('-------------------------------------');
233  disp('start generation of detailed_data...');
234  detailed_data = gen_detailed_data(model,model_data);
235  disp('finished generation of detailed_data!');
236  disp('-------------------------------------');
237  time2gen_detailed_data = toc;
238 
239  tic;
240  disp('-------------------------------------');
241  disp('start generation of reduced_data...');
242  reduced_data=gen_reduced_data(model,detailed_data);
243  disp('finished generation of reduced_data!');
244  disp('-------------------------------------');
245  time2gen_reduced_data = toc;
246 
247  disp('saving the data...');
248  save porsche_basis_2params_x3_y3_5steps model model_data detailed_data reduced_data time2gen_detailed_data time2gen_reduced_data
249 
250 case 12
251  % Erweiterung der Basis porsche_basis_2params_x3_y3
252  % mit 5 statt 3 dimensionen pro richtung!
253  % außen noch punkte anschließen
254 
255  %%%%%%%%%%%%%%%
256  % In model.mu_names die richtigen Daten eintragen!!!
257  %%%%%%%%%%%%%%%
258 
259  load porsche_basis_2params_x3_y3
260  clear detailed_data model_data reduced_data
261 
262 
263  %erzeuge die richtige lagrangebasis:
264 
265  %mus aus model auslesen + zwischenpunkte ergänzen
266  RB_mu_list_x = [model.RB_mu_list{1}(1), model.RB_mu_list{2}(1), model.RB_mu_list{3}(1)];
267  differenz_x = model.RB_mu_list{2}(1) - model.RB_mu_list{1}(1);
268  model_mus{1} = [RB_mu_list_x(1)-differenz_x, RB_mu_list_x(1), RB_mu_list_x(2), RB_mu_list_x(3), RB_mu_list_x(3)+differenz_x];
269 
270  RB_mu_list_y = [model.RB_mu_list{1}(2), model.RB_mu_list{4}(2), model.RB_mu_list{7}(2)];
271  differenz_y = model.RB_mu_list{4}(2) - model.RB_mu_list{1}(2);
272  model_mus{2} = [RB_mu_list_y(1) - differenz_y, RB_mu_list_y(1), RB_mu_list_y(2), RB_mu_list_y(3), RB_mu_list_y(3)+differenz_y];
273 
274  %mit diesen vektoren alle möglichen kombinationen bilden
275  combination_mus=createCombinations(model_mus);
276 
277  model.RB_mu_list=[];
278  for k=1:size(combination_mus,2)
279  RB_mu_list{k} = combination_mus(:,k)';
280  end
281 
282  % RB_mu_list=RB_mu_list(1:2:end); %nur die halbe basis berechnen!
283  % RB_mu_list=RB_mu_list(1:2:end); %nur ein viertel der basis berechnen!
284  % RB_mu_list=RB_mu_list(1:2:end); %nur ein achtel der basis berechnen!
285  % RB_mu_list=RB_mu_list(1:2:end); %nur ein sechzehntel der basis berechnen!
286  model.RB_mu_list=RB_mu_list;
287 
288  model_data=gen_model_data(model);
289 
290  tic;
291  disp('-------------------------------------');
292  disp('start generation of detailed_data...');
293  detailed_data = gen_detailed_data(model,model_data);
294  disp('finished generation of detailed_data!');
295  disp('-------------------------------------');
296  time2gen_detailed_data = toc;
297 
298  tic;
299  disp('-------------------------------------');
300  disp('start generation of reduced_data...');
301  reduced_data=gen_reduced_data(model,detailed_data);
302  disp('finished generation of reduced_data!');
303  disp('-------------------------------------');
304  time2gen_reduced_data = toc;
305 
306  disp('saving the data...');
307  save porsche_basis_2params_x3_y3_5steps_extern model model_data detailed_data reduced_data time2gen_detailed_data time2gen_reduced_data
308 
309 case 13
310  % Erweiterung der Basis porsche_basis_2params_x3opt_y3opt_3steps
311  % mit 5 statt 3 dimensionen pro richtung!
312  % außen noch punkte anschließen
313 
314  %%%%%%%%%%%%%%%
315  % In model.mu_names die richtigen Daten eintragen!!!
316  %%%%%%%%%%%%%%%
317 
318  load porsche_basis_2params_x3opt_y3opt_3steps
319  clear detailed_data model_data reduced_data
320 
321 
322  %erzeuge die richtige lagrangebasis:
323 
324  %mus aus model auslesen + zwischenpunkte ergänzen
325  RB_mu_list_x = [model.RB_mu_list{1}(1), model.RB_mu_list{2}(1), model.RB_mu_list{3}(1)];
326  differenz_x = model.RB_mu_list{2}(1) - model.RB_mu_list{1}(1);
327  model_mus{1} = [RB_mu_list_x(1)-differenz_x, RB_mu_list_x(1), RB_mu_list_x(2), RB_mu_list_x(3), RB_mu_list_x(3)+differenz_x];
328 
329  RB_mu_list_y = [model.RB_mu_list{1}(2), model.RB_mu_list{4}(2), model.RB_mu_list{7}(2)];
330  differenz_y = model.RB_mu_list{4}(2) - model.RB_mu_list{1}(2);
331  model_mus{2} = [RB_mu_list_y(1) - differenz_y, RB_mu_list_y(1), RB_mu_list_y(2), RB_mu_list_y(3), RB_mu_list_y(3)+differenz_y];
332 
333  %mit diesen vektoren alle möglichen kombinationen bilden
334  combination_mus=createCombinations(model_mus);
335 
336  model.RB_mu_list=[];
337  for k=1:size(combination_mus,2)
338  RB_mu_list{k} = combination_mus(:,k)';
339  end
340 
341  model.RB_mu_list=RB_mu_list;
342 
343  model_data=gen_model_data(model);
344 
345  tic;
346  disp('-------------------------------------');
347  disp('start generation of detailed_data...');
348  detailed_data = gen_detailed_data(model,model_data);
349  disp('finished generation of detailed_data!');
350  disp('-------------------------------------');
351  time2gen_detailed_data = toc;
352 
353  tic;
354  disp('-------------------------------------');
355  disp('start generation of reduced_data...');
356  reduced_data=gen_reduced_data(model,detailed_data);
357  disp('finished generation of reduced_data!');
358  disp('-------------------------------------');
359  time2gen_reduced_data = toc;
360 
361  disp('saving the data...');
362  save porsche_basis_2params_x3opt_y3opt_5steps_extern model model_data detailed_data reduced_data time2gen_detailed_data time2gen_reduced_data
363 
364 
365 case 14
366  % gröber machen der basis!
367  % nur 4 eckpunkte als basisvektoren
368 
369  %%%%%%%%%%%%%%%
370  % In model.mu_names die richtigen Daten eintragen!!!
371  %%%%%%%%%%%%%%%
372 
373  load porsche_basis_2params_x3_y3
374  clear detailed_data model_data reduced_data
375 
376 
377  %erzeuge die richtige lagrangebasis:
378 
379  %mus aus model auslesen + zwischenpunkte ergänzen
380  RB_mu_list_x = [model.RB_mu_list{1}(1), model.RB_mu_list{2}(1), model.RB_mu_list{3}(1)];
381  model_mus{1} = [RB_mu_list_x(1), RB_mu_list_x(3)];
382 
383  RB_mu_list_y = [model.RB_mu_list{1}(2), model.RB_mu_list{4}(2), model.RB_mu_list{7}(2)];
384  model_mus{2} = [RB_mu_list_y(1), RB_mu_list_y(3)];
385 
386  %mit diesen vektoren alle möglichen kombinationen bilden
387  combination_mus=createCombinations(model_mus);
388 
389  model.RB_mu_list=[];
390  for k=1:size(combination_mus,2)
391  RB_mu_list{k} = combination_mus(:,k)';
392  end
393 
394  % RB_mu_list=RB_mu_list(1:2:end); %nur die halbe basis berechnen!
395  % RB_mu_list=RB_mu_list(1:2:end); %nur ein viertel der basis berechnen!
396  % RB_mu_list=RB_mu_list(1:2:end); %nur ein achtel der basis berechnen!
397  % RB_mu_list=RB_mu_list(1:2:end); %nur ein sechzehntel der basis berechnen!
398  model.RB_mu_list=RB_mu_list;
399 
400  model_data=gen_model_data(model);
401 
402  tic;
403  disp('-------------------------------------');
404  disp('start generation of detailed_data...');
405  detailed_data = gen_detailed_data(model,model_data);
406  disp('finished generation of detailed_data!');
407  disp('-------------------------------------');
408  time2gen_detailed_data = toc;
409 
410  tic;
411  disp('-------------------------------------');
412  disp('start generation of reduced_data...');
413  reduced_data=gen_reduced_data(model,detailed_data);
414  disp('finished generation of reduced_data!');
415  disp('-------------------------------------');
416  time2gen_reduced_data = toc;
417 
418  disp('saving the data...');
419  save porsche_basis_2params_x3_y3_2steps model model_data detailed_data reduced_data time2gen_detailed_data time2gen_reduced_data
420 
421 
422 case 13
423  % Verfeinerung der Basis porsche_basis_2params_x3opt_y3opt_3steps
424  % mit 5 statt 3 dimensionen pro richtung!
425 
426  %%%%%%%%%%%%%%%
427  % In model.mu_names die richtigen Daten eintragen!!!
428  %%%%%%%%%%%%%%%
429 
430  load porsche_basis_2params_x3opt_y3opt_3steps
431  clear detailed_data model_data reduced_data time2gen_detailed_data time2gen_reduced_data
432 
433 
434  %erzeuge die richtige lagrangebasis:
435 
436  %mus aus model auslesen + zwischenpunkte ergänzen
437  RB_mu_list_x = [model.RB_mu_list{1}(1), model.RB_mu_list{2}(1), model.RB_mu_list{3}(1)];
438  model_mus{1} = [RB_mu_list_x(1), (RB_mu_list_x(1)+RB_mu_list_x(2))/2, RB_mu_list_x(2), (RB_mu_list_x(2)+RB_mu_list_x(3))/2, RB_mu_list_x(3)];
439 
440  RB_mu_list_y = [model.RB_mu_list{1}(2), model.RB_mu_list{4}(2), model.RB_mu_list{7}(2)];
441  model_mus{2} = [RB_mu_list_y(1), (RB_mu_list_y(1)+RB_mu_list_y(2))/2, RB_mu_list_y(2), (RB_mu_list_y(2)+RB_mu_list_y(3))/2, RB_mu_list_y(3)];
442 
443  %mit diesen vektoren alle möglichen kombinationen bilden
444  combination_mus=createCombinations(model_mus);
445 
446  model.RB_mu_list=[];
447  for k=1:size(combination_mus,2)
448  RB_mu_list{k} = combination_mus(:,k)';
449  end
450 
451  % RB_mu_list=RB_mu_list(1:2:end); %nur die halbe basis berechnen!
452  % RB_mu_list=RB_mu_list(1:2:end); %nur ein viertel der basis berechnen!
453  % RB_mu_list=RB_mu_list(1:2:end); %nur ein achtel der basis berechnen!
454  % RB_mu_list=RB_mu_list(1:2:end); %nur ein sechzehntel der basis berechnen!
455  model.RB_mu_list=RB_mu_list;
456 
457  model_data=gen_model_data(model);
458 
459  tic;
460  disp('-------------------------------------');
461  disp('start generation of detailed_data...');
462  detailed_data = gen_detailed_data(model,model_data);
463  disp('finished generation of detailed_data!');
464  disp('-------------------------------------');
465  time2gen_detailed_data = toc;
466 
467  tic;
468  disp('-------------------------------------');
469  disp('start generation of reduced_data...');
470  reduced_data=gen_reduced_data(model,detailed_data);
471  disp('finished generation of reduced_data!');
472  disp('-------------------------------------');
473  time2gen_reduced_data = toc;
474 
475  disp('saving the data...');
476  save porsche_basis_2params_x3opt_y3opt_5steps model model_data detailed_data reduced_data time2gen_detailed_data time2gen_reduced_data
477 
478 
479 end
function comb = createCombinations(ranges, varargin)
Creates the cartesian product of the vectors passed as a matrix containing elements of each vector pe...
function local_model = elliptic_discrete_model(model)
function creating a model with local functions out of a model with global functions. See detailed description for explanation.