rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
lin_evol_opt_fd_Hessian.m
1 function Hessian = lin_evol_opt_fd_Hessian(model, model_data, mu,h)
2 %function U_der = lin_evol_opt_fd_Hessian(model, model_data, mu,h)
3 %
4 % function calculating the second derivative solution via PDE and finite difference
5 % procedure for the parameter mu.
6 %
7 % Markus Dihlmann 20.06.2011
8 
9 if isempty(mu)
10  mu = get_mu(model);
11 end
12 
13 old_mu = get_mu(model);
14 
15 model = set_mu(model, mu);
16 
17 compute_derivative_old = model.compute_derivative_info;
18 
19 model.compute_derivative_info =1;
20 
21 
22 sim_data = detailed_simulation(model, model_data);
23 
24 U_der_fix=sim_data.U_der;
25 Hessian = cell(length(sim_data.U_der),length(sim_data.U_der));
26 if (nargin<4)
27  h=0.0001; %stepsize
28 end
29 
30 for j = 1:length(sim_data.U_der)
31  for i=1:length(sim_data.U_der)
32  %is mu+h inside mu_range?
33  if (mu(i)+h>=model.mu_ranges{i}(1))&&(mu(i)+h<=model.mu_ranges{i}(2))
34  mu(i) = mu(i) + h;
35  model = set_mu(model,mu);
36  sim_data = detailed_simulation(model, model_data);
37  mu(i) = mu(i) -h;
38  model = set_mu(model,mu);
39 
40  Hessian(j,i) = {(sim_data.U_der{j}-U_der_fix{j})./h};
41  else
42  mu(i) = mu(i) - h;
43  model = set_mu(model,mu);
44  sim_data = detailed_simulation(model, model_data);
45  mu(i) = mu(i) +h;
46  model = set_mu(model,mu);
47 
48  Hessian(j,i) = {(-sim_data.U_der{j}+U_der_fix{j})./h};
49  end
50  end
51 end
52 
53 model = set_mu(model, old_mu);
54 model.compute_derivative_info = compute_derivative_old;