From f85b47e6ed4ad8dad2c30116a9384324bcfab878 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?= Date: Tue, 4 May 2010 17:15:13 +0200 Subject: [PATCH] Moved homotopic_steps function from extended_path.m to dynare/matlab subdirectory. --- matlab/extended_path.m | 70 +--------------------------------------- matlab/homotopic_steps.m | 65 +++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 69 deletions(-) create mode 100644 matlab/homotopic_steps.m diff --git a/matlab/extended_path.m b/matlab/extended_path.m index 4ae8d839b..ea4e424cb 100644 --- a/matlab/extended_path.m +++ b/matlab/extended_path.m @@ -83,7 +83,7 @@ norme = 0; % Set verbose option verbose = 0; -t = 0; +t = 0; new_draw = 1; while (t<=sample_size) @@ -142,72 +142,4 @@ while (t<=sample_size) oo_.endo_simul(:,1:end-1) = oo_.endo_simul(:,2:end); oo_.endo_simul(:,end) = oo_.steady_state; end -end - - - -function [info,number_of_calls] = homotopic_steps(tdx,positive_var_indx,shocks,init_weight,step,init,number_of_calls) -global oo_ -number_of_calls = number_of_calls + 1; -max_number_of_calls = 50; -if number_of_calls>max_number_of_calls - info = NaN; - return -end -max_iter = 100; -weight = init_weight; -verbose = 0; -iter = 0; -time = 0; -reduce_step = 0; -while iter<=max_iter && weight<=1 - iter = iter+1; - old_weight = weight; - weight = weight+step; - oo_.exo_simul(tdx,positive_var_indx) = weight*shocks+(1-weight); - if init - info = perfect_foresight_simulation(oo_.dr,oo_.steady_state); - else - info = perfect_foresight_simulation; - end - time = time+info.time; - if verbose - [iter,step] - [info.iterations.time,info.iterations.error] - end - if ~info.convergence - if verbose - disp('Reduce step size!') - end - reduce_step = 1; - break - else - if length(info.iterations.error)<5 - if verbose - disp('Increase step size!') - end - step = step*1.5; - end - end -end -if reduce_step - step=step/1.5; - [info,number_of_calls] = homotopic_steps(tdx,positive_var_indx,shocks,old_weight,step,init,number_of_calls); - if ~isnan(info) - time = time+info.time; - return - else - return - end -end -if weight<1 && itermax_number_of_calls + info = NaN; + return +end +max_iter = 100; +weight = init_weight; +verbose = 0; +iter = 0; +time = 0; +reduce_step = 0; +while iter<=max_iter && weight<=1 + iter = iter+1; + old_weight = weight; + weight = weight+step; + oo_.exo_simul(tdx,positive_var_indx) = weight*shocks+(1-weight); + if init + info = perfect_foresight_simulation(oo_.dr,oo_.steady_state); + else + info = perfect_foresight_simulation; + end + time = time+info.time; + if verbose + [iter,step] + [info.iterations.time,info.iterations.error] + end + if ~info.convergence + if verbose + disp('Reduce step size!') + end + reduce_step = 1; + break + else + if length(info.iterations.error)<5 + if verbose + disp('Increase step size!') + end + step = step*1.5; + end + end +end +if reduce_step + step=step/1.5; + [info,number_of_calls] = homotopic_steps(tdx,positive_var_indx,shocks,old_weight,step,init,number_of_calls); + if ~isnan(info) + time = time+info.time; + return + else + return + end +end +if weight<1 && iter