1 function porsche_create_basis(step)
3 %Script zur Basisgenerierung für jeweils [mu_k_min, mu_k_original,
7 %%%%%%%%%%%%%%%%%%%%%%%%
8 %%% Aus mu_ranges maxima, minima und mittelpunkte für basis nehmen
9 %%%%%%%%%%%%%%%%%%%%%%%%
12 % In model.mu_names die richtigen Daten eintragen!!!
15 model = porsche_model;
16 model_data = gen_model_data(model);
19 %erzeuge die richtige lagrangebasis:
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)];
27 %mit diesen vektoren alle möglichen kombinationen bilden
31 for k=1:size(combination_mus,2)
32 RB_mu_list{k} = combination_mus(:,k)
';
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;
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;
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;
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
61 %%%%%%%%%%%%%%%%%%%%%%%%
62 %%%% aus detailliertem Suchpfad die Snapshots erstellen
63 %%%%%%%%%%%%%%%%%%%%%%%%
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);
72 % Lösungs-mus in RB_mu_list schreiben:
74 B=mat2cell(A,ones(length(SQP_sol_det.mu_k),1),2);
77 %reduced_data generieren
78 detailed_data=gen_detailed_data(model,model_data);
79 reduced_data=gen_reduced_data(model,detailed_data);
82 save porsche_basis_SQP_det_path_x3_y4
85 %%%%%%%%%%%%%%%%%%%%%%%%%%%
86 %%%%%% circle-basis: unterteile den kreis in n punkte und erstelle zu
87 %%%%%% jedem punkt einen snapshot
88 %%%%%%%%%%%%%%%%%%%%%%%%%%%
94 %%%%%%%%%%%%%%%%%%%%%%%
95 %%%%%%%% Normales Gridsearch in gewissem bereich xmin, xmax, ymin, ymax
96 %%%%%%%%%%%%%%%%%%%%%%%%%
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
101 model = porsche_model;
102 model_data = gen_model_data(model);
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;
111 x_vektor = linspace(xmin, xmax, n);
112 y_vektor = linspace(ymin, ymax, n);
118 RB_mu_list{l}=[x_vektor(xind), y_vektor(yind)];
121 model.RB_mu_list=RB_mu_list;
123 detailed_data = gen_detailed_data(model,model_data);
124 reduced_data=gen_reduced_data(model,detailed_data);
126 save porsche_basis_complete_grid_x3_y3_optplusminus20 model model_data detailed_data reduced_data
130 % Basis mit mu_min und mu_max als begrenzung, dazwischen noch 2
131 % werte, also insgesamt 4 werte pro richtung, = 16 basisvektoren!
133 % --> ähnlich wie
case 1, aber mit 4 statt 3 snapshots pro
135 % --> Insbesondere Verfeinerung von Basis mit 3 Punkten pro
136 % richtung!!! --> sollte bessere werte für iteriertenverlauf
141 % In model.mu_names die richtigen Daten eintragen!!!
144 model = porsche_model;
145 model_data = gen_model_data(model);
148 %erzeuge die richtige lagrangebasis:
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);
157 %mit diesen vektoren alle möglichen kombinationen bilden
161 for k=1:size(combination_mus,2)
162 RB_mu_list{k} = combination_mus(:,k)
';
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;
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;
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;
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
194 % Verfeinerung der Basis porsche_basis_2params_x3_y3
195 % mit 5 statt 3 dimensionen pro richtung!
196 % punkte kommen innen dazu!
199 % In model.mu_names die richtigen Daten eintragen!!!
202 load porsche_basis_2params_x3_y3
203 clear detailed_data model_data reduced_data
206 %erzeuge die richtige lagrangebasis:
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)];
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)];
215 %mit diesen vektoren alle möglichen kombinationen bilden
216 combination_mus=createCombinations(model_mus);
219 for k=1:size(combination_mus,2)
220 RB_mu_list{k} = combination_mus(:,k)';
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;
229 model_data=gen_model_data(model);
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;
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;
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
251 % Erweiterung der Basis porsche_basis_2params_x3_y3
252 % mit 5 statt 3 dimensionen pro richtung!
253 % außen noch punkte anschließen
256 % In model.mu_names die richtigen Daten eintragen!!!
259 load porsche_basis_2params_x3_y3
260 clear detailed_data model_data reduced_data
263 %erzeuge die richtige lagrangebasis:
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];
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];
274 %mit diesen vektoren alle möglichen kombinationen bilden
278 for k=1:size(combination_mus,2)
279 RB_mu_list{k} = combination_mus(:,k)
';
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;
288 model_data=gen_model_data(model);
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;
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;
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
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
315 % In model.mu_names die richtigen Daten eintragen!!!
318 load porsche_basis_2params_x3opt_y3opt_3steps
319 clear detailed_data model_data reduced_data
322 %erzeuge die richtige lagrangebasis:
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];
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];
333 %mit diesen vektoren alle möglichen kombinationen bilden
334 combination_mus=createCombinations(model_mus);
337 for k=1:size(combination_mus,2)
338 RB_mu_list{k} = combination_mus(:,k)';
341 model.RB_mu_list=RB_mu_list;
343 model_data=gen_model_data(model);
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;
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;
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
366 % gröber machen der basis!
367 % nur 4 eckpunkte als basisvektoren
370 % In model.mu_names die richtigen Daten eintragen!!!
373 load porsche_basis_2params_x3_y3
374 clear detailed_data model_data reduced_data
377 %erzeuge die richtige lagrangebasis:
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)];
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)];
386 %mit diesen vektoren alle möglichen kombinationen bilden
390 for k=1:size(combination_mus,2)
391 RB_mu_list{k} = combination_mus(:,k)
';
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;
400 model_data=gen_model_data(model);
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;
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;
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
423 % Verfeinerung der Basis porsche_basis_2params_x3opt_y3opt_3steps
424 % mit 5 statt 3 dimensionen pro richtung!
427 % In model.mu_names die richtigen Daten eintragen!!!
430 load porsche_basis_2params_x3opt_y3opt_3steps
431 clear detailed_data model_data reduced_data time2gen_detailed_data time2gen_reduced_data
434 %erzeuge die richtige lagrangebasis:
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)];
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)];
443 %mit diesen vektoren alle möglichen kombinationen bilden
444 combination_mus=createCombinations(model_mus);
447 for k=1:size(combination_mus,2)
448 RB_mu_list{k} = combination_mus(:,k)';
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;
457 model_data=gen_model_data(model);
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;
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;
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
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.