rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
lin_evol_opt_fd_fd_Hessian.m
1 function U_der2 = lin_evol_opt_fd_fd_Hessian(model, model_data, mu)
2 %function U_der = lin_evol_opt_fd_fd_second_derivative(model, model_data, mu)
3 %
4 % function calculating the second derivative solution via PDE and finite difference
5 % procedure for the parameter mu.
6 %
7 % Markus Dihlmann 03.02.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 %sim_data = detailed_simulation(model, model_data);
22 
23 
24 
25 U_der_fix=lin_evol_opt_fd_derivative(model, model_data,mu);
26 U_der2 = cell(length(mu),length(mu));
27 
28 h=0.0001; %stepsize
29 for j=1:length(mu)
30  for i=1:length(mu)
31  %is mu+h inside mu_range?
32  if (mu(i)+h>=model.mu_ranges{i}(1))&&(mu(i)+h<=model.mu_ranges{i}(2))
33  mu(i) = mu(i) + h;
34  model = set_mu(model,mu);
35  U_der = lin_evol_opt_fd_derivative(model, model_data,mu);
36  mu(i) = mu(i) -h;
37  model = set_mu(model,mu);
38 
39  U_der2{j,i} = (U_der{j}-U_der_fix{j})./h;
40  else
41  mu(i) = mu(i) - h;
42  model = set_mu(model,mu);
43  U_der = lin_evol_opt_fd_derivative(model, model_data,mu);
44  mu(i) = mu(i) +h;
45  model = set_mu(model,mu);
46 
47  U_der2{j,i} = (-U_der{j}+U_der_fix{j})./h;
48  end
49 
50  end
51 end
52 
53 model = set_mu(model, old_mu);
54 model.compute_derivative_info = compute_derivative_old;