rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
lin_evol_opt_fd_derivative.m
1 function U_der = lin_evol_opt_fd_derivative(model, model_data, mu)
2 %function U_der = lin_evol_opt_fd_derivative(model, model_data, mu)
3 %
4 % function calculating the derivative solution via a 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 =0;
20 
21 sim_data = detailed_simulation(model, model_data);
22 
23 U_fix=sim_data.U;
24 
25 h=0.0000001; %stepsize
26 
27 for i=1:length(mu)
28  %is mu+h inside mu_range?
29  if (mu(i)+h>=model.mu_ranges{i}(1))&&(mu(i)+h<=model.mu_ranges{i}(2))
30  mu(i) = mu(i) + h;
31  model = set_mu(model,mu);
32  sim_data = detailed_simulation(model, model_data);
33  mu(i) = mu(i) -h;
34  model = set_mu(model,mu);
35 
36  U_der{i} = (sim_data.U-U_fix)./h;
37  else
38  mu(i) = mu(i) - h;
39  model = set_mu(model,mu);
40  sim_data = detailed_simulation(model, model_data);
41  mu(i) = mu(i) +h;
42  model = set_mu(model,mu);
43 
44  U_der{i} = (-sim_data.U+U_fix)./h;
45  end
46 
47 end
48 
49 model = set_mu(model, old_mu);
50 model.compute_derivative_info = compute_derivative_old;