1 function convection_diffusion_fv_output_opt_script(step, expar)
2 %
function convection_diffusion_fv_output_opt_script(step)
6 % Markus Dihlmann 12.09.2011
14 fdir = fullfile(rbmatlabhome,
'rbasis',
'lin_evol_opt',
'convdiff');
15 fdir_temp = fullfile(rbmatlabtemp,
'lin_evol_opt_data');
19 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
21 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
25 if isfield(expar,
'coarse_factor')
26 params.coarse_factor = expar.coarse_factor;
28 params.coarse_factor = 16;
31 params.coarse_factor = 16;
34 model = convection_diffusion_fv_output_opt_model_rect_normed_outflow(params);
35 model.compute_derivative_info=0;
46 model_data = gen_model_data(model);
48 model.RB_stop_Nmax = 50;
51 detailed_data = gen_detailed_data(model, model_data);
54 save(fullfile(fdir,['DiffGreedybase_coarse',num2str(model.coarse_factor),'_Nmax_',num2str(model.RB_stop_Nmax),'_k_',num2str(model.k),'.mat']),...
55 'model', 'detailed_data');
57 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
58 % generate separate reduced basis with constant diffusion
59 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
64 if isfield(expar,'coarse_factor')
65 params.coarse_factor = expar.coarse_factor;
67 params.coarse_factor = 16;
70 params.coarse_factor = 16;
72 params.separate_bases = 1;
73 params.cone_const = 1;
75 model = convection_diffusion_fv_output_opt_model_rect_normed(params);
76 model.compute_derivative_info=1;
77 model.RB_error_indicator = 'estimator_parallel';
86 if isfield(expar,'gen_detailed_data')
87 model.gen_detailed_data = expar.gen_detailed_data;
88 model.RB_extension_algorithm = @RB_extension_PCA_fixspace_without_filecache;
95 model_data = gen_model_data(model);
97 model.RB_stop_Nmax = 10;
100 detailed_data = gen_detailed_data(model, model_data);
103 save(fullfile(fdir,['DiffGreedybase_sep_coarse',num2str(model.coarse_factor),'_Nmax_',num2str(model.RB_stop_Nmax),'_k_',num2str(model.k),'.mat']),...
104 'model', 'detailed_data');
107 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
108 % detailed gradient optimization
109 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
111 params.coarse_factor = 4;
112 params.cone_const = 1;
114 model = convection_diffusion_fv_output_opt_model_rect_normed(params);
115 model_data = gen_model_data(model);
116 disp(['Diffusion coefficient = ',num2str(model.k)]);
118 model.optimization.init_params = [0.3,0.3];
119 model.compute_derivative_info=1;
121 opt_data =
optimize(model, model_data);
123 opt_data.t_opt_d = t_opt_d;
125 disp(['Time for optimization : ',num2str(t_opt_d)]);
129 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
130 % grid optimization detailed
131 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
133 disp('grid optimization of diffusion model')
135 params.coarse_factor = 4;
136 params.cone_const = 1;
138 model = convection_diffusion_fv_output_opt_model_rect_normed(params);
140 model_data = gen_model_data(model);
141 disp(['Diffusion coefficient = ',num2str(model.k)]);
142 model.mu_ranges = {[0.788,0.86],[0.6720,0.704]};
144 model.optimization.optimizer = @detailed_grid_search;
145 model.opt_params.grid_density = 6;
148 opt_data =
optimize(model, model_data);
157 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
158 % reduced optimization (simplified) using a specialized reduced basis
159 % and a cone_const conv_diff_model
160 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
163 load('DiffGreedyBase_ptpart10_2p_coarse4_Nmax30_k_0.25_selected.mat');
165 % params.coarse_factor = 4;
166 % params.separate_bases = 1;
167 % params.cone_const = 1;
169 % model = convection_diffusion_fv_output_opt_model_rect_normed(params);
171 model.optimization.init_params = [0.3,0.3];
172 model.optimization.opt_mode = 'reduced';
173 model.compute_derivative_info = 1;
174 model.optimization.lower_bound = [0,0];
175 model.optimization.upper_bound = [1,1];
176 model.lipschitz_type = 'norm';
178 reduced_data = gen_reduced_data(model, detailed_data);
181 opt_data =
optimize(model,reduced_data);
183 opt_data.t_opt_red = t_opt_red;
184 disp(['Time for reduced optimization: ',num2str(t_opt_red)]);
190 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
191 % reduced optimization coarse 4 using different sizes of bases
193 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
196 load('DiffGreedyBase_ptpart10_2p_coarse4_Nmax30_k_0.25_selected.mat');
197 load('opt_data_graddet_0303_q10_tol0.01.mat');
198 opt_data_det = opt_data;
200 part_used = [34,45,67,68,68,69,69,69];
201 nr_tparts = length(detailed_data.parts_detailed_data{part_used(1)}.t_part_detailed_data);
202 % params.coarse_factor = 4;
203 % params.separate_bases = 1;
204 % params.cone_const = 1;
206 % model = convection_diffusion_fv_output_opt_model_rect_normed(params);
208 model.optimization.init_params = [0.3,0.3];
209 model.optimization.opt_mode =
'reduced';
210 model.compute_derivative_info = 1;
211 model.optimization.lower_bound = [0,0];
212 model.optimization.upper_bound = [1,1];
213 model.lipschitz_type =
'norm';
215 %add reduced data subset fields
216 model.reduced_data_subset = @p_part_reduced_data_subset;
220 reduced_data = gen_reduced_data(model, detailed_data);
228 n_Nder = length(N_der_vec);
230 N_av = zeros(1,n_N*n_Nder);
231 N_der_av = zeros(2,n_N*n_Nder);
232 t_opt = zeros(1,n_N*n_Nder);
233 opt_err = zeros(1,n_N*n_Nder);
234 opt_delta = zeros(1,n_N*n_Nder);
235 nbr_steps = zeros(1,n_N*n_Nder);
237 for i=1:length(N_vec)
238 for j=1:length(N_der_vec);
240 model.N_der = N_der_vec(j).*[1,1];
242 red_data_sub = model.reduced_data_subset(model, reduced_data);
246 opt_data =
optimize(model,red_data_sub);
248 opt_data.t_opt_red = t_opt_red;
249 disp(['Time for reduced optimization: ',num2str(t_opt_red)]);
252 t_opt(n_Nder*(i-1)+j)=t_opt_red;
253 opt_err(n_Nder*(i-1)+j) = norm(opt_data.max_output_paramsets - opt_data_det.max_output_paramsets);
254 opt_delta(n_Nder*(i-1)+j) = opt_data.Delta_mu(end);
255 nbr_steps(n_Nder*(i-1)+j) = opt_data.nr_opti_iter;
258 for p=1:length(part_used)
259 rd=red_data_sub.parts_reduced_data{part_used(p)};
260 for k=1:length(rd.t_part_reduced_data)
261 sumN(1) = sumN(1)+length(rd.t_part_reduced_data{k}.a0{1});
262 sumN(2) = sumN(2)+length(rd.t_part_reduced_data{k}.c0{1}{1});
263 sumN(3) = sumN(3)+length(rd.t_part_reduced_data{k}.c0{2}{1});
267 N=size(part_used,2)*nr_tparts;
269 N_av(n_Nder*(i-1)+j) = sumN(1);
270 N_der_av(:,n_Nder*(i-1)+j) = sumN([2,3])
';
276 disp('---------------------
');
277 disp('N_av , N_av_der, t_opt, opt_error, opt est err, numbr steps
')
279 disp([' ',num2str(N_av(i)),' |
',num2str(N_der_av(1,i)),' |
',num2str(N_der_av(2,i)),...
280 ' ||
',num2str(t_opt(i)),' |
',num2str(opt_err(i)),' |
',num2str(opt_delta(i))...
281 ' |
',num2str(nbr_steps(i)),'||
']);
287 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
288 % detailed gradient optimization (high dimensionsl coarse=1 oder 2)
289 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
291 params.coarse_factor = 2;
292 params.cone_const = 1;
294 model = convection_diffusion_fv_output_opt_model_rect_normed(params);
295 model_data = gen_model_data(model);
296 disp(['Diffusion coefficient =
',num2str(model.k)]);
298 model.optimization.init_params = [0.3, 0.3];
299 model.compute_derivative_info=1;
301 opt_data = optimize(model, model_data);
303 opt_data.t_opt_d = t_opt_d;
305 disp(['Time
for optimization :
',num2str(t_opt_d)]);
306 opt_data_det = opt_data;
308 save(['opt_data_det_gradient_step_error_init
',num2str(model.optimization.init_params),'.mat
'],'opt_data_det
');
313 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
314 % reduced optimization (gradient step error estimator)
315 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
318 load(fullfile(fdir,'coarse2
','reduced_data_complete_N200.mat
'));
321 % params.coarse_factor = 4;
322 % params.separate_bases = 1;
323 % params.cone_const = 1;
325 % model = convection_diffusion_fv_output_opt_model_rect_normed(params);
328 %load(fullfile(fdir,'coarse2
','basisNmax200
','reduced_data_complete_2ndfunctional.mat
'));
331 model.optimization.init_params = [0.3,0.3];
332 model.optimization.opt_mode = 'reduced
';
333 model.base_model.optimization.init_params = [0.3,0.3];
334 model.base_model.optimization.opt_mode = 'reduced
';
335 model.base_model.base_model.optimization.init_params = [0.3,0.3];
336 model.base_model.base_model.optimization.opt_mode = 'reduced
';
338 model.optimization.tol = 0.001;
339 model.base_model.optimization.tol = 0.001;
340 model.base_model.base_model.optimization.tol =0.001;
342 %___________________________________________________________________
348 %set 2nd functional fields
349 % model.base_model.save_time_indices = 0:model.base_model.nt;
350 % model.base_model.base_model.save_time_indices = 0:model.base_model.nt;
352 % model.base_model.verbose = 4;
353 % model.name_output_functional = 'box_mean_time
';
354 % model.get_output = @lin_evol_opt_output_time_integrated;
355 % model.output_function_ptr = @output_function_box_mean;
356 % model.sbox_xmin = 0.5;
357 % model.sbox_xmax = 1;
358 % model.sbox_ymin = 0.5;
359 % model.sbox_ymax = 1;
360 % model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt/2));
361 % model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*3/4));
362 % model.s_l2norm = sqrt(4)/sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
363 % model.s_l1norm = sqrt(4)/((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
364 % model.base_model.name_output_functional = 'box_mean_time
';
365 % model.base_model.get_output = @lin_evol_opt_output_time_integrated;
366 % model.base_model.output_function_ptr = @output_function_box_mean;
367 % model.base_model.sbox_xmin = 0.5;
368 % model.base_model.sbox_xmax = 1;
369 % model.base_model.sbox_ymin = 0.5;
370 % model.base_model.sbox_ymax = 1;
371 % model.base_model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt/2));
372 % model.base_model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*3/4));
373 % model.base_model.s_l2norm = sqrt(4)/sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
374 % model.base_model.s_l1norm = sqrt(4)/((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
375 % model.base_model.base_model.name_output_functional = 'box_mean_time
';
376 % model.base_model.base_model.get_output = @lin_evol_opt_output_time_integrated;
377 % model.base_model.base_model.output_function_ptr = @output_function_box_mean;
378 % model.base_model.base_model.sbox_xmin = 0.5;
379 % model.base_model.base_model.sbox_xmax = 1;
380 % model.base_model.base_model.sbox_ymin = 0.5;
381 % model.base_model.base_model.sbox_ymax = 1;
382 % model.base_model.base_model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt/2));
383 % model.base_model.base_model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*3/4));
384 % model.base_model.base_model.s_l2norm = sqrt(4)/sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
385 % model.base_model.base_model.s_l1norm = sqrt(4)/((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
386 %set optimzation parameters
388 model.base_model.optimization.optimizer = @gradient_opt;
389 model.base_model.base_model.optimization.optimizer = @gradient_opt;
390 model.optimization.stepsize_rule = 'quotient
';
391 model.base_model.optimization.stepsize_rule = 'quotient
';
392 model.base_model.base_model.optimization.stepsize_rule = 'quotient
';
393 model.optimization.initial_stepsize = 1;
394 model.base_model.optimization.initial_stepsize = 1;
395 model.base_model.base_model.optimization.initial_stepsize = 1;
396 model.stepsize_coefficient = 3;
397 model.base_model.stepsize_coefficient = 3;
398 model.base_model.base_model.stepsize_coefficient = 3;
400 % model.optimization.stepsize_rule = 'armijo
';
401 % model.optimization.armijo_t_min = 0.8;
402 % model.optimization.stepsize_factor = 0.75;
403 % model.base_model.optimization.stepsize_rule = 'armijo
';
404 % model.base_model.optimization.armijo_t_min = 0.8;
405 % model.base_model.optimization.stepsize_factor = 0.75;
406 % model.base_model.base_model.optimization.stepsize_rule = 'armijo
';
407 % model.base_model.base_model.optimization.armijo_t_min = 0.8;
408 % model.base_model.base_model.optimization.stepsize_factor = 0.75;
412 opt_data = optimize(model,reduced_data);
414 opt_data.t_opt_red = t_opt_red;
415 disp(['Time
for reduced optimization:
',num2str(t_opt_red)]);
421 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
422 % conducting a reduced simulation on symphony
423 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
426 cd /home/dihlmann/matlab/rbmatlab-core/rbasis/lin_evol_opt/convdiff/coarse2
428 load('reduced_data_complete.mat
');
430 model.optimization.init_params = [0.3,0.3];
431 model.optimization.opt_mode = 'reduced
';
432 model.compute_derivative_info = 1;
433 model.optimization.lower_bound = [0,0];
434 model.optimization.upper_bound = [1,1];
435 model.lipschitz_type = 'norm
';
438 opt_data = optimize(model,reduced_data);
440 opt_data.t_opt_red = t_opt_red;
441 disp(['Time
for reduced optimization:
',num2str(t_opt_red)]);
442 save(['opt_data_
',num2str(model.optimization.init_params),'.dat
'],'opt_data
');
444 disp('opt_data gespeichert
')
447 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
448 % doing several reduced optimization for randomly chosen initial values
449 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
452 %load('reduced_data_complete.mat
');
453 load(fullfile(fdir_temp,'coarse2
','reduced_data_complete.mat
'));
454 model.optimization.opt_mode = 'reduced
';
455 model.base_model.optimization.opt_mode = 'reduced
';
456 model.base_model.base_model.optimization.opt_mode = 'reduced
';
459 rand_mu=rand_uniform(n_sample,model.mu_ranges);
462 opt_data_ar = cell(n_sample, length(stepsizes));
465 model.optimization.init_params = rand_mu(:,i);
466 for j=1:length(stepsizes)
467 model.stepsize_coefficient = stepsizes(j);
469 opt_data_ar{i}{j} = optimize(model, reduced_data);
471 opt_data_ar{i}{j}.t_opt = t_opt;
475 save('opt_data_arrays25.mat
','opt_data_ar
','rand_mu
','stepsizes
');
477 %find out best step size
478 stepsize_v = zeros(n_sample,1);
479 Dmu_min_v = zeros(n_sample,1);
482 Dmu_min=opt_data_ar{i}{1}.Delta_mu(end);
483 stepsize_v(i) = stepsizes(1);
484 for j=2:length(stepsizes)
485 if (opt_data_ar{i}{j}.Delta_mu(end)<Dmu_min)
486 Dmu_min = opt_data_ar{i}{j}.Delta_mu(end);
487 stepsize_v(i) = stepsizes(j);
490 Dmu_min_v(i) = Dmu_min;
491 Dmu_sum = Dmu_sum+Dmu_min;
493 Dmu_av = Dmu_sum/n_sample;
495 save('opt_data_arrays_eval.mat
','opt_data_ar
','rand_mu
','stepsizes
',...
496 'stepsize_v
','Dmu_min_v
','Dmu_av
');
502 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
503 % detailed optimization for optimization with new error estimator
504 % (this is for comparison purposes)
505 % data is saved in opt_data_det.mat
506 % !!!exchange model to outflow model as soon as new model is available!!!
507 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
511 params.coarse_factor = 2;
512 params.cone_const =1;
514 % model = convection_diffusion_fv_output_opt_model_rect_normed_outflow(params);
516 % model.optimization.optimizer = @gradient_opt_non_iter_err;
517 % model.optimization.tol = 0.0005;
518 % model.optimization.init_params = [0.3, 0.3];
519 % %model.optimization.stepsize_rule = 'quotient
';
520 % %model.stepsize_coefficient = 7;
521 % %model.optimization.stepsize_rule = 'fixed_stepsize
';
522 % %model.optimization.stepsize_fix = 1;
523 % model.optimization.stepsize_rule = 'armijo
';
524 % model.optimization.sigma = 0.8;
525 % model.optimization.stepsize_factor = 0.75;
527 % model_data = gen_model_data(model);
531 % opt_data_det = optimize(model, model_data);
534 % opt_data_det.t_opt = t_opt;
538 % name = ['opt_data_det_
',num2str(model.optimization.init_params(1)),'_
',num2str(model.optimization.init_params(2)),...
539 % 'coarse
',num2str(model.coarse_factor),'.mat
'];
541 % save(name,'opt_data_det
');
546 disp('Optimizing 2nd functional
')
547 disp('------------------------
')
548 params.functional = 'box_mean_time
';
550 model = convection_diffusion_fv_output_opt_model_rect_normed_outflow(params);
553 model_data = gen_model_data(model);
555 %set optimization paramters
556 model.optimization.tol = 0.00001;
557 model.optimization.init_params = [0.8, 0.8];
558 model.optimization.stepsize_rule = 'armijo
';
559 model.optimization.sigma = 0.7;
560 model.optimization.stepsize_factor = 0.75;
561 model.optimization.initial_stepsize = 50;
564 opt_data_det = optimize(model, model_data);
567 opt_data_det.t_opt = t_opt;
569 name = ['opt_data_det_func2_
',num2str(model.optimization.init_params(1)),'_
',num2str(model.optimization.init_params(2)),...
570 'coarse
',num2str(model.coarse_factor),'.mat
'];
572 save(name,'opt_data_det
');
577 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
578 % reduced optimization using the new non-iterative error estimator. We
579 % verify the error estimator using the result from step 10. The constants
580 % are assumed to be known at the optimum: replace later by a more general
581 % offline computation... see step 120 and 121.
582 % An important quantity for the quality of the error estimtor is the
583 % breaking condition: model.optimization.tol
584 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
587 %load detailed optimization data
588 %load('opt_data_det_0.3_0.3coarse2.mat
');
591 %load the reduced data and model (later: outflow model)
592 load(fullfile(fdir,'coarse2
','reduced_data_complete_N200.mat
'));
593 %load(fullfile(fdir,'coarse16
','reduced_data_complete_coarse16.mat
'));
596 %set optimization parameters
597 model.optimization.tol = 0.0005;
598 model.base_model.optimization.tol = 0.0005;
599 model.base_model.base_model.optimization.tol =0.0005;
600 model.optimization.init_params = [0.3,0.3];
601 model.base_model.optimization.init_params = [0.3,0.3];
602 model.base_model.base_model.optimization.init_params = [0.3,0.3];
604 %set new fields in model
605 model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
606 model.base_model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
609 % model.optimization.stepsize_rule = 'fixed_stepsize
';
610 % model.base_model.optimization.stepsize_rule = 'fixed_stepsize
';
611 % model.base_model.base_model.optimization.stepsize_rule = 'fixed_stepsize
';
612 % model.optimization.stepsize_fix = 1;
613 % model.base_model.optimization.stepsize_fix = 1;
614 % model.base_model.base_model.optimization.stepsize_fix = 1;
615 %model.optimization.stepsize_rule = 'quotient
';
616 %model.base_model.optimization.stepsize_rule = 'quotient
';
617 %model.base_model.base_model.optimization.stepsize_rule = 'quotient
';
618 model.optimization.stepsize_rule = 'armijo
';
619 model.optimization.sigma = 0.8;
620 model.optimization.stepsize_factor = 0.75;
621 model.base_model.optimization.stepsize_rule = 'armijo
';
622 model.base_model.optimization.sigma = 0.8;
623 model.base_model.optimization.stepsize_factor = 0.75;
625 %set constants(replace later!!)
626 model.gamma_H = @my_get_gamma_H_constant;
627 model.base_model.gamma_H = @my_get_gamma_H_constant;
628 model.base_model.base_model.gamma_H = @my_get_gamma_H_constant;
629 model.L_H = @my_get_L_H_constant;
630 model.base_model.L_H = @my_get_L_H_constant;
631 model.base_model.base_model.L_H = @my_get_L_H_constant;
635 opt_data = optimize(model, reduced_data);
637 opt_data.t_opt = t_opt;
639 save(fullfile(fdir,'optimization_case11.mat
'),'opt_data
')
642 % disp(['reduced optimum:
',num2str(opt_data.optimal_params)])
643 % disp(['Delta_mu :
', num2str(opt_data.Delta_mu)])
644 % diff = opt_data.optimal_params-opt_data_det.optimal_params;
645 % disp(['true error :
',num2str(norm(diff))])
646 % disp(['Efficiency :
',num2str(opt_data.Delta_mu/norm(diff))])
648 % disp(['Time reduced optimization:
', num2str(opt_data.t_opt)])
649 % disp(['Time detailed optimization:
', num2str(opt_data_det.t_opt)]);
656 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
657 % Optimizae with a second functional (but NON TIME DEPENDENT!!!)
659 % the functional fields have to be added manually, as they are not included
660 % in the large model.
661 % reduced data has to be inhanced by projected output vectors
662 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
666 %load detailed optimization data
667 %load('opt_data_det_func2_0.3_0.3coarse2.mat
');
670 %load the reduced data and model (later: outflow model)
671 load(fullfile(fdir,'coarse2_neumann
','reduced_data_complete_N200.mat
'));
673 %set 2nd functional fields
674 model.name_output_functional = 'box_mean
';
675 model.get_output = @lin_evol_opt_output_time_independent;
676 model.output_function_ptr = @output_function_box_integral;
677 model.sbox_xmin = 0.75;
678 model.sbox_xmax = 1.75;
679 model.sbox_ymin = 0.25;
680 model.sbox_ymax = 1.25;
681 model.s_l2norm = sqrt(2);
682 model.base_model.name_output_functional = 'box_mean
';
683 model.base_model.get_output = @lin_evol_opt_output_time_independent;
684 model.base_model.output_function_ptr = @output_function_box_integral;
685 model.base_model.sbox_xmin = 0.75;
686 model.base_model.sbox_xmax = 1.75;
687 model.base_model.sbox_ymin = 0.25;
688 model.base_model.sbox_ymax = 1.25;
689 model.base_model.s_l2norm = sqrt(2);
690 model.base_model.base_model.name_output_functional = 'box_mean
';
691 model.base_model.base_model.get_output = @lin_evol_opt_output_time_independent;
692 model.base_model.base_model.output_function_ptr = @output_function_box_integral;
693 model.base_model.base_model.sbox_xmin = 0.75;
694 model.base_model.base_model.sbox_xmax = 1.75;
695 model.base_model.base_model.sbox_ymin = 0.25;
696 model.base_model.base_model.sbox_ymax = 1.25;
697 model.base_model.base_model.s_l2norm = sqrt(2);
702 model.optimization.tol = 0.0001;
703 model.base_model.optimization.tol = 0.0001;
704 model.base_model.base_model.optimization.tol =0.0001;
706 %set new fields in model
707 model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
708 model.base_model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
711 model.optimization.stepsize_rule = 'fixed_stepsize
';
712 model.base_model.optimization.stepsize_rule = 'fixed_stepsize
';
713 model.base_model.base_model.optimization.stepsize_rule = 'fixed_stepsize
';
714 model.optimization.stepsize_fix = 10;
715 model.base_model.optimization.stepsize_fix = 10;
716 model.base_model.base_model.optimization.stepsize_fix = 10;
718 %set constants(replace later!!)
719 % model.gamma_H = @(model)[2,model];
720 % model.base_model.gamma_H = @(model)[2,model];
721 % model.base_model.base_model.gamma_H = @(model)[2,model];
722 % model.L_H = @(model)[0.08,model];
723 % model.base_model.L_H = @(model)[0.08,model];
724 % model.base_model.base_model.L_H = @(model)[0.08,model];
728 opt_data = optimize(model, reduced_data);
730 opt_data.t_opt = t_opt;
733 disp('Results
for 2nd Functional reduced optimization
');
734 disp('----------------------------------------------
');
735 disp(['reduced optimum:
',num2str(opt_data.optimal_params)])
736 disp(['Delta_mu :
', num2str(opt_data.Delta_mu)])
737 diff = opt_data.optimal_params-opt_data_det.optimal_params;
738 disp(['true error :
',num2str(norm(diff))])
739 disp(['Efficiency :
',num2str(opt_data.Delta_mu/norm(diff))])
741 disp(['Time reduced optimization:
', num2str(opt_data.t_opt)])
742 disp(['Time detailed optimization:
', num2str(opt_data_det.t_opt)]);
749 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
750 % Optimize with a second functional
752 % important: the functional fields have to be added manually, as they were
753 % not included while painstakingly creating the reduced model on Symphony.
754 % The optimization tolerance has to be set very low (1e-5)
755 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
758 disp('Optimizing 2nd functional by gradient method with non-iterative error estimator
')
760 %load detailed optimization data
761 %load('opt_data_det_func2_0.8_0.8coarse2.mat
');
764 %load the reduced data and model (later: outflow model)
765 load(fullfile(fdir,'coarse2
','basisNmax200
','reduced_data_complete_2ndfunctional.mat
'));
766 %load(fullfile(fdir,'coarse16
','reduced_data_complete_2ndfunctional.mat
'));
768 %set 2nd functional fields
770 model.base_model.verbose = 4;
771 model.name_output_functional = 'box_mean_time
';
772 model.get_output = @lin_evol_opt_output_time_integrated;
773 model.output_function_ptr = @output_function_box_mean;
774 model.sbox_xmin = 0.5;
776 model.sbox_ymin = 0.5;
778 model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt/2));
779 model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*3/4));
780 model.s_l2norm = sqrt(4)/sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
781 model.s_l1norm = sqrt(4)/((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
782 model.base_model.name_output_functional = 'box_mean_time
';
783 model.base_model.get_output = @lin_evol_opt_output_time_integrated;
784 model.base_model.output_function_ptr = @output_function_box_mean;
785 model.base_model.sbox_xmin = 0.5;
786 model.base_model.sbox_xmax = 1;
787 model.base_model.sbox_ymin = 0.5;
788 model.base_model.sbox_ymax = 1;
789 model.base_model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt/2));
790 model.base_model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*3/4));
791 model.base_model.s_l2norm = sqrt(4)/sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
792 model.base_model.s_l1norm = sqrt(4)/((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
793 model.base_model.base_model.name_output_functional = 'box_mean_time
';
794 model.base_model.base_model.get_output = @lin_evol_opt_output_time_integrated;
795 model.base_model.base_model.output_function_ptr = @output_function_box_mean;
796 model.base_model.base_model.sbox_xmin = 0.5;
797 model.base_model.base_model.sbox_xmax = 1;
798 model.base_model.base_model.sbox_ymin = 0.5;
799 model.base_model.base_model.sbox_ymax = 1;
800 model.base_model.base_model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt/2));
801 model.base_model.base_model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*3/4));
802 model.base_model.base_model.s_l2norm = sqrt(4)/sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
803 model.base_model.base_model.s_l1norm = sqrt(4)/((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
804 %set optimzation parameters
805 model.optimization.tol = 0.0005;
806 model.base_model.optimization.tol = 0.0005;
807 model.base_model.base_model.optimization.tol =0.0005;
809 model.optimization.init_params =[0.75,0.57];
810 model.base_model.optimization.init_params =[0.75,0.57];
811 model.base_model.base_model.optimization.init_params =[0.75,0.57];
813 model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
814 model.base_model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
816 model.optimization.stepsize_rule = 'armijo
';
817 model.optimization.sigma = 0.7;
818 model.optimization.stepsize_factor = 0.75;
819 model.optimization.initial_stepsize = 10;
820 model.base_model.optimization.stepsize_rule = 'armijo
';
821 model.base_model.optimization.sigma = 0.7;
822 model.base_model.optimization.stepsize_factor = 0.75;
823 model.base_model.optimization.initial_stepsize = 10;
824 model.base_model.base_model.optimization.stepsize_rule = 'armijo
';
825 model.base_model.base_model.optimization.sigma = 0.7;
826 model.base_model.base_model.optimization.stepsize_factor = 0.75;
827 model.base_model.base_model.optimization.initial_stepsize = 10;
829 model.L_H = @my_get_L_H_constant;
830 model.base_model.L_H = @my_get_L_H_constant;
831 model.base_model.base_model.L_H = @my_get_L_H_constant;
833 model.gamma_H = @my_get_gamma_H_constant;
834 model.base_model.gamma_H = @my_get_gamma_H_constant;
835 model.base_model.base_model.gamma_H = @my_get_gamma_H_constant;
837 model.optimization.allow_constant_calculation = 1;
838 model.base_model.optimization.allow_constant_calculation = 1;
839 model.base_model.base_model.optimization.allow_constant_calculation = 1;
842 disp('starting reduced optimization
')
844 opt_data = optimize(model, reduced_data);
846 opt_data.t_opt = t_opt;
848 save(fullfile(fdir,'optimization_case13.mat
'),'opt_data
');
850 %detailed_optimization
851 disp('generating model data...
')
852 model_data = gen_model_data(model);
853 disp('starting detailed_optimization...
')
855 opt_data_det = optimize(model, model_data);
857 opt_data_det.t_opt = t_opt;
862 disp('Results
for 2nd Functional reduced optimization
');
863 disp('----------------------------------------------
');
864 disp(['reduced optimum:
',num2str(opt_data.optimal_params)])
865 disp(['Delta_mu :
', num2str(opt_data.Delta_mu)])
866 diff = opt_data.optimal_params-opt_data_det.optimal_params;
867 disp(['true error :
',num2str(norm(diff))])
868 disp(['Efficiency :
',num2str(opt_data.Delta_mu/norm(diff))])
870 disp(['Time reduced optimization:
', num2str(opt_data.t_opt)])
871 disp(['Time detailed optimization:
', num2str(opt_data_det.t_opt)]);
873 save(fullfile(fdir,['opt_data_2ndfunctional_initsteps_
',...
874 num2str(model.optimization.initial_stepsize),...
875 'coarse2.mat
']),'opt_data
','opt_data_det
');
880 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
881 % optimize with a basis subset (varying basis size)
882 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
886 N_choice = [76,76,70,65,60,50];
887 N_der_choice = [80,80;75,75;70,70;65,65;60,60;50,50];
889 %load the reduced basis
890 load(fullfile(fdir,'coarse2
','reduced_data_complete_N200.mat
'));
894 model.optimization.tol = 0.0005;
895 model.base_model.optimization.tol = 0.0005;
896 model.base_model.base_model.optimization.tol =0.0005;
897 model.optimization.init_params = [0.3,0.3];
898 model.base_model.optimization.init_params = [0.3,0.3];
899 model.base_model.base_model.optimization.init_params = [0.3,0.3];
900 model.optimization.stepsize_rule = 'armijo
';
901 model.optimization.sigma = 0.8;
902 model.optimization.stepsize_factor = 0.75;
903 model.base_model.optimization.stepsize_rule = 'armijo
';
904 model.base_model.optimization.sigma = 0.8;
905 model.base_model.optimization.stepsize_factor = 0.75;
907 %set new fields in model
908 model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
909 model.base_model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
911 %set constants(replace later!!)
912 model.gamma_H = @my_get_gamma_H_constant;
913 model.base_model.gamma_H = @my_get_gamma_H_constant;
914 model.base_model.base_model.gamma_H = @my_get_gamma_H_constant;
915 model.L_H = @my_get_L_H_constant;
916 model.base_model.L_H = @my_get_L_H_constant;
917 model.base_model.base_model.L_H = @my_get_L_H_constant;
919 %fix reduced data subset function
920 model.reduced_data_subset = @p_part_reduced_data_subset;
922 %normal optimzation full rb
924 opt_data_ar{1} = optimize(model, reduced_data);
926 opt_data_ar{1}.t_opt = t_opt;
928 for i=1:length(N_choice)
930 model.N_der = N_der_choice(i,:);
931 reduced_data_subset = model.reduced_data_subset(model,reduced_data);
934 opt_data_ar{i+1} = optimize(model, reduced_data_subset);
936 opt_data_ar{i+1}.t_opt = t_opt;
937 clear reduced_data_subset
941 save(fullfile(fdir,'case14_sizecomparison.mat
'),'opt_data_ar
','N_choice
','N_der_choice
')
944 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%55
945 % performing a detailled and a reduced optimization
946 % for various initial prameters (randomly chosen)
947 % the evaluating the results
949 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
953 if (nargin>1)&&(isfield(expar,'n_sample
'))
954 n_sample = expar.n_sample;
959 %introduce sample arrays
960 opt_data_det_ar = cell(1,n_sample);
961 opt_data_red_ar = cell(1,n_sample);
964 %load the reduced data and model
965 load(fullfile(fdir,'coarse2
','reduced_data_complete_N200.mat
'));
966 %load(fullfile(fdir,'coarse16
','reduced_data_complete_coarse16.mat
'));
968 model.base_model.save_time_indices = 0:model.base_model.nt;
969 model.base_model.base_model.save_time_indices = 0:model.base_model.nt;
971 model.base_model.verbose = 4;
972 %set optimization parameters
973 model.optimization.tol = 0.0005;
974 model.base_model.optimization.tol = 0.0005;
975 model.base_model.base_model.optimization.tol =0.0005;
976 %set new fields in model
977 model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
978 model.base_model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
979 model.optimization.stepsize_rule = 'armijo
';
980 model.optimization.sigma = 0.8;
981 model.optimization.stepsize_factor = 0.75;
982 model.base_model.optimization.stepsize_rule = 'armijo
';
983 model.base_model.optimization.sigma = 0.8;
984 model.base_model.optimization.stepsize_factor = 0.75;
986 %set constants(replace later!!)
987 model.gamma_H = @my_get_gamma_H_constant;
988 model.base_model.gamma_H = @my_get_gamma_H_constant;
989 model.base_model.base_model.gamma_H = @my_get_gamma_H_constant;
990 model.L_H = @my_get_L_H_constant;
991 model.base_model.L_H = @my_get_L_H_constant;
992 model.base_model.base_model.L_H = @my_get_L_H_constant;
995 model_data = gen_model_data(model);
997 %generating the sample set
998 M = rand_uniform(n_sample,model.mu_ranges);
1002 disp('===================
')
1003 disp(['Testpoint
',num2str(i),' of
',num2str(n_sample)])
1004 disp(['initial parameters:
',num2str(M(:,i)')])
1005 disp(
'----------------')
1006 %set
new initial parameters
1008 buf_model.optimization.init_params = M(:,i);
1009 buf_model.base_model.optimization.init_params = M(:,i);
1010 buf_model.base_model.base_model.optimization.init_params = M(:,i);
1013 %optimization detailed
1014 disp(
'detailed optimization...')
1016 opt_data_det =
optimize(buf_model, model_data);
1018 opt_data_det.t_opt = t_opt_det;
1019 %optimization reduced
1020 disp('reduced optimization')
1022 opt_data_red =
optimize(buf_model, reduced_data);
1024 opt_data_red.t_opt = t_opt;
1026 opt_data_det_ar{i} = opt_data_det;
1027 opt_data_red_ar{i} = opt_data_red;
1033 nRB_der_samples = [];
1034 t_opt_red_samples = zeros(n_sample,1);
1035 t_opt_det_samples = zeros(n_sample,1);
1036 Delta_samples = zeros(n_sample,1);
1037 err_samples = zeros(n_sample,1);
1038 effectivity_samples = zeros(n_sample,1);
1039 opti_steps_samples = zeros(n_sample,1);
1040 nr_fct_calls_samples = zeros(n_sample,1);
1041 nr_grad_calls_samples = zeros(n_sample,1);
1043 nRB_samples = [nRB_samples, opt_data_red_ar{i}.nRB];
1044 nRB_der_samples = [nRB_der_samples, opt_data_red_ar{i}.nRB_der];
1045 t_opt_red_samples(i) = opt_data_red_ar{i}.t_opt;
1046 t_opt_det_samples(i) = opt_data_det_ar{i}.t_opt;
1047 Delta_samples(i) = opt_data_red_ar{i}.Delta_mu(end);
1048 err_samples(i) = norm(opt_data_det_ar{i}.optimal_params - opt_data_red_ar{i}.optimal_params);
1049 effectivity_samples(i) = Delta_samples(i) / err_samples(i);
1050 opti_steps_samples(i) = opt_data_red_ar{i}.nr_opti_iter;
1051 nr_fct_calls_samples(i) = opt_data_red_ar{i}.nr_fct_calls;
1052 nr_grad_calls_samples(i) = opt_data_red_ar{i}.nr_grad_calc;
1056 results.nRB_max = max(nRB_samples);
1057 results.nRB_min = min(nRB_samples);
1058 results.nRB_av = mean(nRB_samples);
1059 results.nRB_der_max = max(nRB_der_samples
');
1060 results.nRB_der_min = min(nRB_der_samples');
1061 results.nRB_der_av = mean(nRB_der_samples
');
1062 results.t_opt_det_max = max(t_opt_det_samples);
1063 results.t_opt_det_min = min(t_opt_det_samples);
1064 results.t_opt_det_av = mean(t_opt_det_samples);
1065 results.t_opt_red_max = max(t_opt_red_samples);
1066 results.t_opt_red_min = min(t_opt_red_samples);
1067 results.t_opt_red_av = mean(t_opt_red_samples);
1068 results.Delta_max = max(Delta_samples);
1069 results.Delta_min = min(Delta_samples);
1070 results.Delta_av = mean(Delta_samples);
1071 results.err_max = max(err_samples);
1072 results.err_min = min(err_samples);
1073 results.err_av = mean(err_samples);
1074 results.effectivity_max = max(effectivity_samples);
1075 results.effectivity_min = min(effectivity_samples);
1076 results.effectivity_av = mean(effectivity_samples);
1077 results.opti_steps_max = max(opti_steps_samples);
1078 results.opti_steps_min = min(opti_steps_samples);
1079 results.opti_steps_av = mean(opti_steps_samples);
1080 results.nr_fct_calls_max = max(nr_fct_calls_samples);
1081 results.nr_fct_calls_min = min(nr_fct_calls_samples);
1082 results.nr_fct_calls_av = mean(nr_fct_calls_samples);
1083 results.nr_grad_calls_max = max(nr_grad_calls_samples);
1084 results.nr_grad_calls_min = min(nr_grad_calls_samples);
1085 results.nr_grad_calls_av = mean(nr_grad_calls_samples);
1087 name = ['results_case_15_coarse
',num2str(model.base_model.coarse_factor),...
1088 '_nsample_
',num2str(n_sample),'.mat
'];
1089 save(fullfile(fdir,name),'results
','opt_data_red_ar
','opt_data_det_ar
');
1092 setpref('Internet
','SMTP_Server
','wap04.mathematik.uni-stuttgart.de
')
1093 sendmail('dihlmann
','case15 fertig
',['Initial value changes with n_sample=
',num2str(n_sample),' for functional 1 finished. Good work Spock!
']);
1095 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1096 % weitere auswertungen der in case 15 erhaltenen Ergebnisse
1097 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
1101 load('reusults_case_15_coarse16_nsample_3.mat
')
1105 for i=1:length(opt_data_det_ar)
1106 opt_params = [opt_params;opt_data_det_ar{i}.optimal_params];
1109 scatter(opt_params(:,1),opt_params(:,2));
1114 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%55
1115 % performing a detailled and a reduced optimization
1116 % for various initial prameters (randomly chosen)
1117 % the evaluating the results
1119 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1123 if (nargin>1)&&(isfield(expar,'n_sample
'))
1124 n_sample = expar.n_sample;
1129 %introduce sample arrays
1130 opt_data_det_ar = cell(1,n_sample);
1131 opt_data_red_ar = cell(1,n_sample);
1133 %set optimization parameters
1134 load(fullfile(fdir,'coarse2
','basisNmax200
','reduced_data_complete_2ndfunctional.mat
'));
1136 %set 2nd functional fields
1137 model.base_model.save_time_indices = 0:model.base_model.nt;
1138 model.base_model.base_model.save_time_indices = 0:model.base_model.nt;
1140 model.base_model.verbose = 4;
1141 model.name_output_functional = 'box_mean_time
';
1142 model.get_output = @lin_evol_opt_output_time_integrated;
1143 model.output_function_ptr = @output_function_box_mean;
1144 model.sbox_xmin = 0.5;
1145 model.sbox_xmax = 1;
1146 model.sbox_ymin = 0.5;
1147 model.sbox_ymax = 1;
1148 model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt/2));
1149 model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*3/4));
1150 model.s_l2norm = sqrt(4)/sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1151 model.s_l1norm = sqrt(4)/((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1152 model.base_model.name_output_functional = 'box_mean_time
';
1153 model.base_model.get_output = @lin_evol_opt_output_time_integrated;
1154 model.base_model.output_function_ptr = @output_function_box_mean;
1155 model.base_model.sbox_xmin = 0.5;
1156 model.base_model.sbox_xmax = 1;
1157 model.base_model.sbox_ymin = 0.5;
1158 model.base_model.sbox_ymax = 1;
1159 model.base_model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt/2));
1160 model.base_model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*3/4));
1161 model.base_model.s_l2norm = sqrt(4)/sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1162 model.base_model.s_l1norm = sqrt(4)/((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1163 model.base_model.base_model.name_output_functional = 'box_mean_time
';
1164 model.base_model.base_model.get_output = @lin_evol_opt_output_time_integrated;
1165 model.base_model.base_model.output_function_ptr = @output_function_box_mean;
1166 model.base_model.base_model.sbox_xmin = 0.5;
1167 model.base_model.base_model.sbox_xmax = 1;
1168 model.base_model.base_model.sbox_ymin = 0.5;
1169 model.base_model.base_model.sbox_ymax = 1;
1170 model.base_model.base_model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt/2));
1171 model.base_model.base_model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*3/4));
1172 model.base_model.base_model.s_l2norm = sqrt(4)/sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1173 model.base_model.base_model.s_l1norm = sqrt(4)/((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1174 %set optimzation parameters
1175 model.optimization.tol = 0.0005;
1176 model.base_model.optimization.tol = 0.0005;
1177 model.base_model.base_model.optimization.tol =0.0005;
1179 model.optimization.init_params =[0.3,0.3];
1180 model.base_model.optimization.init_params =[0.3,0.3];
1181 model.base_model.base_model.optimization.init_params =[0.3,0.3];
1183 model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
1184 model.base_model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
1186 model.optimization.stepsize_rule = 'armijo
';
1187 model.optimization.sigma = 0.8;
1188 model.optimization.stepsize_factor = 0.75;
1189 model.optimization.initial_stepsize = 10;
1190 model.base_model.optimization.stepsize_rule = 'armijo
';
1191 model.base_model.optimization.sigma = 0.8;
1192 model.base_model.optimization.stepsize_factor = 0.75;
1193 model.base_model.optimization.initial_stepsize = 10;
1194 model.base_model.base_model.optimization.stepsize_rule = 'armijo
';
1195 model.base_model.base_model.optimization.sigma = 0.8;
1196 model.base_model.base_model.optimization.stepsize_factor = 0.75;
1197 model.base_model.base_model.optimization.initial_stepsize = 10;
1199 model.gamma_H = @(model)dummy_constant(model,9.4347);
1200 model.base_model.gamma_H = @(model)dummy_constant(model,9.4347);
1201 model.base_model.base_model.gamma_H =@(model)dummy_constant(model,9.4347);
1202 model.L_H = @(model)dummy_constant(model,3.442);
1203 model.base_model.L_H =@(model)dummy_constant(model,3.442);
1204 model.base_model.base_model.L_H = @(model)dummy_constant(model,3.442);
1206 %generate model_data
1207 model_data = gen_model_data(model);
1209 %generating the sample set
1210 M = rand_uniform(n_sample,model.mu_ranges);
1213 disp('===================
')
1214 disp(['Testpoint
',num2str(i),' of
',num2str(n_sample)])
1215 disp('----------------
')
1216 %set new initial parameters
1218 buf_model.optimization.init_params = M(:,i);
1219 buf_model.base_model.optimization.init_params = M(:,i);
1220 buf_model.base_model.base_model.optimization.init_params = M(:,i);
1223 %optimization detailed
1225 opt_data_det = optimize(buf_model, model_data);
1227 opt_data_det.t_opt = t_opt_det;
1228 %optimization reduced
1230 opt_data_red = optimize(buf_model, reduced_data);
1232 opt_data_red.t_opt = t_opt;
1234 opt_data_det_ar{i} = opt_data_det;
1235 opt_data_red_ar{i} = opt_data_red;
1240 nRB_der_samples = [];
1241 t_opt_red_samples = zeros(n_sample,1);
1242 t_opt_det_samples = zeros(n_sample,1);
1243 Delta_samples = zeros(n_sample,1);
1244 err_samples = zeros(n_sample,1);
1245 effectivity_samples = zeros(n_sample,1);
1246 opti_steps_samples = zeros(n_sample,1);
1247 nr_fct_calls_samples = zeros(n_sample,1);
1248 nr_grad_calls_samples = zeros(n_sample,1);
1250 nRB_samples = [nRB_samples, opt_data_red_ar{i}.nRB];
1251 nRB_der_samples = [nRB_der_samples, opt_data_red_ar{i}.nRB_der];
1252 t_opt_red_samples(i) = opt_data_red_ar{i}.t_opt;
1253 t_opt_det_samples(i) = opt_data_det_ar{i}.t_opt;
1254 Delta_samples(i) = opt_data_red_ar{i}.Delta_mu(end);
1255 err_samples(i) = norm(opt_data_det_ar{i}.optimal_params - opt_data_red_ar{i}.optimal_params);
1256 effectivity_samples(i) = Delta_samples(i) / err_samples(i);
1257 opti_steps_samples(i) = opt_data_red_ar{i}.nr_opti_iter;
1258 nr_fct_calls_samples(i) = opt_data_red_ar{i}.nr_fct_calls;
1259 nr_grad_calls_samples(i) = opt_data_red_ar{i}.nr_grad_calc;
1263 results.nRB_max = max(nRB_samples);
1264 results.nRB_min = min(nRB_samples);
1265 results.nRB_av = mean(nRB_samples);
1266 results.nRB_der_max = max(nRB_der_samples');
1267 results.nRB_der_min = min(nRB_der_samples
');
1268 results.nRB_der_av = mean(nRB_der_samples');
1269 results.t_opt_det_max = max(t_opt_det_samples);
1270 results.t_opt_det_min = min(t_opt_det_samples);
1271 results.t_opt_det_av = mean(t_opt_det_samples);
1272 results.t_opt_red_max = max(t_opt_red_samples);
1273 results.t_opt_red_min = min(t_opt_red_samples);
1274 results.t_opt_red_av = mean(t_opt_red_samples);
1275 results.Delta_max = max(Delta_samples);
1276 results.Delta_min = min(Delta_samples);
1277 results.Delta_av = mean(Delta_samples);
1278 results.err_max = max(err_samples);
1279 results.err_min = min(err_samples);
1280 results.err_av = mean(err_samples);
1281 results.effectivity_max = max(effectivity_samples);
1282 results.effectivity_min = min(effectivity_samples);
1283 results.effectivity_av = mean(effectivity_samples);
1284 results.opti_steps_max = max(opti_steps_samples);
1285 results.opti_steps_min = min(opti_steps_samples);
1286 results.opti_steps_av = mean(opti_steps_samples);
1287 results.nr_fct_calls_max = max(nr_fct_calls_samples);
1288 results.nr_fct_calls_min = min(nr_fct_calls_samples);
1289 results.nr_fct_calls_av = mean(nr_fct_calls_samples);
1290 results.nr_grad_calls_max = max(nr_grad_calls_samples);
1291 results.nr_grad_calls_min = min(nr_grad_calls_samples);
1292 results.nr_grad_calls_av = mean(nr_grad_calls_samples);
1294 name = [
'results_case_17_coarse',num2str(model.base_model.coarse_factor),...
1295 '_nsample_',num2str(n_sample),
'.mat'];
1296 save(fullfile(fdir,name),
'results',
'opt_data_red_ar',
'opt_data_det_ar');
1301 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
1303 % Optimierung mit dem Simplex (vorprogrammiert in Matlab)
1305 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1309 %load the reduced data and model (later: outflow model)
1310 %load(fullfile(fdir,
'coarse2',
'reduced_data_complete_N200.mat'));
1311 load(fullfile(fdir,
'coarse16',
'reduced_data_complete_coarse16.mat'));
1314 %set optimization parameters
1315 model.optimization.tol = 0.0005;
1316 model.base_model.optimization.tol = 0.0005;
1317 model.base_model.base_model.optimization.tol =0.0005;
1318 model.optimization.init_params = [0.3,0.3];
1319 model.base_model.optimization.init_params = [0.3,0.3];
1320 model.base_model.base_model.optimization.init_params = [0.3,0.3];
1322 %set
new fields in model
1323 model.base_model.optimization.optimizer = @simplex_nonlinear;
1324 model.base_model.base_model.optimization.optimizer = @simplex_nonlinear;
1327 %set constants(replace later!!)
1328 model.gamma_H = @my_get_gamma_H_constant;
1329 model.base_model.gamma_H = @my_get_gamma_H_constant;
1330 model.base_model.base_model.gamma_H = @my_get_gamma_H_constant;
1331 model.L_H = @my_get_L_H_constant;
1332 model.base_model.L_H = @my_get_L_H_constant;
1333 model.base_model.base_model.L_H = @my_get_L_H_constant;
1335 model_data = gen_model_data(model);
1339 opt_data =
optimize(model, reduced_data);
1341 opt_data.t_opt = t_opt;
1346 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1347 % lade die ergebnisse von case 15 und führe mit dem Simplex algorithmus für
1348 % die gleichen Testpunkte auch eine Optimierung durch
1350 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1355 if (nargin>1)&&(isfield(expar,'n_sample'))
1356 n_sample = expar.n_sample;
1362 % lade reduced data functional 1
1363 load(fullfile(fdir,'coarse2','reduced_data_complete_N200.mat'));
1364 %load(fullfile(fdir,'coarse16','reduced_data_complete_coarse16.mat'));
1366 % load results from case 15
1367 % name = ['reusults_case_15_coarse',num2str(model.base_model.coarse_factor),...
1368 % '_nsample_',num2str(n_sample),'.mat'];
1371 %initialize variables
1372 M = rand_uniform(n_sample,model.mu_ranges);
1374 opt_data_simpl_det_ar = cell(1,n_sample);
1375 opt_data_simpl_red_ar = cell(1,n_sample);
1378 %set fields for functional 1 and simplex algorithm
1380 %set optimization parameters
1381 model.optimization.tol = 0.0005;
1382 model.base_model.optimization.tol = 0.0005;
1383 model.base_model.base_model.optimization.tol =0.0005;
1384 model.base_model.optimization.optimizer = @simplex_nonlinear;
1385 model.base_model.base_model.optimization.optimizer = @simplex_nonlinear;
1387 %set constants(replace later!!)
1388 model.gamma_H = @my_get_gamma_H_constant;
1389 model.base_model.gamma_H = @my_get_gamma_H_constant;
1390 model.base_model.base_model.gamma_H = @my_get_gamma_H_constant;
1391 model.L_H = @my_get_L_H_constant;
1392 model.base_model.L_H = @my_get_L_H_constant;
1393 model.base_model.base_model.L_H = @my_get_L_H_constant;
1395 %generate model_data
1396 model_data = gen_model_data(model);
1401 disp('===================')
1402 disp(['Testpoint ',num2str(i),' of ',num2str(n_sample)])
1403 disp('----------------')
1404 %set new initial parameters
1405 model.optimization.init_params = M(:,i);
1406 model.base_model.optimization.init_params = M(:,i);
1407 model.base_model.base_model.optimization.init_params = M(:,i);
1410 %optimization detailed
1411 disp('Detailed simplex optimization...')
1413 opt_data_simpl_det =
optimize(model, model_data);
1415 opt_data_simpl_det.t_opt = t_opt_det;
1416 %optimization reduced
1417 disp('reduced simplex optimization...')
1419 opt_data_simpl_red =
optimize(model, reduced_data);
1421 opt_data_simpl_red.t_opt = t_opt;
1423 opt_data_simpl_det_ar{i} = opt_data_simpl_det;
1424 opt_data_simpl_red_ar{i} = opt_data_simpl_red;
1431 %evaluate the resulte
1433 t_opt_red_samples = zeros(n_sample,1);
1434 t_opt_det_samples = zeros(n_sample,1);
1435 Delta_samples = zeros(n_sample,1);
1436 err_samples = zeros(n_sample,1);
1437 effectivity_samples = zeros(n_sample,1);
1438 opti_steps_samples = zeros(n_sample,1);
1439 nr_fct_calls_samples = zeros(n_sample,1);
1441 t_opt_red_samples(i) = opt_data_simpl_red_ar{i}.t_opt;
1442 t_opt_det_samples(i) = opt_data_simpl_det_ar{i}.t_opt;
1443 Delta_samples(i) = opt_data_simpl_red_ar{i}.Delta_mu(end);
1444 err_samples(i) = norm(opt_data_simpl_det_ar{i}.optimal_params - opt_data_simpl_red_ar{i}.optimal_params);
1445 effectivity_samples(i) = Delta_samples(i) / err_samples(i);
1446 opti_steps_samples(i) = opt_data_simpl_red_ar{i}.nr_iterations;
1447 nr_fct_calls_samples(i) = opt_data_simpl_red_ar{i}.nr_fct_calls;
1451 results_simpl.M = M;
1452 results_simpl.t_opt_det_max = max(t_opt_det_samples);
1453 results_simpl.t_opt_det_min = min(t_opt_det_samples);
1454 results_simpl.t_opt_det_av = mean(t_opt_det_samples);
1455 results_simpl.t_opt_red_max = max(t_opt_red_samples);
1456 results_simpl.t_opt_red_min = min(t_opt_red_samples);
1457 results_simpl.t_opt_red_av = mean(t_opt_red_samples);
1458 results_simpl.Delta_max = max(Delta_samples);
1459 results_simpl.Delta_min = min(Delta_samples);
1460 results_simpl.Delta_av = mean(Delta_samples);
1461 results_simpl.err_max = max(err_samples);
1462 results_simpl.err_min = min(err_samples);
1463 results_simpl.err_av = mean(err_samples);
1464 results_simpl.effectivity_max = max(effectivity_samples);
1465 results_simpl.effectivity_min = min(effectivity_samples);
1466 results_simpl.effectivity_av = mean(effectivity_samples);
1467 results_simpl.opti_steps_max = max(opti_steps_samples);
1468 results_simpl.opti_steps_min = min(opti_steps_samples);
1469 results_simpl.opti_steps_av = mean(opti_steps_samples);
1470 results_simpl.nr_fct_calls_max = max(nr_fct_calls_samples);
1471 results_simpl.nr_fct_calls_min = min(nr_fct_calls_samples);
1472 results_simpl.nr_fct_calls_av = mean(nr_fct_calls_samples);
1476 name = [
'results_case_19_simplex_coarse',num2str(model.base_model.coarse_factor),...
1477 '_nsample_',num2str(n_sample),
'.mat'];
1478 save(fullfile(fdir,name),
'results_simpl',
'opt_data_simpl_red_ar',
'opt_data_simpl_det_ar');
1481 setpref(
'Internet',
'SMTP_Server',
'wap04.mathematik.uni-stuttgart.de')
1482 sendmail('dihlmann','case19 fertig',['Simplex optimization with ',num2str(n_sample),' samples for functional 1 finished. Good work Spock!']);
1485 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1486 % lade die ergebnisse von case 17 und führe mit dem Simplex algorithmus für
1487 % die gleichen Testpunkte auch eine Optimierung durch
1489 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1495 % lade reduced data functional 2
1496 load(fullfile(fdir,'coarse2','basisNmax200','reduced_data_complete_2ndfunctional.mat'));
1497 %load(fullfile(fdir,'coarse16','reduced_data_complete_coarse16_2ndfunctional.mat'));
1499 % load results from case 17
1500 % name = ['reusults_case_17_coarse',num2str(model.base_model.coarse_factor),...
1501 % '_nsample_',num2str(n_sample),'.mat'];
1504 %initialize variables
1505 M = rand_uniform(n_sample,model.mu_ranges);
1507 opt_data_simpl_det_ar = cell(1,n_sample);
1508 opt_data_simpl_red_ar = cell(1,n_sample);
1511 %set fields for functional 1 and simplex algorithm
1512 model.base_model.save_time_indices = 0:model.base_model.nt;
1513 model.base_model.base_model.save_time_indices = 0:model.base_model.nt;
1515 model.base_model.verbose = 4;
1516 model.name_output_functional = 'box_mean_time';
1517 model.get_output = @lin_evol_opt_output_time_integrated;
1518 model.output_function_ptr = @output_function_box_mean;
1519 model.sbox_xmin = 0.5;
1520 model.sbox_xmax = 1;
1521 model.sbox_ymin = 0.5;
1522 model.sbox_ymax = 1;
1523 model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt/2));
1524 model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*3/4));
1525 model.s_l2norm = sqrt(4)/sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1526 model.s_l1norm = sqrt(4)/((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1527 model.base_model.name_output_functional = 'box_mean_time';
1528 model.base_model.get_output = @lin_evol_opt_output_time_integrated;
1529 model.base_model.output_function_ptr = @output_function_box_mean;
1530 model.base_model.sbox_xmin = 0.5;
1531 model.base_model.sbox_xmax = 1;
1532 model.base_model.sbox_ymin = 0.5;
1533 model.base_model.sbox_ymax = 1;
1534 model.base_model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt/2));
1535 model.base_model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*3/4));
1536 model.base_model.s_l2norm = sqrt(4)/sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1537 model.base_model.s_l1norm = sqrt(4)/((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1538 model.base_model.base_model.name_output_functional = 'box_mean_time';
1539 model.base_model.base_model.get_output = @lin_evol_opt_output_time_integrated;
1540 model.base_model.base_model.output_function_ptr = @output_function_box_mean;
1541 model.base_model.base_model.sbox_xmin = 0.5;
1542 model.base_model.base_model.sbox_xmax = 1;
1543 model.base_model.base_model.sbox_ymin = 0.5;
1544 model.base_model.base_model.sbox_ymax = 1;
1545 model.base_model.base_model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt/2));
1546 model.base_model.base_model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*3/4));
1547 model.base_model.base_model.s_l2norm = sqrt(4)/sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1548 model.base_model.base_model.s_l1norm = sqrt(4)/((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1549 %set optimzation parameters
1550 model.optimization.tol = 0.0005;
1551 model.base_model.optimization.tol = 0.0005;
1552 model.base_model.base_model.optimization.tol =0.0005;
1554 model.gamma_H = @(model)dummy_constant(model,9.4347);
1555 model.base_model.gamma_H = @(model)dummy_constant(model,9.4347);
1556 model.base_model.base_model.gamma_H =@(model)dummy_constant(model,9.4347);
1557 model.L_H = @(model)dummy_constant(model,3.442);
1558 model.base_model.L_H =@(model)dummy_constant(model,3.442);
1559 model.base_model.base_model.L_H = @(model)dummy_constant(model,3.442);
1561 model.base_model.optimization.optimizer = @simplex_nonlinear;
1562 model.base_model.base_model.optimization.optimizer = @simplex_nonlinear;
1565 %generate model_data
1566 model_data = gen_model_data(model);
1571 disp('===================')
1572 disp(['Testpoint ',num2str(i),' of ',num2str(n_sample)])
1573 disp('----------------')
1574 %set new initial parameters
1575 model.optimization.init_params = M(:,i);
1576 model.base_model.optimization.init_params = M(:,i);
1577 model.base_model.base_model.optimization.init_params = M(:,i);
1580 %optimization detailed
1582 opt_data_simpl_det =
optimize(model, model_data);
1584 opt_data_simpl_det.t_opt = t_opt_det;
1585 %optimization reduced
1587 opt_data_simpl_red =
optimize(model, reduced_data);
1589 opt_data_simpl_red.t_opt = t_opt;
1591 opt_data_simpl_det_ar{i} = opt_data_simpl_det;
1592 opt_data_simpl_red_ar{i} = opt_data_simpl_red;
1596 %evaluate the resulte
1597 t_opt_red_samples = zeros(n_sample,1);
1598 t_opt_det_samples = zeros(n_sample,1);
1599 Delta_samples = zeros(n_sample,1);
1600 err_samples = zeros(n_sample,1);
1601 effectivity_samples = zeros(n_sample,1);
1602 opti_steps_samples = zeros(n_sample,1);
1603 nr_fct_calls_samples = zeros(n_sample,1);
1605 t_opt_red_samples(i) = opt_data_simpl_red_ar{i}.t_opt;
1606 t_opt_det_samples(i) = opt_data_simpl_det_ar{i}.t_opt;
1607 Delta_samples(i) = opt_data_simpl_red_ar{i}.Delta_mu(end);
1608 err_samples(i) = norm(opt_data_simpl_det_ar{i}.optimal_params - opt_data_simpl_red_ar{i}.optimal_params);
1609 effectivity_samples(i) = Delta_samples(i) / err_samples(i);
1610 opti_steps_samples(i) = opt_data_simpl_red_ar{i}.nr_iterations;
1611 nr_fct_calls_samples(i) = opt_data_simpl_red_ar{i}.nr_fct_calls;
1615 results_simpl.M = M;
1616 results_simpl.t_opt_det_max = max(t_opt_det_samples);
1617 results_simpl.t_opt_det_min = min(t_opt_det_samples);
1618 results_simpl.t_opt_det_av = mean(t_opt_det_samples);
1619 results_simpl.t_opt_red_max = max(t_opt_red_samples);
1620 results_simpl.t_opt_red_min = min(t_opt_red_samples);
1621 results_simpl.t_opt_red_av = mean(t_opt_red_samples);
1622 results_simpl.Delta_max = max(Delta_samples);
1623 results_simpl.Delta_min = min(Delta_samples);
1624 results_simpl.Delta_av = mean(Delta_samples);
1625 results_simpl.err_max = max(err_samples);
1626 results_simpl.err_min = min(err_samples);
1627 results_simpl.err_av = mean(err_samples);
1628 results_simpl.effectivity_max = max(effectivity_samples);
1629 results_simpl.effectivity_min = min(effectivity_samples);
1630 results_simpl.effectivity_av = mean(effectivity_samples);
1631 results_simpl.opti_steps_max = max(opti_steps_samples);
1632 results_simpl.opti_steps_min = min(opti_steps_samples);
1633 results_simpl.opti_steps_av = mean(opti_steps_samples);
1634 results_simpl.nr_fct_calls_max = max(nr_fct_calls_samples);
1635 results_simpl.nr_fct_calls_min = min(nr_fct_calls_samples);
1636 results_simpl.nr_fct_calls_av = mean(nr_fct_calls_samples);
1640 name = [
'results_case_20_simplex_coarse',num2str(model.base_model.coarse_factor),...
1641 '_nsample_',num2str(n_sample),
'.mat'];
1642 save(fullfile(fdir,name),
'results_simpl',
'opt_data_simpl_red_ar',
'opt_data_simpl_det_ar');
1646 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1647 % Experiment changing the breaking tolerance
1648 % we chacnge the breaking tolerance
for the gradient optimization to stop
1649 % Observe: When is the breaking condition
for the error estimator
1650 % fullfilled, how does the error estimator change with the changing
1651 % breaking condition, how does the effectivity change?
1655 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1659 %epsilon breaking values
1660 tol_vec = [0.005,0.002, 0.001, 0.0008,0.0005];
1661 n_sample = length(tol_vec);
1663 %introduce sample arrays
1664 opt_data_det_ar = cell(1,n_sample);
1665 opt_data_red_ar = cell(1,n_sample);
1667 %_________________________________________________________________________
1669 %===========================
1670 % %set optimization parameters
1671 % load(fullfile(fdir,
'coarse2',
'reduced_data_complete_N200.mat'));
1672 % %load(fullfile(fdir,
'coarse16',
'reduced_data_complete_coarse16.mat'));
1674 % model.verbose = 4;
1675 % model.base_model.verbose = 4;
1676 % %set optimization parameters
1677 % model.optimization.tol = 0.0005;
1678 % model.base_model.optimization.tol = 0.0005;
1679 % model.base_model.base_model.optimization.tol =0.0005;
1680 % %set
new fields in model
1681 % model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
1682 % model.base_model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
1683 % model.optimization.stepsize_rule =
'armijo';
1684 % model.optimization.sigma = 0.8;
1685 % model.optimization.stepsize_factor = 0.75;
1686 % model.base_model.optimization.stepsize_rule =
'armijo';
1687 % model.base_model.optimization.sigma = 0.8;
1688 % model.base_model.optimization.stepsize_factor = 0.75;
1690 % %set constants(replace later!!)
1691 % model.gamma_H = @my_get_gamma_H_constant;
1692 % model.base_model.gamma_H = @my_get_gamma_H_constant;
1693 % model.base_model.base_model.gamma_H = @my_get_gamma_H_constant;
1694 % model.L_H = @my_get_L_H_constant;
1695 % model.base_model.L_H = @my_get_L_H_constant;
1696 % model.base_model.base_model.L_H = @my_get_L_H_constant;
1699 %________________________________________________________________________________
1701 %=====================
1703 %set optimization parameters
1704 load(fullfile(fdir,
'coarse2',
'basisNmax200',
'reduced_data_complete_2ndfunctional.mat'));
1706 %set 2nd functional fields
1707 model.base_model.save_time_indices = 0:model.base_model.nt;
1708 model.base_model.base_model.save_time_indices = 0:model.base_model.nt;
1710 model.base_model.verbose = 4;
1711 model.name_output_functional =
'box_mean_time';
1712 model.get_output = @lin_evol_opt_output_time_integrated;
1713 model.output_function_ptr = @output_function_box_mean;
1714 model.sbox_xmin = 0.5;
1715 model.sbox_xmax = 1;
1716 model.sbox_ymin = 0.5;
1717 model.sbox_ymax = 1;
1718 model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt/2));
1719 model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*3/4));
1720 model.s_l2norm = sqrt(4)/sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1721 model.s_l1norm = sqrt(4)/((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1722 model.base_model.name_output_functional =
'box_mean_time';
1723 model.base_model.get_output = @lin_evol_opt_output_time_integrated;
1724 model.base_model.output_function_ptr = @output_function_box_mean;
1725 model.base_model.sbox_xmin = 0.5;
1726 model.base_model.sbox_xmax = 1;
1727 model.base_model.sbox_ymin = 0.5;
1728 model.base_model.sbox_ymax = 1;
1729 model.base_model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt/2));
1730 model.base_model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*3/4));
1731 model.base_model.s_l2norm = sqrt(4)/sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1732 model.base_model.s_l1norm = sqrt(4)/((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1733 model.base_model.base_model.name_output_functional =
'box_mean_time';
1734 model.base_model.base_model.get_output = @lin_evol_opt_output_time_integrated;
1735 model.base_model.base_model.output_function_ptr = @output_function_box_mean;
1736 model.base_model.base_model.sbox_xmin = 0.5;
1737 model.base_model.base_model.sbox_xmax = 1;
1738 model.base_model.base_model.sbox_ymin = 0.5;
1739 model.base_model.base_model.sbox_ymax = 1;
1740 model.base_model.base_model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt/2));
1741 model.base_model.base_model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*3/4));
1742 model.base_model.base_model.s_l2norm = sqrt(4)/sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1743 model.base_model.base_model.s_l1norm = sqrt(4)/((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1744 %set optimzation parameters
1746 model.optimization.init_params =[0.35,0.35];
1747 model.base_model.optimization.init_params =[0.35,0.35];
1748 model.base_model.base_model.optimization.init_params =[0.35,0.35];
1750 model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
1751 model.base_model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
1753 model.optimization.stepsize_rule =
'armijo';
1754 model.optimization.sigma = 0.8;
1755 model.optimization.stepsize_factor = 0.75;
1756 model.optimization.initial_stepsize = 10;
1757 model.base_model.optimization.stepsize_rule =
'armijo';
1758 model.base_model.optimization.sigma = 0.8;
1759 model.base_model.optimization.stepsize_factor = 0.75;
1760 model.base_model.optimization.initial_stepsize = 10;
1761 model.base_model.base_model.optimization.stepsize_rule =
'armijo';
1762 model.base_model.base_model.optimization.sigma = 0.8;
1763 model.base_model.base_model.optimization.stepsize_factor = 0.75;
1764 model.base_model.base_model.optimization.initial_stepsize = 10;
1766 model.gamma_H = @(model)dummy_constant(model,100);
1767 model.base_model.gamma_H = @(model)dummy_constant(model,100);
1768 model.base_model.base_model.gamma_H =@(model)dummy_constant(model,100);
1769 model.L_H = @(model)dummy_constant(model,100);
1770 model.base_model.L_H =@(model)dummy_constant(model,100);
1771 model.base_model.base_model.L_H = @(model)dummy_constant(model,100);
1773 model.optimization.allow_constant_calculation = 1;
1774 model.base_model.optimization.allow_constant_calculation = 1;
1775 model.base_model.base_model.optimization.allow_constant_calculation = 1;
1778 %generate model_data
1779 model_data = gen_model_data(model);
1784 disp(
'===================')
1785 disp(['Testpoint ',num2str(i),' of ',num2str(n_sample)])
1786 disp('----------------')
1788 model.optimization.tol = tol_vec(i);
1789 model.base_model.optimization.tol = tol_vec(i);
1790 model.base_model.base_model.optimization.tol =tol_vec(i);
1792 %optimization detailed
1793 disp('detailed optimization ')
1794 disp('---------------------')
1796 opt_data_det =
optimize(model, model_data);
1798 opt_data_det.t_opt = t_opt_det;
1799 %optimization reduced
1800 disp('reduced optimization ')
1801 disp('---------------------')
1803 opt_data_red =
optimize(model, reduced_data);
1805 opt_data_red.t_opt = t_opt;
1807 opt_data_det_ar{i} = opt_data_det;
1808 opt_data_red_ar{i} = opt_data_red;
1813 nRB_der_samples = [];
1814 t_opt_red_samples = zeros(n_sample,1);
1815 t_opt_det_samples = zeros(n_sample,1);
1816 Delta_samples = zeros(n_sample,1);
1817 err_samples = zeros(n_sample,1);
1818 effectivity_samples = zeros(n_sample,1);
1819 opti_steps_samples = zeros(n_sample,1);
1820 nr_fct_calls_samples = zeros(n_sample,1);
1821 nr_grad_calls_samples = zeros(n_sample,1);
1822 break_value = zeros(1,n_sample);
1824 nRB_samples = [nRB_samples, opt_data_red_ar{i}.nRB];
1825 nRB_der_samples = [nRB_der_samples, opt_data_red_ar{i}.nRB_der];
1826 t_opt_red_samples(i) = opt_data_red_ar{i}.t_opt;
1827 t_opt_det_samples(i) = opt_data_det_ar{i}.t_opt;
1828 Delta_samples(i) = opt_data_red_ar{i}.Delta_mu(end);
1829 err_samples(i) = norm(opt_data_det_ar{i}.optimal_params - opt_data_red_ar{i}.optimal_params);
1830 effectivity_samples(i) = Delta_samples(i) / err_samples(i);
1831 opti_steps_samples(i) = opt_data_red_ar{i}.nr_opti_iter;
1832 nr_fct_calls_samples(i) = opt_data_red_ar{i}.nr_fct_calls;
1833 nr_grad_calls_samples(i) = opt_data_red_ar{i}.nr_grad_calc;
1834 break_value(i) = opt_data_red_ar{i}.break_value;
1838 results.nRB_max = max(nRB_samples);
1839 results.nRB_min = min(nRB_samples);
1840 results.nRB_av = mean(nRB_samples);
1841 results.nRB_der_max = max(nRB_der_samples
');
1842 results.nRB_der_min = min(nRB_der_samples');
1843 results.nRB_der_av = mean(nRB_der_samples
');
1844 results.t_opt_det_max = max(t_opt_det_samples);
1845 results.t_opt_det_min = min(t_opt_det_samples);
1846 results.t_opt_det_av = mean(t_opt_det_samples);
1847 results.t_opt_red_max = max(t_opt_red_samples);
1848 results.t_opt_red_min = min(t_opt_red_samples);
1849 results.t_opt_red_av = mean(t_opt_red_samples);
1850 results.Delta_max = max(Delta_samples);
1851 results.Delta_min = min(Delta_samples);
1852 results.Delta_av = mean(Delta_samples);
1853 results.err_max = max(err_samples);
1854 results.err_min = min(err_samples);
1855 results.err_av = mean(err_samples);
1856 results.effectivity_max = max(effectivity_samples);
1857 results.effectivity_min = min(effectivity_samples);
1858 results.effectivity_av = mean(effectivity_samples);
1859 results.opti_steps_max = max(opti_steps_samples);
1860 results.opti_steps_min = min(opti_steps_samples);
1861 results.opti_steps_av = mean(opti_steps_samples);
1862 results.nr_fct_calls_max = max(nr_fct_calls_samples);
1863 results.nr_fct_calls_min = min(nr_fct_calls_samples);
1864 results.nr_fct_calls_av = mean(nr_fct_calls_samples);
1865 results.nr_grad_calls_max = max(nr_grad_calls_samples);
1866 results.nr_grad_calls_min = min(nr_grad_calls_samples);
1867 results.nr_grad_calls_av = mean(nr_grad_calls_samples);
1868 results.break_value = break_value;
1870 name = ['results_case_21_tolvariation_func2_coarse
',num2str(model.base_model.coarse_factor),...
1871 '_nsample_
',num2str(n_sample),'.mat
'];
1872 save(fullfile(fdir,name),'results
','opt_data_red_ar
','opt_data_det_ar
');
1876 setpref('Internet
','SMTP_Server
','wap04.mathematik.uni-stuttgart.de
')
1877 sendmail('dihlmann
','case21 fertig
','Sich verändernde toleranzen fertig. Functional1
');
1881 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1882 % changing the functionals: we change the position of the time interval
1883 % where the average concentration is calculated. Thereby we obtain
1884 % (hopefully) steep an flat functionals.
1885 % See if the breaking condition can be fullfilled for all type of
1887 % Plan: change functional --> conduct optimization --> calculate constants
1888 % --> examine braking value
1889 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1894 t1_vec = [0.75,0.5];%,0.25,0,0];
1895 t2_vec = [1,0.75];%,0.5,0.25,0.1];
1897 n_samples = length(t1_vec);
1898 opt_data_ar = cell(n_samples,1);
1899 %set optimization parameters
1900 load(fullfile(fdir,'coarse2
','basisNmax200
','reduced_data_complete_2ndfunctional.mat
'));
1901 %load(fullfile(fdir,'coarse16
','reduced_data_complete_2ndfunctional_coarse16.mat
'));
1903 %set functional fields
1905 model.base_model.verbose = 4;
1906 model.name_output_functional = 'box_mean_time
';
1907 model.get_output = @lin_evol_opt_output_time_integrated;
1908 model.output_function_ptr = @output_function_box_mean;
1909 model.sbox_xmin = 0.5;
1910 model.sbox_xmax = 1;
1911 model.sbox_ymin = 0.5;
1912 model.sbox_ymax = 1;
1914 model.base_model.name_output_functional = 'box_mean_time
';
1915 model.base_model.get_output = @lin_evol_opt_output_time_integrated;
1916 model.base_model.output_function_ptr = @output_function_box_mean;
1917 model.base_model.sbox_xmin = 0.5;
1918 model.base_model.sbox_xmax = 1;
1919 model.base_model.sbox_ymin = 0.5;
1920 model.base_model.sbox_ymax = 1;
1922 model.base_model.base_model.name_output_functional = 'box_mean_time
';
1923 model.base_model.base_model.get_output = @lin_evol_opt_output_time_integrated;
1924 model.base_model.base_model.output_function_ptr = @output_function_box_mean;
1925 model.base_model.base_model.sbox_xmin = 0.5;
1926 model.base_model.base_model.sbox_xmax = 1;
1927 model.base_model.base_model.sbox_ymin = 0.5;
1928 model.base_model.base_model.sbox_ymax = 1;
1932 %set optimzation parameters
1933 model.optimization.tol = 0.0005;
1934 model.base_model.optimization.tol = 0.0005;
1935 model.base_model.base_model.optimization.tol =0.0005;
1937 model.optimization.init_params =[0.5,0.5];
1938 model.base_model.optimization.init_params =[0.5,0.5];
1939 model.base_model.base_model.optimization.init_params =[0.5,0.5];
1941 model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
1942 model.base_model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
1944 model.optimization.stepsize_rule = 'armijo
';
1945 model.optimization.sigma = 0.8;
1946 model.optimization.stepsize_factor = 0.75;
1947 model.optimization.initial_stepsize = 10;
1948 model.base_model.optimization.stepsize_rule = 'armijo
';
1949 model.base_model.optimization.sigma = 0.8;
1950 model.base_model.optimization.stepsize_factor = 0.75;
1951 model.base_model.optimization.initial_stepsize = 10;
1952 model.base_model.base_model.optimization.stepsize_rule = 'armijo
';
1953 model.base_model.base_model.optimization.sigma = 0.8;
1954 model.base_model.base_model.optimization.stepsize_factor = 0.75;
1955 model.base_model.base_model.optimization.initial_stepsize = 10;
1957 %set constants very high so that a detailed constnat calculation is
1958 %triggered at the end of the optimization
1959 model.gamma_H = @(model)dummy_constant(model,100);
1960 model.base_model.gamma_H = @(model)dummy_constant(model,100);
1961 model.base_model.base_model.gamma_H =@(model)dummy_constant(model,100);
1962 model.L_H = @(model)dummy_constant(model,100);
1963 model.base_model.L_H =@(model)dummy_constant(model,100);
1964 model.base_model.base_model.L_H = @(model)dummy_constant(model,100);
1966 model.optimization.allow_constant_calculation = 1;
1967 model.base_model.optimization.allow_constant_calculation = 1;
1968 model.base_model.base_model.optimization.allow_constant_calculation = 1;
1972 disp('-------------------
')
1973 disp(['Sample nr
',num2str(i),' of
',num2str(n_samples)])
1974 disp('==============================
')
1975 %time frame settings
1976 model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt*t1_vec(i)));
1977 model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*t2_vec(i)));
1978 model.s_l2norm = sqrt(4)/sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1979 model.s_l1norm = sqrt(4)/((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1980 model.base_model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt*t1_vec(i)));
1981 model.base_model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*t2_vec(i)));
1982 model.base_model.s_l2norm = sqrt(4)/sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1983 model.base_model.s_l1norm = sqrt(4)/((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1984 model.base_model.base_model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt*t1_vec(i)));
1985 model.base_model.base_model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*t2_vec(i)));
1986 model.base_model.base_model.s_l2norm = sqrt(4)/sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1987 model.base_model.base_model.s_l1norm = sqrt(4)/((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
1989 opt_data_ar{i} = optimize(model, reduced_data);
1995 results.n_samples = n_samples;
1996 results.t1_vec = t1_vec;
1997 results.t2_vec = t2_vec;
2000 name = ['results_case_22_functionalchange_coarse
',num2str(model.base_model.coarse_factor),...
2001 '_nsample_
',num2str(n_samples),'.mat
'];
2002 save(fullfile(fdir,name),'results
','opt_data_ar
');
2006 setpref('Internet
','SMTP_Server
','wap04.mathematik.uni-stuttgart.de
')
2007 sendmail('dihlmann
','case22 fertig
','aenderung von zeitintervallen
');
2010 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
2011 % vergleich von iterativem und nichtiterativem Fehlerschätzer
2013 % von einem festen Stratpunkt aus werden ohne schrittweitensteuerung
2014 % gradientenoptimierungsverfahren durchgeführt.
2015 % Die werte beider Fehlerschätzer bei jedem Gradientenschritt werden
2017 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2021 %lade model und reduzierte daten
2022 load(fullfile(fdir,'coarse2
','reduced_data_complete_N200.mat
'));
2024 %set optimization parameters
2025 model.optimization.init_params = [0.5,0.5];
2026 model.optimization.opt_mode = 'reduced
';
2027 model.base_model.optimization.init_params = [0.5,0.5];
2028 model.base_model.optimization.opt_mode = 'reduced
';
2029 model.base_model.base_model.optimization.init_params = [0.5,0.5];
2030 model.base_model.base_model.optimization.opt_mode = 'reduced
';
2032 model.optimization.tol = 0.001;
2033 model.base_model.optimization.tol = 0.001;
2034 model.base_model.base_model.optimization.tol =0.001;
2036 model.base_model.optimization.optimizer = @gradient_opt;
2037 model.base_model.base_model.optimization.optimizer = @gradient_opt;
2038 model.optimization.stepsize_rule = 'quotient
';
2039 model.base_model.optimization.stepsize_rule = 'quotient
';
2040 model.base_model.base_model.optimization.stepsize_rule = 'quotient
';
2041 model.optimization.initial_stepsize = 1;
2042 model.base_model.optimization.initial_stepsize = 1;
2043 model.base_model.base_model.optimization.initial_stepsize = 1;
2044 model.stepsize_coefficient = 3;
2045 model.base_model.stepsize_coefficient = 3;
2046 model.base_model.base_model.stepsize_coefficient = 3;
2050 model.output_function_ptr = @output_function_box_mean;
2051 model.sbox_xmin = 1;
2052 model.sbox_xmax = 2;
2053 model.sbox_ymin = 0;
2054 model.sbox_ymax = 0.5;
2055 model.s_l2norm = sqrt(2);%1/sqrt((model.sbox_ymax-model.sbox_ymin)*(model.sbox_xmax-model.sbox_xmin));%0.0078*coarse_factor;%analytisch: <=1/sqrt(0.5);
2056 model.name_output_functional = 'box_mean
';
2057 model.get_output = @lin_evol_opt_output_time_independent;
2059 model.base_model.output_function_ptr = @output_function_box_mean;
2060 model.base_model.sbox_xmin = 1;
2061 model.base_model.sbox_xmax = 2;
2062 model.base_model.sbox_ymin = 0;
2063 model.base_model.sbox_ymax = 0.5;
2064 model.base_model.s_l2norm = sqrt(2);%1/sqrt((model.sbox_ymax-model.sbox_ymin)*(model.sbox_xmax-model.sbox_xmin));%0.0078*coarse_factor;%analytisch: <=1/sqrt(0.5);
2065 model.base_model.name_output_functional = 'box_mean
';
2066 model.base_model.get_output = @lin_evol_opt_output_time_independent;
2068 model.base_model.base_model.output_function_ptr = @output_function_box_mean;
2069 model.base_model.base_model.sbox_xmin = 1;
2070 model.base_model.base_model.sbox_xmax = 2;
2071 model.base_model.base_model.sbox_ymin = 0;
2072 model.base_model.base_model.sbox_ymax = 0.5;
2073 model.base_model.base_model.s_l2norm = sqrt(2);%1/sqrt((model.sbox_ymax-model.sbox_ymin)*(model.sbox_xmax-model.sbox_xmin));%0.0078*coarse_factor;%analytisch: <=1/sqrt(0.5);
2074 model.base_model.base_model.name_output_functional = 'box_mean
';
2075 model.base_model.base_model.get_output = @lin_evol_opt_output_time_independent;
2080 %conduct optimization with iterative error estimator
2081 opt_data_iter = optimize(model,reduced_data);
2083 %conduct optimzation wit noniterative error estimator
2084 model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
2085 model.base_model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
2086 model.gamma_H = @calculate_gamma_const;
2087 model.base_model.gamma_H = @calculate_gamma_const;
2088 model.base_model.base_model.gamma_H = @calculate_gamma_const;
2089 model.L_H = @calculate_Lipschitz_const;
2090 model.base_model.L_H = @calculate_Lipschitz_const;
2091 model.base_model.base_model.L_H = @calculate_Lipschitz_const;
2092 % model.gamma_H = @my_get_gamma_H_constant;
2093 % model.base_model.gamma_H = @my_get_gamma_H_constant;
2094 % model.base_model.base_model.gamma_H = @my_get_gamma_H_constant;
2095 % model.L_H = @my_get_L_H_constant;
2096 % model.base_model.L_H = @my_get_L_H_constant;
2097 % model.base_model.base_model.L_H = @my_get_L_H_constant;
2101 opt_data_noniter = optimize(model, reduced_data);
2103 save(fullfile(fdir,'results_case_23.mat
'),'opt_data_iter
','opt_data_noniter
');
2106 %compare the results with case 51
2109 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2110 %like case23: comparison between iterative and noniterative error estimator
2111 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2115 %set optimization parameters
2116 load(fullfile(fdir,'coarse2
','basisNmax200
','reduced_data_complete_2ndfunctional.mat
'));
2117 %load(fullfile(fdir,'coarse2
','reduced_data_complete_2ndfunctional.mat
'));
2119 %set 2nd functional fields
2120 model.base_model.save_time_indices = 0:model.base_model.nt;
2121 model.base_model.base_model.save_time_indices = 0:model.base_model.nt;
2123 model.base_model.verbose = 4;
2124 model.name_output_functional = 'box_mean_time
';
2125 model.get_output = @lin_evol_opt_output_time_integrated;
2126 model.output_function_ptr = @output_function_box_mean;
2127 model.sbox_xmin = 0.5;
2128 model.sbox_xmax = 1;
2129 model.sbox_ymin = 0.5;
2130 model.sbox_ymax = 1;
2131 model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt/2));
2132 model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*3/4));
2133 model.s_l2norm = sqrt(4)/sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
2134 model.s_l1norm = sqrt(4)/((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
2135 model.base_model.name_output_functional = 'box_mean_time
';
2136 model.base_model.get_output = @lin_evol_opt_output_time_integrated;
2137 model.base_model.output_function_ptr = @output_function_box_mean;
2138 model.base_model.sbox_xmin = 0.5;
2139 model.base_model.sbox_xmax = 1;
2140 model.base_model.sbox_ymin = 0.5;
2141 model.base_model.sbox_ymax = 1;
2142 model.base_model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt/2));
2143 model.base_model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*3/4));
2144 model.base_model.s_l2norm = sqrt(4)/sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
2145 model.base_model.s_l1norm = sqrt(4)/((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
2146 model.base_model.base_model.name_output_functional = 'box_mean_time
';
2147 model.base_model.base_model.get_output = @lin_evol_opt_output_time_integrated;
2148 model.base_model.base_model.output_function_ptr = @output_function_box_mean;
2149 model.base_model.base_model.sbox_xmin = 0.5;
2150 model.base_model.base_model.sbox_xmax = 1;
2151 model.base_model.base_model.sbox_ymin = 0.5;
2152 model.base_model.base_model.sbox_ymax = 1;
2153 model.base_model.base_model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt/2));
2154 model.base_model.base_model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*3/4));
2155 model.base_model.base_model.s_l2norm = sqrt(4)/sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
2156 model.base_model.base_model.s_l1norm = sqrt(4)/((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
2158 %set optimzation parameters
2159 model.optimization.tol = 0.0005;
2160 model.base_model.optimization.tol = 0.0005;
2161 model.base_model.base_model.optimization.tol =0.0005;
2163 model.optimization.init_params = [0.2,0.2];
2164 model.optimization.opt_mode = 'reduced
';
2165 model.base_model.optimization.init_params = [0.2,0.2];
2166 model.base_model.optimization.opt_mode = 'reduced
';
2167 model.base_model.base_model.optimization.init_params = [0.2,0.2];
2168 model.base_model.base_model.optimization.opt_mode = 'reduced
';
2170 model.base_model.optimization.optimizer = @gradient_opt;
2171 model.base_model.base_model.optimization.optimizer = @gradient_opt;
2172 model.optimization.stepsize_rule = 'quotient
';
2173 model.base_model.optimization.stepsize_rule = 'quotient
';
2174 model.base_model.base_model.optimization.stepsize_rule = 'quotient
';
2175 model.optimization.initial_stepsize = 2;
2176 model.base_model.optimization.initial_stepsize = 2;
2177 model.base_model.base_model.optimization.initial_stepsize = 2;
2178 model.stepsize_coefficient = 100;
2179 model.base_model.stepsize_coefficient = 100;
2180 model.base_model.base_model.stepsize_coefficient = 100;
2182 %conduct optimization with iterative error estimator
2183 opt_data_iter = optimize(model,reduced_data);
2185 %conduct optimization with noniterative error estimator
2186 model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
2187 model.base_model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
2188 model.gamma_H = @calculate_gamma_const;
2189 model.base_model.gamma_H = @calculate_gamma_const;
2190 model.base_model.base_model.gamma_H = @calculate_gamma_const;
2191 model.L_H = @calculate_Lipschitz_const;
2192 model.base_model.L_H = @calculate_Lipschitz_const;
2193 model.base_model.base_model.L_H = @calculate_Lipschitz_const;
2197 opt_data_noniter = optimize(model, reduced_data);
2199 save(fullfile(fdir,'results_case_24.mat
'),'opt_data_iter
','opt_data_noniter
');
2202 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
2203 % plot the funcitonal surface / Landscape generated with case 123 and 124
2204 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2207 load('Landschaft_func1_coarse2_numpts_25.mat
')
2209 surf(x_vec,y_vec,func1_det,'FaceColor
','interp
');
2213 print(h,'-dpng
','Functional1.png
');
2214 print(h,'-deps
','Functional1.eps
');
2216 load('Landschaft_func2_coarse2_numpts_25.mat
')
2218 surf(x_vec,y_vec,func2_det,'FaceColor
','interp
');
2222 print(h,'-dpng
','Functional2.png
');
2223 print(h,'-deps
','Functional2.eps
');
2225 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
2226 % evaluate and plot results fom case51:
2227 % comparison of iterative and noniterative error estimator
2228 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2232 %load result file from case 23
2233 %load(fullfile(fdir,'results_case_24.mat
'));
2234 load(fullfile(fdir,'results_case_23.mat
'));
2236 %plot the gradient way
2238 plot_PM(opt_data_iter);
2240 for i=1:size(opt_data_iter.Delta_mu,2)
2241 D(i) = norm(opt_data_iter.Delta_mu(:,i));
2244 %trennen in break value >1 und <=1
2245 non_val_indx = find(opt_data_noniter.break_value_vec>1);
2246 val_indx = find(opt_data_noniter.break_value_vec<=1);
2248 if ~isempty(non_val_indx)
2249 non_val_indx = [non_val_indx,val_indx(1)];
2250 non_val_Delta_mu = opt_data_noniter.Delta_mu_vec(non_val_indx);
2251 non_val_grad_norm = opt_data_iter.norm_grad_f_x(non_val_indx);
2254 val_Delta_mu = opt_data_noniter.Delta_mu_vec(val_indx);
2255 val_grad_norm = opt_data_iter.norm_grad_f_x(val_indx);
2259 loglog(opt_data_iter.norm_grad_f_x,D,'bo-
','LineWidth
',2)
2261 loglog(val_grad_norm,val_Delta_mu,'ro-
','LineWidth
',2)
2262 if ~isempty(non_val_indx)
2263 loglog(non_val_grad_norm,non_val_Delta_mu,'o--r
','LineWidth
',2);
2265 %axis([3.5e-4, 0.13,0.35e-3,4])%func2
2266 axis([8e-4, 0.4,4e-4,1.6])%func1
2267 title('Comparison of both error estimators
')
2268 legend('incremental error est.
','general error est. (valid)
','general error est. (not valid)
')
2269 xlabel('functional gradient norm
')
2270 ylabel('\Delta_{\mu}
')
2275 nr_steps = length(D);
2277 semilogy(0:nr_steps-1,D,'LineWidth
',2)
2279 semilogy(val_indx-1,val_Delta_mu,'r
','LineWidth
',2)
2280 if ~isempty(non_val_indx)
2281 semilogy(non_val_indx-1,non_val_Delta_mu,'r--
','LineWidth
',2)
2283 %axis([3.5e-4, 0.13,0.35e-3,4])%func2
2284 title('Comparison of both error estimators
')
2285 legend('incremental error est.
','non-incremental error est. valid
','non-incremental error est. not valid
')
2286 xlabel('step number
')
2287 ylabel('\Delta_{\mu}
')
2291 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2292 % Evaluation of case 20: Simplex optmization
2293 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
2296 load('results_case_20_simplex_coarse2_nsample_30.mat
')
2298 %The invalid error estimations (Delta_mu =1) are still included in
2299 %the evaluation... so evaluate again the results neglecting the
2300 %invalid error estimators
2302 %evaluate the resulte
2303 t_opt_red_samples = [];
2304 t_opt_det_samples = [];
2307 effectivity_samples = [];
2308 opti_steps_samples = [];
2309 nr_fct_calls_samples = [];
2310 for i = 1:length(opt_data_simpl_red_ar)
2311 if (opt_data_simpl_red_ar{i}.Delta_mu ~=-1)
2312 t_opt_red_samples = [t_opt_red_samples,opt_data_simpl_red_ar{i}.t_opt];
2313 t_opt_det_samples = [t_opt_det_samples,opt_data_simpl_det_ar{i}.t_opt];
2314 Delta_samples = [Delta_samples ,opt_data_simpl_red_ar{i}.Delta_mu(end)];
2315 err_samples = [err_samples,norm(opt_data_simpl_det_ar{i}.optimal_params - opt_data_simpl_red_ar{i}.optimal_params)];
2316 effectivity_samples = [effectivity_samples,Delta_samples(end) / err_samples(end)];
2317 opti_steps_samples = [opti_steps_samples,opt_data_simpl_red_ar{i}.nr_iterations];
2318 nr_fct_calls_samples = [nr_fct_calls_samples,opt_data_simpl_red_ar{i}.nr_fct_calls];
2323 results_simpl.t_opt_det_max = max(t_opt_det_samples);
2324 results_simpl.t_opt_det_min = min(t_opt_det_samples);
2325 results_simpl.t_opt_det_av = mean(t_opt_det_samples);
2326 results_simpl.t_opt_red_max = max(t_opt_red_samples);
2327 results_simpl.t_opt_red_min = min(t_opt_red_samples);
2328 results_simpl.t_opt_red_av = mean(t_opt_red_samples);
2329 results_simpl.Delta_max = max(Delta_samples);
2330 results_simpl.Delta_min = min(Delta_samples);
2331 results_simpl.Delta_av = mean(Delta_samples);
2332 results_simpl.err_max = max(err_samples);
2333 results_simpl.err_min = min(err_samples);
2334 results_simpl.err_av = mean(err_samples);
2335 results_simpl.effectivity_max = max(effectivity_samples);
2336 results_simpl.effectivity_min = min(effectivity_samples);
2337 results_simpl.effectivity_av = mean(effectivity_samples);
2338 results_simpl.opti_steps_max = max(opti_steps_samples);
2339 results_simpl.opti_steps_min = min(opti_steps_samples);
2340 results_simpl.opti_steps_av = mean(opti_steps_samples);
2341 results_simpl.nr_fct_calls_max = max(nr_fct_calls_samples);
2342 results_simpl.nr_fct_calls_min = min(nr_fct_calls_samples);
2343 results_simpl.nr_fct_calls_av = mean(nr_fct_calls_samples);
2347 name = ['results_evaluated_case_20_simplex30.mat
'];
2348 save(fullfile(fdir,name),'results_simpl
','opt_data_simpl_red_ar
','opt_data_simpl_det_ar
');
2351 %%%%%%%%%%%%%%%%%%%%%%%5
2353 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
2354 % Tests and verifications
2355 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
2357 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2360 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
2361 % Test the error estimators
2362 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2366 params.coarse_factor = 8;
2367 pp.plot_function = @plot_element_data;
2369 model = convection_diffusion_fv_output_opt_model_rect_normed_outflow(params);
2370 model.compute_derivative_info = 0;
2374 model_data = gen_model_data(model);
2378 sim_data = detailed_simulation(model, model_data);
2380 detailed_data = model_data;
2381 detailed_data.RB = [];
2383 detailed_data.RB = model.rb_init_data_basis(model, detailed_data);
2387 PCAtr = PCA_fixspace(sim_data.U, detailed_data.RB,model_data.W);
2388 detailed_data.RB = [detailed_data.RB,PCAtr];
2391 %check orthogonality
2392 RB = detailed_data.RB;
2393 oc = max(max(RB'*model_data.W*RB-eye(size(RB,2), size(RB,2))))
2395 while (oc>1e-14)&&(loop<5)
2396 RB = orthonormalize_gram_schmidt(RB, model_data.W);
2397 oc = max(max(RB
'*model_data.W*RB-eye(size(RB,2), size(RB,2))))
2401 detailed_data.RB = RB;
2403 reduced_data = gen_reduced_data(model, detailed_data);
2405 rb_sim_data = rb_simulation(model, reduced_data);
2407 %model.rb_reconstruction = @rb_reconstruction_default;
2408 %rb_sim_data = rb_reconstruction(model, detailed_data, rb_sim_data);
2409 rb_sim_data = rb_reconstruction_derivative(model, detailed_data, rb_sim_data);
2411 U_rb = rb_sim_data.U;
2414 disp(['Geschaetzter Fehler:
',num2str(rb_sim_data.Delta(end))]);
2415 err = fv_l2_error(U_rb(:,model.save_time_indices+1), sim_data.U,model_data.grid,[]);
2416 disp(['Tatsaechlicher Fehler:
',num2str(err(end))]);
2417 plot_data_sequence(model, model_data.grid, U_rb(:,model.save_time_indices+1)-sim_data.U,pp);
2418 %plot_data_sequence(model, model_data.grid,U_rb-sim_data.U,plot_params);
2419 title('Fehlerplot
');
2422 title('Fehler RB über der Zeit
');
2427 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2428 % Basis generation using different diffusivity constants
2429 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2433 params.coarse_factor = 4;
2435 model = convection_diffusion_fv_output_opt_model_rect(params);
2436 model.compute_derivative_info = 0;
2439 if isfield(expar,'k
')
2446 model.RB_stop_Nmax = 30;
2448 model_data = gen_model_data(model);
2450 detailed_data = gen_detailed_data(model, model_data);
2452 save(['DiffGreedybase_coarse
',num2str(model.coarse_factor),'_Nmax_
',num2str(model.RB_stop_Nmax),'_k_
',num2str(model.k),'.mat
'],...
2453 'model
', 'detailed_data
');
2459 fname = {'DiffGreedybase_coarse4_Nmax_30_k_0.05.mat
','DiffGreedybase_coarse4_Nmax_30_k_0.01.mat
',...
2460 'DiffGreedybase_coarse4_Nmax_30_k_0.005.mat
','DiffGreedybase_coarse4_Nmax_30_k_0.001.mat
'};
2462 nfiles = length(fname);
2465 tr_errs = zeros(nfiles,30);
2466 colr={'r
','g
','b
','k
'};
2471 k{i} = num2str(model.k);
2472 tr_errs(i,:) = detailed_data.RB_info.max_err_sequence;
2474 plot(detailed_data.RB_info.max_err_sequence,colr{i});
2480 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
2481 % Test derivative calculation
2482 % compare detailed derivative simulation with an fd-model
2483 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2486 params.coarse_factor = 4;
2487 model = convection_diffusion_fv_output_opt_model_rect_normed_outflow(params);
2488 model.compute_derivative_info = 1;
2494 model = set_mu(model, mu);
2496 model_data = gen_model_data(model);
2498 sim_data = detailed_simulation(model, model_data);
2499 U_der = sim_data.U_der;
2501 U_der_fd = lin_evol_opt_fd_derivative(model, model_data,mu);
2504 %Compare detailed derivative solutions
2505 U_diff = cell(1,length(U_der));
2506 for i=1:length(U_der)
2507 U_diff{i} = U_der{i} - U_der_fd{i};
2508 disp(['Maximum difference in
',num2str(i),'. derivative:
',num2str(max(max(U_diff{i})))]);
2514 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2515 % verifiy derivative error estimators (PCA of sol+der trajectory)
2516 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2520 params.coarse_factor = 16;
2521 %params.separate_bases = 1;
2522 %model = advection_fv_output_opt_model(params);
2523 model = convection_diffusion_fv_output_opt_model_rect_normed(params);
2524 model.compute_derivative_info = 1;
2526 model.starting_time_step = 0;
2527 model.stopping_time_step = 120;
2532 model = set_mu(model, mu);
2534 %model.starting_time_step = 0;
2535 %model.stopping_time_step = 2;
2538 model_data = gen_model_data(model);
2540 sim_data = detailed_simulation(model, model_data);
2541 U_der = sim_data.U_der;
2544 %construct mixed basis by PCA over solution snd derivative solutions
2545 detailed_data = model_data;
2546 detailed_data.RB = [];
2548 detailed_data.RB = model.rb_init_data_basis(model, detailed_data);
2553 %for i = 1:length(U_der)
2554 % traj = [traj,U_der{i}];
2556 PCAtr = PCA_fixspace(traj, detailed_data.RB,model_data.W);
2557 detailed_data.RB = [detailed_data.RB,PCAtr];
2560 %check orthogonality
2561 RB = detailed_data.RB;
2562 oc = max(max(RB'*model_data.W*RB-eye(size(RB,2), size(RB,2))))
2564 while (oc>1e-14)&&(loop<5)
2565 RB = orthonormalize_gram_schmidt(RB, model_data.W);
2566 oc = max(max(RB'*model_data.W*RB-eye(size(RB,2), size(RB,2))))
2570 detailed_data.RB = RB;
2571 %detailed_data.RB_der{1} = RB;
2572 %detailed_data.RB_der{2} = RB;
2573 %detailed_data.RB_der{3} = RB;
2575 reduced_data = gen_reduced_data(model, detailed_data);
2577 rb_sim_data = rb_simulation(model, reduced_data);
2578 rb_sim_data = rb_reconstruction(model, detailed_data, rb_sim_data);
2579 U_der_rb = rb_sim_data.U_der;
2582 nr_der = length(U_der);
2584 U_diff_der = cell(1,nr_der);
2585 err = zeros(nr_der,size(U,2));
2587 clr={
'r',
'g',
'b',
'k',
'm'};
2589 disp([
'Anzahl an Basisvektoren: ',num2str(size(detailed_data.RB,2))])
2595 if ~isfield(model,'starting_time_step')
2596 U_diff_der{i} = U_der_rb(:,model.save_time_indices+1,i) - U_der{i};
2597 disp([
'Maximum difference in ',num2str(i),
'. rb derivative: ',num2str(max(max(U_diff_der{i})))]);
2598 err(i,:) =
fv_l2_error(U_der_rb(:,model.save_time_indices+1,i), U_der{i}, model_data.grid,[]);
2600 U_diff_der{i} = U_der_rb(:,:,i) - U_der{i};
2601 disp([
'Maximum difference in ',num2str(i),
'. rb derivative: ',num2str(max(max(U_diff_der{i})))]);
2602 err(i,:) =
fv_l2_error(U_der_rb(:,:,i), U_der{i}, model_data.grid,[]);
2605 plot(err(i,:),clr{i})
2608 plot(rb_sim_data.Delta_der(i,:),clr{i})
2611 plot(sqrt(rb_sim_data.res_u_der(i,:)),clr{i})
2615 if ~isfield(model,'starting_time_step')
2616 plot(
fv_l2_error(U,rb_sim_data.U(:,model.save_time_indices+1), model_data.grid,[]),'k')
2618 plot(
fv_l2_error(U,rb_sim_data.U, model_data.grid,[]),'k')
2621 legend('1','2','3','sol')
2623 plot(rb_sim_data.Delta,'k')
2624 title('estimated error')
2625 legend('1','2','3','sol')
2627 plot(sqrt(rb_sim_data.res_u),'k');
2629 legend('1','2','3','sol')
2633 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2634 % verifiy derivative error estimators by separate basis
2635 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2640 params.coarse_factor = 16;
2641 params.separate_bases = 1;
2642 %params.cone_const = 1;
2644 %model = advection_fv_output_opt_model(params);
2645 model = convection_diffusion_fv_output_opt_model_rect_normed_outflow(params);
2646 model.compute_derivative_info = 1;
2655 model = set_mu(model, mu);
2657 %model.starting_time_step = 0;
2658 %model.stopping_time_step = 2;
2661 model_data = gen_model_data(model);
2663 sim_data = detailed_simulation(model, model_data);
2664 U_der = sim_data.U_der;
2667 %construct mixed basis by PCA over solution snd derivative solutions
2668 detailed_data = model_data;
2669 detailed_data.RB = [];
2671 detailed_data.RB = model.rb_init_data_basis(model, detailed_data);
2676 PCAtr = model_orthonormalize_gram_schmidt(model, model_data,traj,1e-12);
2677 %PCAtr = PCA_fixspace(traj, detailed_data.RB,model_data.W,size(traj,2)-1);
2678 %PCAtr = model.PCA_fixspace(model, model_data, traj,detailed_data.RB);
2679 detailed_data.RB = [detailed_data.RB,PCAtr];
2682 %check orthogonality
2683 RB = detailed_data.RB;
2684 oc = max(max(RB'*model_data.W*RB-eye(size(RB,2), size(RB,2))))
2686 while (oc>1e-14)&&(loop<5)
2687 RB = orthonormalize_gram_schmidt(RB, model_data.W);
2688 oc = max(max(RB'*model_data.W*RB-eye(size(RB,2), size(RB,2))))
2691 detailed_data.RB = RB;
2694 detailed_data.RB_der = cell(1,length(U_der));
2695 for i=1:length(U_der)
2696 detailed_data.RB_der{i} = model.rb_init_data_basis(model, detailed_data);
2698 PCAtr = model_orthonormalize_gram_schmidt(model, model_data,traj,1e-12);
2699 %PCAtr = PCA_fixspace(traj, detailed_data.RB_der{i}, model_data.W,size(traj,2)-1);
2700 %PCAtr = model.PCA_fixspace(model, model_data, traj,detailed_data.RB,size(traj,2));
2701 detailed_data.RB_der{i} = [detailed_data.RB_der{i}, PCAtr];
2703 RB = detailed_data.RB_der{i};
2704 oc = max(max(RB
'*model_data.W*RB-eye(size(RB,2), size(RB,2))))
2706 while (oc>1e-14)&&(loop<5)
2707 RB = orthonormalize_gram_schmidt(RB, model_data.W);
2708 oc = max(max(RB'*model_data.W*RB-eye(size(RB,2), size(RB,2))))
2711 detailed_data.RB_der{i} = RB;
2715 reduced_data = gen_reduced_data(model, detailed_data);
2717 rb_sim_data = rb_simulation(model, reduced_data);
2718 rb_sim_data = rb_reconstruction(model, detailed_data, rb_sim_data);
2719 U_der_rb = rb_sim_data.U_der;
2722 nr_der = length(U_der);
2724 U_diff_der = cell(1,nr_der);
2725 err = zeros(nr_der,size(U,2));
2727 clr={
'r',
'g',
'b',
'k'};
2729 disp([
'Anzahl an Basisvektoren: ',num2str(size(detailed_data.RB,2))])
2735 if ~isfield(model,'starting_time_step')
2736 U_diff_der{i} = U_der_rb(:,model.save_time_indices+1,i) - U_der{i};
2737 disp([
'Maximum difference in ',num2str(i),
'. rb derivative: ',num2str(max(max(U_diff_der{i})))]);
2738 err(i,:) =
fv_l2_error(U_der_rb(:,model.save_time_indices+1,i), U_der{i}, model_data.grid,[]);
2740 U_diff_der{i} = U_der_rb(:,:,i) - U_der{i};
2741 disp([
'Maximum difference in ',num2str(i),
'. rb derivative: ',num2str(max(max(U_diff_der{i})))]);
2742 err(i,:) =
fv_l2_error(U_der_rb(:,:,i), U_der{i}, model_data.grid,[]);
2745 plot(err(i,:),clr{i})
2748 plot(rb_sim_data.Delta_der(i,:),clr{i})
2751 plot(rb_sim_data.res_u_der(i,:),clr{i})
2755 plot(
fv_l2_error(U,rb_sim_data.U(:,model.save_time_indices+1), model_data.grid,[]),'k')
2757 legend('1','2','3','sol')
2759 plot(rb_sim_data.Delta,'k')
2760 title('estimated error')
2761 legend('1','2','3','sol')
2763 plot(rb_sim_data.res_u,'k');
2765 legend('1','2','3','sol')
2771 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
2772 %
Test derivative calculation with k as parameter
2773 % compare detailed derivative simulation with an fd-model
2774 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2777 params.coarse_factor = 8;
2779 model = convection_diffusion_fv_output_opt_model_rect(params);
2780 model.compute_derivative_info = 1;
2783 mu=[0.1,0.3,0.9,0.02];
2784 model = set_mu(model, mu);
2786 model_data = gen_model_data(model);
2788 sim_data = detailed_simulation(model, model_data);
2789 U_der = sim_data.U_der;
2791 U_der_fd = lin_evol_opt_fd_derivative(model, model_data,mu);
2794 %Compare detailed derivative solutions
2795 U_diff = cell(1,length(U_der));
2796 for i=1:length(U_der)
2797 U_diff{i} = U_der{i} - U_der_fd{i};
2798 disp([
'Maximum difference in ',num2str(i),
'. derivative: ',num2str(max(max(U_diff{i})))]);
2801 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2802 % verifiy derivative error estimators (PCA of sol+der trajectory) with 4th
2804 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2808 params.coarse_factor = 8;
2810 %params.separate_bases = 1;
2811 %model = advection_fv_output_opt_model(params);
2812 model = convection_diffusion_fv_output_opt_model_rect(params);
2813 model.compute_derivative_info = 1;
2818 mu=[0.3,0.5,0.5,0.01];
2819 model = set_mu(model, mu);
2821 %model.starting_time_step = 0;
2822 %model.stopping_time_step = 2;
2825 model_data = gen_model_data(model);
2827 sim_data = detailed_simulation(model, model_data);
2828 U_der = sim_data.U_der;
2831 %construct mixed basis by PCA over solution snd derivative solutions
2832 detailed_data = model_data;
2833 detailed_data.RB = [];
2835 detailed_data.RB = model.rb_init_data_basis(model, detailed_data);
2840 for i = 1:length(U_der)
2841 traj = [traj,U_der{i}];
2843 PCAtr = PCA_fixspace(traj, detailed_data.RB,model_data.W);
2844 detailed_data.RB = [detailed_data.RB,PCAtr];
2847 %check orthogonality
2848 RB = detailed_data.RB;
2849 oc = max(max(RB
'*model_data.W*RB-eye(size(RB,2), size(RB,2))))
2851 while (oc>1e-14)&&(loop<5)
2852 RB = orthonormalize_gram_schmidt(RB, model_data.W);
2853 oc = max(max(RB'*model_data.W*RB-eye(size(RB,2), size(RB,2))))
2857 detailed_data.RB = RB;
2858 %detailed_data.RB_der{1} = RB;
2859 %detailed_data.RB_der{2} = RB;
2860 %detailed_data.RB_der{3} = RB;
2862 reduced_data = gen_reduced_data(model, detailed_data);
2864 rb_sim_data = rb_simulation(model, reduced_data);
2865 rb_sim_data = rb_reconstruction(model, detailed_data, rb_sim_data);
2866 U_der_rb = rb_sim_data.U_der;
2869 nr_der = length(U_der);
2871 U_diff_der = cell(1,nr_der);
2872 err = zeros(nr_der,size(U,2));
2874 clr={
'r',
'g',
'b',
'k',
'm'};
2876 disp([
'Anzahl an Basisvektoren: ',num2str(size(detailed_data.RB,2))])
2882 if ~isfield(model,'starting_time_step')
2883 U_diff_der{i} = U_der_rb(:,model.save_time_indices+1,i) - U_der{i};
2884 disp([
'Maximum difference in ',num2str(i),
'. rb derivative: ',num2str(max(max(U_diff_der{i})))]);
2885 err(i,:) =
fv_l2_error(U_der_rb(:,model.save_time_indices+1,i), U_der{i}, model_data.grid,[]);
2887 U_diff_der{i} = U_der_rb(:,:,i) - U_der{i};
2888 disp([
'Maximum difference in ',num2str(i),
'. rb derivative: ',num2str(max(max(U_diff_der{i})))]);
2889 err(i,:) =
fv_l2_error(U_der_rb(:,:,i), U_der{i}, model_data.grid,[]);
2892 plot(err(i,:),clr{i})
2895 plot(rb_sim_data.Delta_der(i,:),clr{i})
2898 plot(sqrt(rb_sim_data.res_u_der(i,:)),clr{i})
2902 plot(
fv_l2_error(U,rb_sim_data.U(:,model.save_time_indices+1), model_data.grid,[]),'k')
2904 legend('1','2','3','4','sol')
2906 plot(rb_sim_data.Delta,'k')
2907 title('estimated error')
2908 legend('1','2','3','4','sol')
2910 plot(sqrt(rb_sim_data.res_u),'k');
2912 legend('1','2','3','4','sol')
2917 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2918 % verifiy derivative error estimators by separate basis (with k as
2920 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2925 params.coarse_factor = 8;
2927 params.separate_bases = 1;
2928 %model = advection_fv_output_opt_model(params);
2929 model = convection_diffusion_fv_output_opt_model_rect(params);
2930 model.compute_derivative_info = 1;
2935 mu=[0.3,0.5,0.5,0.5];
2936 model = set_mu(model, mu);
2938 %model.starting_time_step = 0;
2939 %model.stopping_time_step = 2;
2942 model_data = gen_model_data(model);
2944 sim_data = detailed_simulation(model, model_data);
2945 U_der = sim_data.U_der;
2948 %construct mixed basis by PCA over solution snd derivative solutions
2949 detailed_data = model_data;
2950 detailed_data.RB = [];
2952 detailed_data.RB = model.rb_init_data_basis(model, detailed_data);
2957 PCAtr = PCA_fixspace(traj, detailed_data.RB,model_data.W);
2958 detailed_data.RB = [detailed_data.RB,PCAtr];
2961 %check orthogonality
2962 RB = detailed_data.RB;
2963 oc = max(max(RB'*model_data.W*RB-eye(size(RB,2), size(RB,2))))
2965 while (oc>1e-14)&&(loop<5)
2966 RB = orthonormalize_gram_schmidt(RB, model_data.W);
2967 oc = max(max(RB'*model_data.W*RB-eye(size(RB,2), size(RB,2))))
2970 detailed_data.RB = RB;
2973 detailed_data.RB_der = cell(1,length(U_der));
2974 for i=1:length(U_der)
2975 detailed_data.RB_der{i} = model.rb_init_data_basis(model, detailed_data);
2977 PCAtr = PCA_fixspace(traj, detailed_data.RB_der{i}, model_data.W);
2978 detailed_data.RB_der{i} = [detailed_data.RB_der{i}, PCAtr];
2980 RB = detailed_data.RB_der{i};
2981 oc = max(max(RB
'*model_data.W*RB-eye(size(RB,2), size(RB,2))))
2983 while (oc>1e-14)&&(loop<5)
2984 RB = orthonormalize_gram_schmidt(RB, model_data.W);
2985 oc = max(max(RB'*model_data.W*RB-eye(size(RB,2), size(RB,2))))
2988 detailed_data.RB_der{i} = RB;
2992 reduced_data = gen_reduced_data(model, detailed_data);
2994 rb_sim_data = rb_simulation(model, reduced_data);
2995 rb_sim_data = rb_reconstruction(model, detailed_data, rb_sim_data);
2996 U_der_rb = rb_sim_data.U_der;
2999 nr_der = length(U_der);
3001 U_diff_der = cell(1,nr_der);
3002 err = zeros(nr_der,size(U,2));
3004 clr={
'r',
'g',
'b',
'm',
'k'};
3006 disp([
'Anzahl an Basisvektoren: ',num2str(size(detailed_data.RB,2))])
3012 if ~isfield(model,'starting_time_step')
3013 U_diff_der{i} = U_der_rb(:,model.save_time_indices+1,i) - U_der{i};
3014 disp([
'Maximum difference in ',num2str(i),
'. rb derivative: ',num2str(max(max(U_diff_der{i})))]);
3015 err(i,:) =
fv_l2_error(U_der_rb(:,model.save_time_indices+1,i), U_der{i}, model_data.grid,[]);
3017 U_diff_der{i} = U_der_rb(:,:,i) - U_der{i};
3018 disp([
'Maximum difference in ',num2str(i),
'. rb derivative: ',num2str(max(max(U_diff_der{i})))]);
3019 err(i,:) =
fv_l2_error(U_der_rb(:,:,i), U_der{i}, model_data.grid,[]);
3022 plot(err(i,:),clr{i})
3025 plot(rb_sim_data.Delta_der(i,:),clr{i})
3028 plot(rb_sim_data.res_u_der(i,:),clr{i})
3032 plot(
fv_l2_error(U,rb_sim_data.U(:,model.save_time_indices+1), model_data.grid,[]),'k')
3034 legend('1','2','3','4','sol')
3036 plot(rb_sim_data.Delta,'k')
3037 title('estimated error')
3038 legend('1','2','3','4','sol')
3040 plot(rb_sim_data.res_u,'k');
3042 legend('1','2','3','4','sol')
3048 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3049 % Konstantenbestimmung mit diffusion
3051 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3056 params.coarse_factor = 16;
3059 M_test = [0,0,0,0;...
3068 model = convection_diffusion_fv_output_opt_model_rect_normed(params);
3072 model.compute_derivative_info = 1;
3073 model.decomp_mode = 0;
3075 model_data = gen_model_data(model);
3077 [L_I,L_E,b] = model.operators_ptr(model, model_data);
3079 %check if linear cimobination and decomp mode is the same
3080 model.decomp_mode = 1;
3081 [L_I_comp,L_E_comp,b_comp] = model.operators_ptr(model, model_data);
3083 model.decomp_mode = 2;
3084 [sL_I,sL_E,sb] = model.operators_ptr(model, model_data);
3086 L_I2 = lincomb_sequence(L_I_comp,sL_I);
3087 L_E2 = lincomb_sequence(L_E_comp,sL_E);
3088 b2 = lincomb_sequence(b_comp,sb);
3101 disp(['Norm der L_I_comp bei coarse_factor',num2str(model.coarse_factor),...
3102 'ist',num2str(norm(full(L_I_comp{1})))])
3105 for i=1:size(M_test,1)
3107 model = set_mu(model,mu);
3108 model.decomp_mode = 2;
3109 [sL_I,sL_E,sb] = model.operators_ptr(model, model_data);
3110 L_I2 = lincomb_sequence(L_I_comp,sL_I);
3111 L_E2 = lincomb_sequence(L_E_comp,sL_E);
3112 b2 = lincomb_sequence(b_comp,sb);
3115 % Konstante ||Id+dt*L_E||
3117 C_LE = norm(eye(size(L_E,1))+model.dt*full(L_E));
3124 % Konstante ||(Id-dt*L_I)^(-1)||
3127 C_LI = norm(inv(eye(size(L_I2,1))-model.dt*full(L_I2)));
3135 disp(['C_E Konstante ist: ',num2str(C_LEmax)]);
3136 disp(['C_I Konstante ist: ',num2str(C_LImax)]);
3137 %Beide Konstanten sind <=1
3141 % Derivative Konstanten C_dE und C_dI
3147 C_LId = zeros(1,size(M_test,1));
3148 for i=1:size(M_test,1)
3149 [sd_LI, sd_LE, sd_b] = model.rb_derivative_operators_coefficients_ptr(model);
3151 L_Id = lincomb_sequence(L_I_comp,sd_LI(p));
3152 L_Ed = lincomb_sequence(L_E_comp,sd_LE(p,:));
3153 bd = lincomb_sequence(b_comp,sd_b(p,:));
3155 C_LId(i) = norm(full(L_Id));
3156 C_LEd = norm(full(L_Ed));
3158 %if C_LId > C_LIdmax
3165 C_LIdmax = max(C_LId);
3166 disp(['Ableitungsoperatorkonstanten für ',num2str(p),'.Abl. und coarse_factor ',num2str(model.coarse_factor)]);
3167 disp(['C_Lid : ',num2str(C_LIdmax)]);
3168 disp(['C_Led : ', num2str(C_LEdmax)]);
3169 disp(['Ableitungskontanten für ',num2str(p),'. Abl. inkl. dt:']);
3170 disp(['C_Lid : ',num2str(model.dt*C_LIdmax)]);
3171 disp(['C_Led : ', num2str(model.dt*C_LEdmax)]);
3173 disp('Änderung der C_LId Konstante mit Parameter k:')
3177 %Operatornorm des Rieszrepresentanten des outputs ||J||
3178 % |J(u)|<=||J||||u||
3180 % Es gilt ||v|| = sup_{||w||=1;w\in\R^H} v*K*K^{-0.5}*w;%
3182 %--> ||v|| = norm(z)
3184 disp('Bestimmung von ||J||');
3187 model = convection_diffusion_fv_output_opt_model_rect_normed(params);
3188 model.decomp_mode = 1;
3190 model_data = gen_model_data(model);
3192 v=model.operators_output(model, model_data);
3194 z=v{1}
'*sqrt(inv(K));
3195 disp(['||v||=
',num2str(norm(z))]);
3199 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
3200 % lipschitz constants for functional gradient
3201 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3203 case 1092 %obsolet!!!!!!!!!!!!!!!!!!!!!!!!
3205 %Lipschitz Konstanten für verschiedene Fälle (zu optimierende
3206 %Variablen, coarse Faktoren) in arrays gespeichert und als File
3208 % Das Model sollte dieses File laden und die für sich relevante
3209 % Lipschitzkonstante auslesen.
3210 % Zur verbesserung der Genauigkeit können auch loka gültige
3211 % Lipschitzkonstanten gespeichert werden.
3213 %fix model_type here
3215 %model_type = 'normal
';
3216 %model_type = 'vx_const
';
3217 model_type = 'cone_const
';
3218 %time_type = 'time_const
';
3219 time_type = 'time_var
';
3221 if (nargin<3)||(~isfield(expar,'coarse_factor
'))
3222 params.coarse_factor =2;
3225 %fix here grid density for localized lipschitz constant
3227 %grid density of subgrid on each lipschitzgrid element
3230 if strcmp(time_type,'time_var
')
3231 params.time_const=0;
3233 params.time_const=1;
3239 params_to_optimize=[1,0,1];
3240 grid_params.range={[0,1],[0,1]};
3241 grid_params.numintervals=grid_dens*[1,1];
3243 params.cone_const=1;
3244 params_to_optimize=[0,1,1];
3245 grid_params.range={[0,1],[0,1]};
3246 grid_params.numintervals=grid_dens*[1,1];
3248 params.normal_model=1;
3249 params_to_optimize=[1,1,1];
3250 grid_params.range={[0,1],[0,1],[0,1]};
3251 grid_params.numintervals=grid_dens*[1,1,1];
3254 model = convection_diffusion_fv_output_opt_model_rect_normed(params);
3257 model.compute_derivative_info = 1;
3258 model.decomp_mode = 0;
3259 model.optimization.params_to_optmize= params_to_optimize;
3260 model_data = gen_model_data(model);
3262 %generate lipschitz parameter grid
3263 lip_grid = cubegrid(grid_params);
3265 lipschitz_const = zeros(1,lip_grid.nelements);
3267 model.decomp_mode=0;
3268 v=model.operators_output(model, model_data);
3270 for i=1:lip_grid.nelements
3271 %for every element i in the grid we have to calculate the
3275 sub_par.range=get_ranges_of_element(lip_grid,i);
3276 sub_par.numintervals = sub_grid_dens*ones(1,lip_grid.dimension);
3277 subgrid=cubegrid(sub_par);
3278 Mtest = subgrid.vertex;
3281 Cl = zeros(1,size(Mtest,1));
3282 for j=1:size(Mtest,1)
3283 model = set_mu(model, Mtest(j,:));
3285 U_der2 = lin_evol_opt_fd_second_derivative(model, model_data, Mtest(j,:));
3286 functional = zeros(length(U_der2),1);
3287 %functional of 2nd der.
3288 for m=1:length(U_der2)
3289 functional(m)=v'*U_der2{m}(:,end);
3291 Cl(j) = norm(functional);
3295 lipschitz_const(i) = max(Cl);
3300 lipschitz_data.lip_grid = lip_grid;
3301 lipschitz_data.lipschitz_const=lipschitz_const;
3303 save(fullfile(fdir,[
'lipschitz_data_diff_new',num2str(model.k),
'_',model_type,
'_',time_type,
'_coarse_',num2str(params.coarse_factor)]),
'lipschitz_data')
3306 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3307 % calculating Lipschitz constants of the functional gradient
for every mu-direction
3308 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3311 %Lipschitz Konstanten für verschiedene Fälle (zu optimierende
3312 %Variablen, coarse Faktoren) in arrays gespeichert und als File
3314 % Das Model sollte dieses File laden und die für sich relevante
3315 % Lipschitzkonstante auslesen.
3316 % Zur verbesserung der Genauigkeit können auch loka gültige
3317 % Lipschitzkonstanten gespeichert werden.
3319 %fix model_type here
3321 %model_type =
'normal';
3322 %model_type =
'vx_const';
3323 model_type =
'cone_const';
3324 %time_type =
'time_const';
3325 time_type =
'time_var';
3327 %params.functional =
'box_mean';
3328 params.functional =
'box_mean_time';
3330 if (nargin>1)&&(isfield(expar,
'coarse_factor'))
3331 params.coarse_factor = expar.coarse_factor;
3333 params.coarse_factor =2;
3336 %fix here grid density
for localized lipschitz constant
3338 %grid density of subgrid on each lipschitzgrid element
3341 if strcmp(time_type,
'time_var')
3342 params.time_const=0;
3344 params.time_const=1;
3350 params_to_optimize=[1,0,1];
3351 grid_params.range={[0,1],[0,1]};
3352 grid_params.numintervals=grid_dens*[1,1];
3354 params.cone_const=1;
3355 params_to_optimize=[0,1,1];
3356 grid_params.range={[0,1],[0,1]};
3357 grid_params.numintervals=grid_dens*[1,1];
3359 params.normal_model=1;
3360 params_to_optimize=[1,1,1];
3361 grid_params.range={[0,1],[0,1],[0,1]};
3362 grid_params.numintervals=grid_dens*[1,1,1];
3365 model = convection_diffusion_fv_output_opt_model_rect_normed_outflow(params);
3368 model.compute_derivative_info = 1;
3369 model.decomp_mode = 0;
3370 %model.optimization.params_to_optmize= params_to_optimize;
3371 model_data = gen_model_data(model);
3373 %generate lipschitz parameter grid
3376 lipschitz_const = zeros(1,lip_grid.nelements);
3378 model.decomp_mode=0;
3379 v=model.operators_output(model, model_data);
3381 for i=1:lip_grid.nelements
3382 %
for every element i in the grid we have to calculate the
3386 sub_par.range=get_ranges_of_element(lip_grid,i);
3387 sub_par.numintervals = sub_grid_dens*ones(1,lip_grid.dimension);
3389 Mtest = subgrid.vertex;
3392 %Cl = zeros(sum(params_to_optimize),sum(params_to_optimize));
3394 for j=1:size(Mtest,1)
3395 model = set_mu(model, Mtest(j,:));
3400 %functional of every Hessian entry.... find biggest Hessian norm
3401 help_ar = zeros(lip_grid.dimension,lip_grid.dimension);
3402 if strcmp(params.functional, 'box_mean_time')
3405 model.compute_derivative_info = 0;
3406 sim_data_dummy.U = Hes{k,l};
3407 sim_data_dummy = lin_evol_opt_output_time_integrated(model, sim_data_dummy,model_data);
3408 help_ar(k,l) = sim_data_dummy.y(end);
3415 help_ar(m,n)=v'*Hes{1}(:,end);
3419 buf = norm(help_ar);%norm of hessian matrix
for this test parameter
3427 lipschitz_const(i) = Hes_norm;
3432 lipschitz_data.lip_grid = lip_grid;
3433 lipschitz_data.lipschitz_const=lipschitz_const;
3435 if strcmp(model.name_output_functional,
'box_mean')
3436 save(fullfile(fdir,['lipschitz_data_diff',num2str(model.k),'_Hessian_',model_type,'_',time_type,'_coarse_',num2str(params.coarse_factor),'.mat']),'lipschitz_data')
3437 elseif strcmp(model.name_output_functional,'box_time_int')
3438 save(fullfile(fdir,['lipschitz_data_diff',num2str(model.k),'_timeInt_',model_type,'_',time_type,'_coarse_',num2str(params.coarse_factor),'.mat']),'lipschitz_data')
3440 error('no functional defined')
3446 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3447 % separate bases basis generation using only small parameter space
3448 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
3452 params.coarse_factor = 2;
3453 params.cone_const = 1;
3454 params.separate_bases = 1;
3456 model = convection_diffusion_fv_output_opt_model_rect(params);
3457 model.RB_solution_Nmax = 200;
3458 model.RB_solution_epsilon = 1e-6;
3459 model.RB_extension_algorithm = @RB_extension_PCA_fixspace_without_filecache;
3463 model.compute_derivative_info=1;
3464 model.RB_numintervals = [3,3];
3465 model.RB_stop_Nmax = 100;
3466 model.RB_stop_epsilon=5e-4;
3467 model.mu_ranges={[0.8,0.9],[0.6,0.7]};
3468 %model.starting_time_step = 0;
3469 %model.stopping_time_step = 50;
3471 model_data = gen_model_data(model);
3472 detailed_data = gen_detailed_data(model, model_data);
3477 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3478 % separate bases generation
3479 % 2 parameters + diffusion and t-partition
3480 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3483 params.coarse_factor = 16;
3484 params.cone_const = 1;
3485 params.separate_bases = 1;
3487 model = convection_diffusion_fv_output_opt_model_rect_normed(params);
3488 model.RB_extension_algorithm = @RB_extension_PCA_fixspace_without_filecache;
3490 model.RB_solution_Nmax = 12;
3491 model.RB_solution_epsilon = 5e-8;
3492 model.RB_stop_Nmax = 8;
3493 model.RB_stop_epsilon = 5e-7;
3496 t_part_range = cell(1,nr_tparts);
3498 t_part_range{i} = [(i-1)*floor((model.nt)/nr_tparts),(i)*floor((model.nt)/nr_tparts)];
3500 t_part_range{nr_tparts}(2) = model.nt;
3501 t_params.t_part_range=t_part_range;
3502 t_params.t_part_rb_generation_mode =
'fixed';
3505 model.compute_derivative_info=1;
3506 model.RB_numintervals = [3,3];
3508 model.mu_ranges={[0.4,0.5],[0.4,0.5]};
3510 model = t_part_model(model,t_params);
3513 model_data = gen_model_data(model);
3514 detailed_data = gen_detailed_data(model, model_data);
3516 filename=[
'newDiffGreedyBase_tpart',num2str(nr_tparts),
'_2p_coarse',num2str(model.coarse_factor),...
3517 '_Nmax',num2str(model.RB_stop_Nmax),
'_k_',num2str(model.k),
'_small0405.mat'];
3518 save(fullfile(fdir,filename),
'model',
'detailed_data',
'model_data');
3522 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3523 % separate bases generation (p+t) for selected partitions
3524 % 2 parameters + diffusion + ppartition and t-partition
3525 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3530 params.coarse_factor = 2;
3531 params.cone_const = 1;
3532 params.separate_bases = 1;
3534 p_params.p_part_numintervals = [10,10];
3535 p_params.p_part_generation_mode = 'uniform';
3537 model = convection_diffusion_fv_output_opt_model_rect_normed_outflow(params);
3543 t_part_range = cell(1,nr_tparts);
3545 t_part_range{i} = [(i-1)*floor((model.nt)/nr_tparts),(i)*floor((model.nt)/nr_tparts)];
3547 t_part_range{nr_tparts}(2) = model.nt;
3548 t_params.t_part_range=t_part_range;
3549 t_params.t_part_rb_generation_mode =
'fixed';
3552 model.compute_derivative_info=1;
3553 model.RB_numintervals = [3,3];
3554 model.RB_solution_Nmax = 150;
3555 model.RB_solution_epsilon = 1e-7;
3556 model.RB_stop_Nmax = 150;
3557 model.RB_stop_epsilon = 5e-7;
3558 model.mu_ranges={[0,1],[0,1]};
3561 model = t_part_model(model,t_params);
3563 model = p_part_model(model,p_params);
3565 model.gen_detailed_data = @p_part_gen_detailed_data_parallel_selected2;
3568 if isfield(expar,
'selected_partitions')
3569 model.selected_partitions = expar.selected_partitions;
3571 model.selected_partitions = 1:100;%[23,34,45,58,59,67,68,69];
3572 disp('no partitions selected')
3576 model_data = gen_model_data(model);
3577 detailed_data = gen_detailed_data(model, model_data);
3579 fdir = fullfile(fdir,'coarse2');
3580 filename=['DiffGreedyBase_ptpart',num2str(nr_tparts),'_2p_coarse',num2str(model.base_model.coarse_factor),...
3581 '_Nmax',num2str(model.base_model.RB_stop_Nmax),'_nrtparts_',num2str(nr_tparts),'_k_',num2str(model.base_model.k),...
3582 '_selected',num2str(model.selected_partitions),'.mat'];
3583 fn = fullfile(fdir,filename);
3584 save(fn,'-v7.3','model','detailed_data', 'model_data');
3589 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
3590 % calculate average dimension of tp-basis (all equally weighted)
3591 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3594 load(fullfile(fdir,'coarse2','reduced_data_complete.mat'));
3596 %load('Copy_of_DiffGreedyBase_ptpart10_2p_coarse4_Nmax30_k_0.25_selected.mat')
3598 part_used = 1:100;%[34,45,67,68,68,69,69,69];
3602 nr_tparts = length(reduced_data.parts_reduced_data{part_used(1)}.t_part_reduced_data);
3603 for i=1:length(part_used)
3604 rd=reduced_data.parts_reduced_data{part_used(i)};
3605 for j=1:length(rd.t_part_reduced_data)
3606 sumN(1) = sumN(1)+rd.t_part_reduced_data{j}.N;
3607 sumN(2) = sumN(2)+length(rd.t_part_reduced_data{j}.c0{1}{1});
3608 sumN(3) = sumN(3)+length(rd.t_part_reduced_data{j}.c0{2}{1});
3612 N=size(part_used,2)*nr_tparts;
3615 disp([
'Durchschnittliche Basenzahl: ',num2str(sumN)]);
3620 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3621 % Generiere eine p_part Trickbasis
3622 % PCA von Trajektorien zu vorgegebenen Parametern werden berechnet
3623 % anschließend werden diese PCAs als reduzierte Basen in ein p_part_Gitter
3625 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
3628 params.coarse_factor = 2;
3629 params.cone_const = 1;
3630 params.separate_bases = 1;
3633 model = convection_diffusion_fv_output_opt_model_rect_normed(params);
3634 model.compute_derivative_info = 1;
3635 model_data = gen_model_data(model);
3636 %what are the given parameters?
3637 if isfield(expar,
'M_train')
3638 M_train = expar.M_train;
3640 M_train = get_mu(model)';
3643 %how does the p_part grid look like?
3644 if isfield(expar,'p_part_numintervals')
3645 p_params.p_part_numintervals = expar.p_part_numintervals;
3647 p_params.p_part_numintervals = [10,10];
3649 p_params.p_part_generation_mode = 'uniform';
3652 %preparations t-part_model
3655 t_part_range = cell(1,nr_tparts);
3656 nt_ind = length(model.save_time_indices);
3658 t_part_range{i} = [(i-1)*floor((nt_ind)/nr_tparts),(i)*floor((nt_ind)/nr_tparts)];
3660 t_part_range{1}(1) = 0;
3661 t_part_range{nr_tparts}(2) = nt_ind-1;
3662 t_params.t_part_range=t_part_range;
3663 t_params.t_part_rb_generation_mode =
'fixed';
3664 model = t_part_model(model,t_params);
3667 model = p_part_model(model, p_params);
3670 g_params.range = model.p_part_ranges;
3671 g_params.numintervals = model.p_part_numintervals;
3674 %generate empty detailed_data structure
3676 detailed_data.pgrid = pgrid;
3677 detailed_data.parts_detailed_data = cell(
get(pgrid,
'nelements'),1);
3679 %initialize t-part-detailed_data
3680 t_part_detailed_data = cell(nr_tparts,1);
3682 t_part_detailed_data{i}.W = model_data.W;
3683 t_part_detailed_data{i}.grid = model_data.grid;
3684 t_part_detailed_data{i}.t_part_range = t_part_range;
3688 RB_init = model.base_model.rb_init_data_basis(model.base_model, model_data);
3690 for i=1:size(M_train,1)
3691 %loop over all elements in M_train
3692 model = set_mu(model, M_train(i,:));
3693 %detailed simulation
for this parameter and PCA generation
3694 sim_data = lin_evol_opt_detailed_der_simulation_t_part(model.base_model, model_data);
3695 %RB_ext = PCA_fixspace(sim_data.U,RB_init,model_data.W);
3697 %
if Basis in
this parameter partition exists already-->extend
3699 %only save solutions; orthonormalization and PCA later
3700 p=coord2leaf_element(pgrid,M_train(i,:));
3701 if isempty(detailed_data.parts_detailed_data{p})
3703 t_part_detailed_data{j}.RB = sim_data.U(:,(t_part_range{j}(1):t_part_range{j}(2))+1);
3704 for d=1:length(sim_data.U_der)
3705 t_part_detailed_data{j}.RB_der{d} = sim_data.U_der{d}(:,(t_part_range{j}(1):t_part_range{j}(2))+1);
3708 %attach initial conditions in first t_part
3709 t_part_detailed_data{1}.RB = [RB_init,t_part_detailed_data{1}.RB];
3710 for d=1:length(t_part_detailed_data{1}.RB_der)
3711 t_part_detailed_data{1}.RB_der{d} = [RB_init,t_part_detailed_data{1}.RB_der{d}];
3713 %detailed_data.parts_detailed_data{p}.RB = model_orthonormalize_qr(model.base_model,...
3714 % model_data,[RB_init,RB_ext]);
3715 detailed_data.parts_detailed_data{p}.t_part_detailed_data = t_part_detailed_data;
3716 detailed_Data.parts_detailed_data{p}.t_part_range = t_part_range;
3717 detailed_data.parts_detailed_data{p}.RB_info.M_train = M_train(i,:);
3718 detailed_data.parts_detailed_data{p}.grid = model_data.grid;
3719 detailed_data.parts_detailed_data{p}.W = model_data.W;
3721 %RB = model_orthonormalize_qr(model.base_model, model_data,...
3722 % [detailed_data.parts_detailed_data{p}.RB, RB_ext]);
3723 %detailed_data.parts_detailed_data{p}.RB = RB;
3725 t_part_detailed_data{j}.RB = [detailed_data.parts_detailed_data{p}.t_part_detailed_data{j}.RB,...
3726 sim_data.U(:,(t_part_range{j}(1):t_part_range{j}(2))+1)];
3727 for d=1:length(sim_data.U_der)
3728 t_part_detailed_data{j}.RB_der{d} = [detailed_data.parts_detailed_data{p}.t_part_detailed_data{j}.RB_der{d},...
3729 sim_data.U_der{d}(:,(t_part_range{j}(1):t_part_range{j}(2))+1)];
3732 detailed_data.parts_detailed_data{p}.t_part_detailed_data = t_part_detailed_data;
3733 detailed_data.parts_detailed_data{p}.RB_info.M_train = ...
3734 [detailed_data.parts_detailed_data{p}.RB_info.M_train;M_train(i,:)];
3739 %make a PCA in all p-parts and t-parts over the trajectories
3740 for p=1:length(detailed_data.parts_detailed_data)
3741 if ~isempty(detailed_data.parts_detailed_data{p})
3743 PCAtr = PCA_fixspace(detailed_data.parts_detailed_data{p}.t_part_detailed_data{j}.RB(:,2:end),...
3744 detailed_data.parts_detailed_data{p}.t_part_detailed_data{j}.RB(:,1),model_data.W);
3745 detailed_data.parts_detailed_data{p}.t_part_detailed_data{j}.RB = ...
3746 [detailed_data.parts_detailed_data{p}.t_part_detailed_data{j}.RB(:,1),PCAtr];
3747 detailed_data.parts_detailed_data{p}.t_part_detailed_data{j}.RB = model_orthonormalize_qr(model.base_model, model_data,...
3748 detailed_data.parts_detailed_data{p}.t_part_detailed_data{j}.RB);
3749 for d=1:length(detailed_data.parts_detailed_data{p}.t_part_detailed_data{j}.RB_der)
3750 PCAtr = PCA_fixspace(detailed_data.parts_detailed_data{p}.t_part_detailed_data{j}.RB_der{d}(:,2:end),...
3751 detailed_data.parts_detailed_data{p}.t_part_detailed_data{j}.RB_der{d}(:,1),model_data.W);
3752 detailed_data.parts_detailed_data{p}.t_part_detailed_data{j}.RB_der{d} = ...
3753 [detailed_data.parts_detailed_data{p}.t_part_detailed_data{j}.RB_der{d}(:,1),PCAtr];
3754 detailed_data.parts_detailed_data{p}.t_part_detailed_data{j}.RB_der{d} = ...
3755 model_orthonormalize_qr(model.base_model, model_data,detailed_data.parts_detailed_data{p}.t_part_detailed_data{j}.RB_der{d});
3763 reduced_data = gen_reduced_data(model, detailed_data);
3768 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3769 % ZUsammenfügen der einzelnen Partitionsn, die in
case 112 erzeugt wurden
3770 % !achtung: in dem Verzeichnis dürfen nur die benötigten dateien liegen
3771 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3772 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
3776 %fdir2 = fullfile(fdir,
'coarse4');
3777 %cd /home/dihlmann/matlab/rbmatlab/rbasis/lin_evol_opt/
convdiff/coarse2
3778 cd /home/dihlmann/matlab/rbmatlab-core/rbasis/lin_evol_opt/
convdiff/coarse2
3786 disp(
'start appending bases')
3791 for p=1:length(detailed_data.parts_detailed_data)
3792 if ~isempty(detailed_data.parts_detailed_data{p})
3793 dd.parts_detailed_data{p} = detailed_data.parts_detailed_data{p};
3800 disp(
'saving the complete basis')
3801 save -v7.3 complete_TP_basis_coarse2.mat model detailed_data
3803 disp('Generating the reduced data');
3804 reduced_data = gen_reduced_data(model, detailed_data);
3805 disp('saving reduced_data')
3806 save -v7.3 reduced_data_complete.mat model reduced_data
3808 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
3809 % generiere Landschaftsplots für Funktional, Gradient und Hessian
3810 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3814 if (nargin>1)&&(isfield(expar,'coarse_factor'))
3815 params.coarse_factor = expar.coarse_factor;
3817 params.coarse_factor = 16;
3820 params.cone_const =1;
3821 %params.functional = 'box_mean';
3822 %params.functional = 'box_mean_time';
3823 params.functional = 'box_mean_time2';
3826 model = convection_diffusion_fv_output_opt_model_rect_normed_outflow(params);
3829 model.compute_derivative_info = 1;
3830 model.decomp_mode = 0;
3831 model_data = gen_model_data(model);
3833 %set landscape grid options (density...)
3834 if (nargin>1)&&(isfield(expar,'num_pts'))
3835 num_pts = expar.num_pts;
3840 delt = (p_range(2)-p_range(1))/(num_pts-1);
3841 mu_test = p_range(1):delt:p_range(2);
3845 v=model.operators_output(model, model_data);
3847 %landscape values - initialization
3848 J = zeros(num_pts,num_pts); %functional values
3849 grad1 = zeros(num_pts, num_pts); %gradient first entry
3850 grad2 = zeros(num_pts, num_pts); %gradient second entry
3851 H11 = zeros(num_pts, num_pts); %Hessian 11entry
3852 H12 = zeros(num_pts, num_pts); %Hessian 12 entry
3853 H22 = zeros(num_pts, num_pts); % Hessian 22 entry
3855 %loop over parameter grid
3859 mu = [mu_test(i),mu_test(j)];
3860 model = set_mu(model, mu);
3861 sim_data = detailed_simulation(model, model_data);
3862 H_sol = lin_evol_opt_fd_Hessian(model, model_data,mu);
3865 H(k,l)=v'*H_sol{k,l}(:,end);
3870 J(i,j) = sim_data.y(end);
3871 grad1(i,j) = sim_data.y_der(1,end);
3872 grad2(i,j) = sim_data.y_der(2,end);
3879 figure;surf(mu_test,mu_test,J);title([
'J_',num2str(params.coarse_factor)]);figure;
3880 surf(mu_test,mu_test,grad1);title([
'grad1',num2str(params.coarse_factor)]);figure;
3881 surf(mu_test,mu_test,grad2);title([
'grad2',num2str(params.coarse_factor)]);figure;
3882 surf(mu_test,mu_test,H11);title([
'H11',num2str(params.coarse_factor)]);figure;
3883 surf(mu_test,mu_test,H12);title([
'H12',num2str(params.coarse_factor)]);figure;
3884 surf(mu_test,mu_test,H22);title([
'H22',num2str(params.coarse_factor)])
3888 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
3889 % test lipschitz constant grid-zuweisung... für case 1093
3890 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3894 %fix model_type here
3896 %model_type = 'normal';
3897 %model_type = 'vx_const';
3898 model_type = 'cone_const';
3899 %time_type = 'time_const';
3900 time_type = 'time_var';
3902 if (nargin>1)&&(isfield(expar,'coarse_factor'))
3903 params.coarse_factor = expar.coarse_factor;
3905 params.coarse_factor =16;
3908 %fix here grid density for localized lipschitz constant
3913 if strcmp(time_type,'time_var')
3914 params.time_const=0;
3916 params.time_const=1;
3922 params_to_optimize=[1,0,1];
3923 grid_params.range={[0,1],[0,1]};
3924 grid_params.numintervals=grid_dens*[1,1];
3926 params.cone_const=1;
3927 params_to_optimize=[0,1,1];
3928 grid_params.range={[0,1],[0,1]};
3929 grid_params.numintervals=grid_dens*[1,1];
3931 params.normal_model=1;
3932 params_to_optimize=[1,1,1];
3933 grid_params.range={[0,1],[0,1],[0,1]};
3934 grid_params.numintervals=grid_dens*[1,1,1];
3937 model = convection_diffusion_fv_output_opt_model_rect_normed(params);
3940 model.compute_derivative_info = 1;
3941 model.decomp_mode = 0;
3942 model.optimization.params_to_optmize= params_to_optimize;
3943 model_data = gen_model_data(model);
3945 %generate lipschitz parameter grid
3951 numpts = length(lip_vec);
3952 lipschitz_const = zeros(numpts,numpts);
3954 model.decomp_mode=0;
3955 v=model.operators_output(model, model_data);
3959 %
for every element i in the grid we have to calculate the
3962 mu=[lip_vec(i),lip_vec(j)];
3964 model = set_mu(model, mu);
3966 Hes = lin_evol_opt_fd_Hessian(model, model_data, mu);
3969 %functional of every Hessian entry.... find biggest Hessian norm
3970 help_ar = zeros(2,2);
3973 help_ar(m,n)=v'*Hes{1}(:,end);
3976 Hes_norm = norm(help_ar);%norm of hessian matrix
for this test parameter
3977 lipschitz_const(i,j) = Hes_norm;
3989 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3990 %
for the
new non-iterative error estimator in optimization
3991 % calculate the third derivatives of functional (Hessian of
3992 % gradient) to determine the Lipschitz constant of the Hessian
3994 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3998 %parametertestpunkte festlegen
4000 delt = 1/(nr_pts-1);
4003 params.coarse_factor = 4;
4004 params.cone_const= 1;
4006 model = convection_diffusion_fv_output_opt_model_rect_normed_outflow(params);
4007 model.decomp_mode = 0;
4010 model_data = gen_model_data(model);
4013 v = model.operators_output(model, model_data);
4014 L_H = zeros(nr_pts,nr_pts);
4017 mu = [mu_v(k),mu_v(l)];
4019 H_der = lin_evol_opt_fd_Hessian_der(model, model_data, mu);
4021 for i=1:size(H_der,1)
4022 for j=1:size(H_der,2)
4023 HgradJ(i,j) = v'*H_der{i,j}{1}(:,end);
4026 L_H(k,l) = norm(HgradJ);
4036 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4037 %
for the non-iterative error estimator calculate
4039 %
this is the norm of the inverse of the hessian at a given
4040 % parameter value mu. We scan
for the largest gamma = gamma_H
4041 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4043 %parametertestpunkte festlegen
4045 delt = 1/(nr_pts-1);
4048 params.coarse_factor = 4;
4049 params.cone_const= 1;
4051 model = convection_diffusion_fv_output_opt_model_rect_normed_outflow(params);
4052 model.decomp_mode = 0;
4055 model_data = gen_model_data(model);
4058 v = model.operators_output(model, model_data);
4059 gamma_H = zeros(nr_pts,nr_pts);
4063 mu = [mu_v(k),mu_v(l)];
4065 H = lin_evol_opt_fd_Hessian(model, model_data, mu);
4068 HgradJ(i,j) = v'*H{i,j}(:,end);
4071 gamma_H(k,l) = norm(inv(HgradJ));
4082 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4083 %
for the
new non-iterative error estimator calculate the Lipschitz
4084 % constant of the hessian (on a grid in parameter space)
4085 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4088 %Lipschitz Konstanten für verschiedene Fälle (zu optimierende
4089 %Variablen, coarse Faktoren) in arrays gespeichert und als File
4091 % Das Model sollte dieses File laden und die für sich relevante
4092 % Lipschitzkonstante auslesen.
4093 % Zur verbesserung der Genauigkeit können auch loka gültige
4094 % Lipschitzkonstanten gespeichert werden.
4096 %fix model_type here
4098 %model_type =
'normal';
4099 %model_type =
'vx_const';
4100 model_type =
'cone_const';
4101 %time_type =
'time_const';
4102 time_type =
'time_var';
4103 %functional =
'box_mean';
4104 if (nargin>1)&&(isfield(expar,
'functional'))
4105 switch expar.functional
4107 functional =
'box_mean';
4109 functional =
'box_mean_time';
4112 functional =
'box_mean_time';
4115 params.functional = functional;
4117 if (nargin>1)&&(isfield(expar,
'coarse_factor'))
4118 params.coarse_factor = expar.coarse_factor;
4120 params.coarse_factor =2;
4123 %fix here grid density
for localized lipschitz constant
4124 if (nargin>1)&&(isfield(expar,
'grid_dens'))
4125 grid_dens = expar.grid_dens;
4129 %grid density of subgrid on each lipschitzgrid element
4132 if strcmp(time_type,
'time_var')
4133 params.time_const=0;
4135 params.time_const=1;
4141 params_to_optimize=[1,0,1];
4142 grid_params.range={[0,1],[0,1]};
4143 grid_params.numintervals=grid_dens*[1,1];
4145 params.cone_const=1;
4146 params_to_optimize=[0,1,1];
4147 grid_params.range={[0,1],[0,1]};
4148 grid_params.numintervals=grid_dens*[1,1];
4150 params.normal_model=1;
4151 params_to_optimize=[1,1,1];
4152 grid_params.range={[0,1],[0,1],[0,1]};
4153 grid_params.numintervals=grid_dens*[1,1,1];
4156 model = convection_diffusion_fv_output_opt_model_rect_normed_outflow(params);
4159 model.compute_derivative_info = 1;
4160 model.decomp_mode = 0;
4161 model.optimization.params_to_optmize= params_to_optimize;
4162 model_data = gen_model_data(model);
4164 %generate lipschitz parameter grid
4165 lip_H_grid =
cubegrid(grid_params);
4167 lipschitz_H_const = zeros(1,lip_H_grid.nelements);
4169 model.decomp_mode=0;
4170 v=model.operators_output(model, model_data);
4173 parfor i=1:lip_H_grid.nelements
4174 %
for every element i in the grid we have to calculate the
4176 disp(
'--------------------------------')
4177 disp(['sample nr. ',num2str(i)])
4178 disp('--------------------------------')
4179 disp('--------------------------------')
4183 sub_par.range=get_ranges_of_element(lip_H_grid,i);
4184 sub_par.numintervals = sub_grid_dens*ones(1,lip_H_grid.dimension);
4186 Mtest = subgrid.vertex;
4189 %Cl = zeros(sum(params_to_optimize),sum(params_to_optimize));
4191 for j=1:size(Mtest,1)
4192 buf_model = set_mu(model, Mtest(j,:));
4194 %H_der =
filecache_function(@lin_evol_opt_fd_Hessian_der,buf_model, model_data, Mtest(j,:));
4195 H_der = lin_evol_opt_fd_Hessian_der(buf_model, model_data, Mtest(j,:));
4197 HgradJ = zeros(size(H_der));
4198 if strcmp(functional, 'box_mean_time')
4199 for k=1:size(H_der,1)
4200 for l=1:size(H_der,2)
4201 buf_model.compute_derivative_info = 0;
4202 sim_data_dummy.U = H_der{k,l};
4203 sim_data_dummy = lin_evol_opt_output_time_integrated(buf_model, sim_data_dummy,model_data);
4204 HgradJ(k,l) = sim_data_dummy.y(end);
4209 for k=1:size(H_der,1)
4210 for l=1:size(H_der,2)
4211 HgradJ(k,l) = v'*H_der{k,l}(:,end);
4228 lipschitz_H_const(i) = L_H;
4234 lipschitz_H_data=[];
4235 lipschitz_H_data.lip_H_grid = lip_H_grid;
4236 lipschitz_H_data.lipschitz_H_const=lipschitz_H_const;
4239 if strcmp(model.name_output_functional,
'box_time_int')
4240 func_type = 'timeInt';
4248 save(fullfile(fdir,['lipschitz_data_H',func_type,num2str(model.k),'_',model_type,'_',time_type,'_coarse_',num2str(params.coarse_factor),'.mat']),'lipschitz_H_data')
4250 setpref('Internet','SMTP_Server','wap04.mathematik.uni-stuttgart.de')
4251 sendmail('dihlmann','am08_experimente fertig','Lipschitz konstante H fertig. Good work Spock!');
4253 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4254 % for the new non-iterative error estimator calculate the gamma
4255 % constant of the hessian (on a grid in parameter space)
4256 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4260 %fix model_type here
4262 %model_type = 'normal';
4263 %model_type = 'vx_const';
4264 model_type = 'cone_const';
4265 %time_type = 'time_const';
4266 time_type = 'time_var';
4267 %functional = 'box_mean';
4268 functional = 'box_mean_time';
4270 params.functional = functional;
4272 if (nargin>1)&&(isfield(expar,'coarse_factor'))
4273 params.coarse_factor = expar.coarse_factor;
4275 params.coarse_factor =2;
4278 %fix here grid density for localized lipschitz constant
4279 if (nargin>1)&&(isfield(expar,'grid_dens'))
4280 grid_dens = expar.grid_dens;
4284 %grid density of subgrid on each lipschitzgrid element
4287 if strcmp(time_type,'time_var')
4288 params.time_const=0;
4290 params.time_const=1;
4296 %params_to_optimize=[1,0,1];
4297 grid_params.range={[0,1],[0,1]};
4298 grid_params.numintervals=grid_dens*[1,1];
4300 params.cone_const=1;
4301 %params_to_optimize=[0,1,1];
4302 grid_params.range={[0,1],[0,1]};
4303 grid_params.numintervals=grid_dens*[1,1];
4305 params.normal_model=1;
4306 %params_to_optimize=[1,1,1];
4307 grid_params.range={[0,1],[0,1],[0,1]};
4308 grid_params.numintervals=grid_dens*[1,1,1];
4311 model = convection_diffusion_fv_output_opt_model_rect_normed_outflow(params);
4314 model.compute_derivative_info = 1;
4315 model.decomp_mode = 0;
4316 %model.optimization.params_to_optimize= params_to_optimize;
4317 model_data = gen_model_data(model);
4319 %generate lipschitz parameter grid
4320 gamma_H_grid =
cubegrid(grid_params);
4322 gamma_H_const = zeros(1,gamma_H_grid.nelements);
4324 model.decomp_mode=0;
4325 v=model.operators_output(model, model_data);
4327 for i=1:gamma_H_grid.nelements
4328 %
for every element i in the grid we have to calculate the
4330 disp(
'--------------------------------')
4331 disp(['sample nr. ',num2str(i),' of ',num2str(gamma_H_grid.nelements)])
4332 disp('--------------------------------')
4333 disp('--------------------------------')
4335 sub_par.range=get_ranges_of_element(gamma_H_grid,i);
4336 sub_par.numintervals = sub_grid_dens*ones(1,gamma_H_grid.dimension);
4338 Mtest = subgrid.vertex;
4341 %Cl = zeros(sum(params_to_optimize),sum(params_to_optimize));
4343 for j=1:size(Mtest,1)
4344 model = set_mu(model, Mtest(j,:));
4349 if strcmp(functional, 'box_mean_time')
4352 model.compute_derivative_info=0;
4353 sim_data_dummy.U = H{k,l};
4354 sim_data_dummy = lin_evol_opt_output_time_integrated(model, sim_data_dummy,model_data);
4355 HJ(k,l) = sim_data_dummy.y(end);
4361 HJ(k,l) = v'*H{k,l}(:,end);
4366 buf = norm(inv(HJ));
4374 gamma_H_const(i) = gamma_H;
4379 gamma_H_data.gamma_H_grid = gamma_H_grid;
4380 gamma_H_data.gamma_H_const=gamma_H_const;
4383 if strcmp(model.name_output_functional,
'box_time_int')
4384 func_type = 'timeInt';
4390 save(fullfile(fdir,['gamma_data_H',func_type,num2str(model.k),'_',model_type,'_',time_type,'_coarse_',num2str(params.coarse_factor),'.mat']),'gamma_H_data')
4392 %%%%%%%%%%%%%%%%%%%%%%%5
4393 %generate reduced data for second functional
4397 %in verzeichnis wechseln wo reduzierte basis liegt
4398 cd /home/dihlmann/matlab/rbmatlab-core/rbasis/lin_evol_opt/
convdiff/coarse2/basisNmax200
4400 load(fullfile(fdir,'coarse2','basisNmax200','complete_TP_basis_coarse2.mat'));
4401 %load(fullfile(fdir,'coarse16','complete_TP_basis_coarse16.mat'));
4402 %model fields für zweites funktional ändern
4403 %set 2nd functional fields
4405 model.base_model.verbose = 4;
4406 model.name_output_functional = 'box_mean_time';
4407 model.get_output = @lin_evol_opt_output_time_integrated;
4408 model.output_function_ptr = @output_function_box_mean;
4409 model.sbox_xmin = 0.5;
4410 model.sbox_xmax = 1;
4411 model.sbox_ymin = 0.5;
4412 model.sbox_ymax = 1;
4413 model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt/2));
4414 model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*3/4));
4415 model.s_l2norm = sqrt(4)*sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
4416 model.s_l1norm = sqrt(4);
4417 model.base_model.name_output_functional = 'box_mean_time';
4418 model.base_model.get_output = @lin_evol_opt_output_time_integrated;
4419 model.base_model.output_function_ptr = @output_function_box_mean;
4420 model.base_model.sbox_xmin = 0.5;
4421 model.base_model.sbox_xmax = 1;
4422 model.base_model.sbox_ymin = 0.5;
4423 model.base_model.sbox_ymax = 1;
4424 model.base_model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt/2));
4425 model.base_model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*3/4));
4426 model.base_model.s_l2norm = sqrt(4)*sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
4427 model.base_model.s_l1norm = sqrt(4);
4428 model.base_model.base_model.name_output_functional = 'box_mean_time';
4429 model.base_model.base_model.get_output = @lin_evol_opt_output_time_integrated;
4430 model.base_model.base_model.output_function_ptr = @output_function_box_mean;
4431 model.base_model.base_model.sbox_xmin = 0.5;
4432 model.base_model.base_model.sbox_xmax = 1;
4433 model.base_model.base_model.sbox_ymin = 0.5;
4434 model.base_model.base_model.sbox_ymax = 1;
4435 model.base_model.base_model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt/2));
4436 model.base_model.base_model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt*3/4));
4437 model.base_model.base_model.s_l2norm = sqrt(4)*sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
4438 model.base_model.base_model.s_l1norm = sqrt(4);
4439 %set optimzation parameters
4440 model.optimization.tol = 0.00001;
4441 model.base_model.optimization.tol = 0.00001;
4442 model.base_model.base_model.optimization.tol =0.00001;
4445 model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
4446 model.base_model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
4448 model.optimization.stepsize_rule = 'armijo';
4449 model.optimization.sigma = 0.5;
4450 model.optimization.stepsize_factor = 0.75;
4451 model.optimitation.initial_step = 50;
4452 model.base_model.optimization.stepsize_rule = 'armijo';
4453 model.base_model.optimization.sigma = 0.5;
4454 model.base_model.optimization.stepsize_factor = 0.75;
4455 model.base_model.optimitation.initial_step = 50;
4457 %neue reduzierte daten generieren
4458 disp('generating reduced data for second functional')
4459 reduced_data = gen_reduced_data(model, detailed_data);
4460 disp('Saving reduced data')
4461 save -v7.3 reduced_data_complete_2ndfunctional.mat model reduced_data
4465 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
4466 % generiere Landschaftsplot für funktional 1
4467 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4471 %set landscape grid options (density...)
4472 if (nargin>1)&&(isfield(expar,'num_pts'))
4473 num_pts = expar.num_pts;
4478 delt = (p_range(2)-p_range(1))/(num_pts-1);
4479 mu_test = p_range(1):delt:p_range(2);
4481 %introduce variables
4482 n_grid = length(mu_test);
4485 func1_det = zeros(n_grid,n_grid);
4486 func1_red = zeros(n_grid,n_grid);
4488 %lade model und reduced data
4489 disp('loading data...')
4490 load(fullfile(fdir,'coarse2','reduced_data_complete_N200.mat'));
4491 %load(fullfile(fdir,'coarse16','reduced_data_complete_coarse16.mat'));
4494 disp('reduced simulations on the grid...')
4496 %reduced_simulation on grid
4499 disp(['Zwischenstand: ',num2str(i),' von ',num2str(n_grid),'.']);
4501 model_buf = set_mu(model,[x_vec(i),y_vec(j)]);
4502 func1_red(i,j) = model.optimization.objective_function(model_buf, reduced_data);
4507 save(fullfile(fdir,['Landschaft_func1_reduced_coarse',num2str(model.base_model.coarse_factor),...
4508 '_numpts_',num2str(num_pts),'.mat']),'func1_red','x_vec','y_vec')
4511 %generiere model_data
4512 model_data = gen_model_data(model);
4514 disp('detailed simulations on grid...')
4515 %detailed simulations on grid
4518 disp(['Zwischenstand: ',num2str(i),' von ',num2str(n_grid),'.']);
4520 model_buf = set_mu(model,[x_vec(i),y_vec(j)]);
4521 func1_det(i,j) = model.optimization.objective_function(model_buf, model_data);
4525 save(fullfile(fdir,['Landschaft_func1_coarse',num2str(model.base_model.coarse_factor),...
4526 '_numpts_',num2str(num_pts),'.mat']),'func1_red','func1_det','x_vec','y_vec')
4533 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
4534 % generiere Landschaftsplots für funktional 3 (nur detailliert)
4535 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4540 %set landscape grid options (density...)
4541 if (nargin>1)&&(isfield(expar,'num_pts'))
4542 num_pts = expar.num_pts;
4547 delt = (p_range(2)-p_range(1))/(num_pts-1);
4548 mu_test = p_range(1):delt:p_range(2);
4550 %introduce variables
4551 n_grid = length(mu_test);
4554 func3_det = zeros(n_grid,n_grid);
4555 %func3_red = zeros(n_grid,n_grid);
4557 %lade model und reduced data
4558 disp('loading data...')
4559 load(fullfile(fdir,'coarse2','basisNmax200','reduced_data_complete_2ndfunctional.mat'));
4560 %load(fullfile(fdir,'coarse16','reduced_data_complete_coarse16_2ndfunctional.mat'));
4562 %change fields in model for functional 2
4564 model.base_model.verbose = 4;
4565 model.name_output_functional = 'box_mean_time';
4566 model.get_output = @lin_evol_opt_output_time_integrated;
4567 model.output_function_ptr = @output_function_box_mean;
4568 model.sbox_xmin = 0;
4569 model.sbox_xmax = 1;
4570 model.sbox_ymin = 0.5;
4571 model.sbox_ymax = 1;
4572 model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt*0.75));
4573 model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt));
4574 model.s_l2norm = sqrt(4)*sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
4575 model.s_l1norm = sqrt(4);
4576 model.base_model.name_output_functional = 'box_mean_time';
4577 model.base_model.get_output = @lin_evol_opt_output_time_integrated;
4578 model.base_model.output_function_ptr = @output_function_box_mean;
4579 model.base_model.sbox_xmin = 0;
4580 model.base_model.sbox_xmax = 1;
4581 model.base_model.sbox_ymin = 0.5;
4582 model.base_model.sbox_ymax = 1;
4583 model.base_model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt*0.75));
4584 model.base_model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt));
4585 model.base_model.s_l2norm = sqrt(4)*sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
4586 model.base_model.s_l1norm = sqrt(4);
4587 model.base_model.base_model.name_output_functional = 'box_mean_time';
4588 model.base_model.base_model.get_output = @lin_evol_opt_output_time_integrated;
4589 model.base_model.base_model.output_function_ptr = @output_function_box_mean;
4590 model.base_model.base_model.sbox_xmin = 0;
4591 model.base_model.base_model.sbox_xmax = 1;
4592 model.base_model.base_model.sbox_ymin = 0.5;
4593 model.base_model.base_model.sbox_ymax = 1;
4594 model.base_model.base_model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt*0.75));
4595 model.base_model.base_model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt));
4596 model.base_model.base_model.s_l2norm = sqrt(4)*sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
4597 model.base_model.base_model.s_l1norm = sqrt(4);
4598 %set optimzation parameters
4599 model.optimization.tol = 0.0001;
4600 model.base_model.optimization.tol = 0.0001;
4601 model.base_model.base_model.optimization.tol =0.0001;
4604 % disp('reduced simulations on the grid...')
4606 % %reduced_simulation on grid
4609 % disp(['Zwischenstand: ',num2str(i),' von ',num2str(n_grid),'.']);
4611 % model_buf = set_mu(model,[x_vec(i),y_vec(j)]);
4612 % func2_red(i,j) = model.optimization.objective_function(model_buf, reduced_data);
4617 % save(fullfile(fdir,['Landschaft_func2_reduced_coarse',num2str(model.base_model.coarse_factor),...
4618 % '_numpts_',num2str(num_pts),'.mat']),'func2_red','x_vec','y_vec')
4621 %generiere model_data
4622 model_data = gen_model_data(model);
4624 %detailed simulations on grid
4628 disp(['Zwischenstand: ',num2str(i),' von ',num2str(n_grid),'.']);
4629 model_buf = set_mu(model,[x_vec(i),y_vec(j)]);
4630 func3_det(i,j) = model.optimization.objective_function(model_buf, model_data);
4634 save(fullfile(fdir,['Landschaft_func3_coarse',num2str(model.base_model.coarse_factor),...
4635 '_numpts_',num2str(num_pts),'.mat']),'func3_det','x_vec','y_vec')
4641 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
4642 % mit verschiedenen Funktionalen herumspielen und sie plotten
4643 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4646 params.coarse_factor = 2;
4647 params.cone_const = 1;
4648 params.functional = 'box_mean_time2';
4650 model = convection_diffusion_fv_output_opt_model_rect_normed_outflow(params);
4653 model.compute_derivative_info = 1;
4654 model.decomp_mode = 0;
4655 model_data = gen_model_data(model);
4657 % %set landscape grid options (density...)
4658 % if (nargin>1)&&(isfield(expar,'num_pts'))
4659 % num_pts = expar.num_pts;
4664 % delt = (p_range(2)-p_range(1))/(num_pts-1);
4665 % mu_test = p_range(1):delt:p_range(2);
4669 % v=model.operators_output(model, model_data);
4671 % %landscape values - initialization
4672 % J = zeros(num_pts,num_pts); %functional values
4674 % %loop over parameter grid
4678 % mu = [mu_test(i),mu_test(j)];
4679 % model = set_mu(model, mu);
4680 % sim_data = detailed_simulation(model, model_data);
4683 % J(i,j) = sim_data.y(end);
4688 % figure;surf(mu_test,mu_test,J);title(['J_',num2str(params.coarse_factor)]);
4696 %adapt reduced data to new functional
4697 disp('loading detailed data')
4698 cd /home/dihlmann/matlab/rbmatlab-core/rbasis/lin_evol_opt/
convdiff/coarse2
4699 load(fullfile(fdir,'coarse2','basisNmax200','complete_TP_basis_coarse2.mat'));
4703 % model.base_model.verbose = 4;
4704 % model.name_output_functional = 'box_mean_time';
4705 % model.get_output = @lin_evol_opt_output_time_integrated;
4706 % model.output_function_ptr = @output_function_box_mean;
4707 % model.sbox_xmin = 0;
4708 % model.sbox_xmax = 1;
4709 % model.sbox_ymin = 0.5;
4710 % model.sbox_ymax = 1;
4711 % model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt*0.75));
4712 % model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt));
4713 % model.s_l2norm = sqrt(4)*sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
4714 % model.s_l1norm = sqrt(4);
4715 % model.base_model.name_output_functional = 'box_mean_time';
4716 % model.base_model.get_output = @lin_evol_opt_output_time_integrated;
4717 % model.base_model.output_function_ptr = @output_function_box_mean;
4718 % model.base_model.sbox_xmin = 0;
4719 % model.base_model.sbox_xmax = 1;
4720 % model.base_model.sbox_ymin = 0.5;
4721 % model.base_model.sbox_ymax = 1;
4722 % model.base_model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt*0.75));
4723 % model.base_model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt));
4724 % model.base_model.s_l2norm = sqrt(4)*sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
4725 % model.base_model.s_l1norm = sqrt(4);
4726 % model.base_model.base_model.name_output_functional = 'box_mean_time';
4727 % model.base_model.base_model.get_output = @lin_evol_opt_output_time_integrated;
4728 % model.base_model.base_model.output_function_ptr = @output_function_box_mean;
4729 % model.base_model.base_model.sbox_xmin = 0;
4730 % model.base_model.base_model.sbox_xmax = 1;
4731 % model.base_model.base_model.sbox_ymin = 0.5;
4732 % model.base_model.base_model.sbox_ymax = 1;
4733 % model.base_model.base_model.stime_start = find(model.base_model.save_time_indices ==floor(model.base_model.nt*0.75));
4734 % model.base_model.base_model.stime_stop = find(model.base_model.save_time_indices == floor(model.base_model.nt));
4735 % model.base_model.base_model.s_l2norm = sqrt(4)*sqrt((model.stime_stop-model.stime_start)/length(model.base_model.save_time_indices));
4736 % model.base_model.base_model.s_l1norm = sqrt(4);
4737 % %set optimzation parameters
4738 model.optimization.tol = 0.0001;
4739 model.base_model.optimization.tol = 0.0001;
4740 model.base_model.base_model.optimization.tol =0.0001;
4742 model.optimization.init_params =[0.3,0.4];
4743 model.base_model.optimization.init_params =[0.3,0.4];
4744 model.base_model.base_model.optimization.init_params =[0.3,0.4];
4746 model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
4747 model.base_model.base_model.optimization.optimizer = @gradient_opt_non_iter_err;
4749 model.optimization.stepsize_rule = 'armijo';
4750 model.optimization.sigma = 0.8;
4751 model.optimization.stepsize_factor = 0.75;
4752 model.optimization.initial_stepsize = 10;
4753 model.base_model.optimization.stepsize_rule = 'armijo';
4754 model.base_model.optimization.sigma = 0.8;
4755 model.base_model.optimization.stepsize_factor = 0.75;
4756 model.base_model.optimization.initial_stepsize = 10;
4757 model.base_model.base_model.optimization.stepsize_rule = 'armijo';
4758 model.base_model.base_model.optimization.sigma = 0.8;
4759 model.base_model.base_model.optimization.stepsize_factor = 0.75;
4760 model.base_model.base_model.optimization.initial_stepsize = 10;
4762 model.gamma_H = @(model)dummy_constant(model,100);
4763 model.base_model.gamma_H = @(model)dummy_constant(model,100);
4764 model.base_model.base_model.gamma_H =@(model)dummy_constant(model,100);
4765 model.L_H = @(model)dummy_constant(model,100);
4766 model.base_model.L_H =@(model)dummy_constant(model,100);
4767 model.base_model.base_model.L_H = @(model)dummy_constant(model,100);
4769 model.optimization.allow_constant_calculation = 1;
4770 model.base_model.optimization.allow_constant_calculation = 1;
4771 model.base_model.base_model.optimization.allow_constant_calculation = 1;
4774 disp('generating reduced data for second functional')
4775 reduced_data = gen_reduced_data(model, detailed_data);
4776 disp('Saving reduced data')
4777 save -v7.3 reduced_data_complete_3rdfunc.mat model reduced_data
4780 %optimzation and constant calulation
4781 opt_data =
optimize(model,reduced_data);
4783 save(fullfile(fdir,'results_case126reduced.mat'),'opt_data');
4785 setpref('Internet','SMTP_Server','wap04.mathematik.uni-stuttgart.de')
4786 sendmail('dihlmann','optimierung case 126 abgeschlossen','look at it');
4788 %calculate gamma and lip at the optimum
4789 % mu = opt_data.optimal_params;
4791 % gamma = calculate_gamma_const(model,model_data,mu)
4792 % lip = calculate_Lipschitz_const(model, model_data,mu)
4794 % save(fullfile(fdir,'results_case126.mat'),'opt_data','gamma','lip');
function r = verbose(level, message, messageId)
This function displays messages depending on a message-id and/or a level. Aditionally you can set/res...
function [ RBext , dummy ] = RB_extension_PCA_fixspace(model, detailed_data)
function computing a RB basis extension for given parameters by the POD-Greedy algorithm.
function varargout = filecache_function(funcptr, varargin)
function used for file-caching other function calls.
function convdiff()
small script demonstrating the convdiff example from the M2AN Paper, that is also implemented in Dune...
A hierarchical cubegrid of arbitrary dimension.
function reduced_data_subset = lin_evol_opt_reduced_data_subset_separate_bases(model, reduced_data)
method which modifies reduced_data, which is the data, that will be passed to the online-simulation a...
Test reduced basis implementation.
function l2_error = fv_l2_error(U1, U2, W)
function computing the l2-error between the two fv-functions or function sequences in U1...
function [ opt_data , model ] = optimize(model, model_data, detailed_data, reduced_data)
opt_data = optimize(model, model_data, detailed_data, reduced_data)