rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
simplex_nonlinear.m
1 function [opt_data,model] = simplex_nonlinear(model,varargin)
2 %function opt_data = simplex_nonlinear(model,varargin)
3 %
4 % optimization function optimizing the model using the matlab optimization
5 % technique "fminsearch" (which uses a nonlinear simplex algorithm).
6 %
7 % varargin: can be model_data or redeuced_data
8 %
9 %
10 % Generated fields of opt_data:
11 % optimal_params: solution to the parameter optimization problem
12 % nr_fct_calls: number of functional evaluations
13 % output: optimal output
14 
15 % Markus Dihlmann 11.12.12
16 
17 
18 opt_data = [];
19 
20 init_params = model.optimization.init_params;
21 tolerance = model.optimization.tol;
22 if strcmp(model.optimization.min_or_max,'max')
23  min_or_max = -1;
24 else
25  min_or_max = 1;
26 end
27 
28 os = optimset('TolFun',tolerance);
29 
30 if isfield(varargin{1},'grid')
31  %--> detailed simulations
32  model_data = varargin{1};
33 
34  [mu_opt,f_end,exitflag,output_data] =...
35  fminsearch(@(mu)(min_or_max*model.optimization.objective_function(model, model_data,mu)),...
36  init_params,os);
37 
38 
39 else
40  %--> reduced simulations
41  reduced_data = varargin{1};
42 
43  [mu_opt,f_end,exitflag,output_data] =...
44  fminsearch(@(mu)(min_or_max*model.optimization.objective_function(model, reduced_data,mu)),...
45  init_params,os);
46 
47  %error estimator
48  model = set_mu_to_optimize(model,mu_opt);
49  model = setfield_in_model_and_base_model(model,'compute_derivative_info',1);
50 
51  [grad_f_x, Delta_grad] = model.optimization.get_Jacobian(model,reduced_data);
52 
53 
54  %bedingung überprüfen
55  g_H = model.gamma_H(model);
56  L_H = model.L_H(model);
57  break_value = 2*(g_H)^2*(L_H)*(norm(grad_f_x)+norm(Delta_grad(:,end)));
58  if break_value<1
59  Delta_mu = 2*g_H*norm(norm(grad_f_x)+norm(Delta_grad(:,end)));
60  else
61  disp('No error estimator available. Missing neccessary requirements.')
62  Delta_mu=-1;
63  end
64 
65  opt_data.Delta_mu = Delta_mu;
66  opt_data.break_value = break_value;
67 end
68 
69 
70 opt_data.optimal_params = mu_opt;
71 opt_data.nr_fct_calls = output_data.funcCount;
72 opt_data.nr_iterations = output_data.iterations;
73 opt_data.exit_flag = exitflag;
74 opt_data.output = f_end;
function model = set_mu_to_optimize(model, x, varargin)
Funcion sets the parameters that are to be optimized to the values given by x Also usable for optimiz...