From 1f56e496b193684b6d9da7235cb2ddabadcdc3c5 Mon Sep 17 00:00:00 2001 From: michel Date: Thu, 21 Sep 2006 15:48:01 +0000 Subject: [PATCH] v4: corrected osr git-svn-id: https://www.dynare.org/svn/dynare/dynare_v4@924 ac1d8469-bf42-47a9-8791-bf33cf982152 --- matlab/dynare_m.exe | Bin 1092036 -> 1092036 bytes matlab/get_variance_of_endogenous_variables.m | 18 +++++++----- matlab/global_initialization.m | 5 +++- matlab/osr.m | 4 +-- matlab/osr1.m | 26 +++++++++++++----- matlab/th_autocovariances.m | 2 +- 6 files changed, 37 insertions(+), 18 deletions(-) diff --git a/matlab/dynare_m.exe b/matlab/dynare_m.exe index 4b1842e078966392deca4e4a1d2f32fca15c70bc..5318e9d57740218d12b7173156564976a9aff9b7 100755 GIT binary patch delta 2714 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 brGU^qiBUTfa>8iLpb<{PtS00{9DMEvD^D_B diff --git a/matlab/get_variance_of_endogenous_variables.m b/matlab/get_variance_of_endogenous_variables.m index 45cbc3944..978454bc3 100644 --- a/matlab/get_variance_of_endogenous_variables.m +++ b/matlab/get_variance_of_endogenous_variables.m @@ -1,4 +1,4 @@ -function [vx,i_ns] = get_variance_of_endogenous_variables(dr,i_var) +function [vx1,i_ns] = get_variance_of_endogenous_variables(dr,i_var) global M_ options_ @@ -9,17 +9,21 @@ function [vx,i_ns] = get_variance_of_endogenous_variables(dr,i_var) ghx = dr.ghx(i_var,:); ghu = dr.ghu(i_var,:); nc = size(ghx,2); + n = length(i_var); [A,B] = kalman_transition_matrix(dr,nstatic+(1:npred),1:nc,dr.transition_auxiliary_variables); [vx,u] = lyapunov_symm(A,B*Sigma_e*B'); - i_ns = find(any(abs(ghx*u) > options_.Schur_vec_tol,2)); + if size(u,2) > 0 + i_stat = find(any(abs(ghx*u) < options_.Schur_vec_tol,2)); - ghx = ghx(i_ns,:); - ghu = ghu(i_ns,:); + ghx = ghx(i_stat,:); + ghu = ghu(i_stat,:); + else + i_stat = (1:n)'; + end - n = length(i_var); - vx = Inf*ones(n,n); - vx(i_ns,i_ns) = ghx*vx*ghx'+ghu*Sigma_e*ghu'; + vx1 = Inf*ones(n,n); + vx1(i_stat,i_stat) = ghx*vx*ghx'+ghu*Sigma_e*ghu'; \ No newline at end of file diff --git a/matlab/global_initialization.m b/matlab/global_initialization.m index 9b0c23d25..1e773a3a2 100644 --- a/matlab/global_initialization.m +++ b/matlab/global_initialization.m @@ -15,9 +15,12 @@ function global_initialization() options_.gstep = 1e-2; options_.debug = 0 options_.initval_file = 0; - optinos_.Schur_vec_tol = 1e-8; % used to find nonstationary variables + options_.Schur_vec_tol = 1e-8; % used to find nonstationary variables % in Schur decomposition of the % transition matrix + options_.solve_tolf = eps^(2/3); + options_.solve_tolx = 3.7e-11; + options_.solve_maxit = 500; if exist([M_.fname '_steadystate']) options_.steadystate_flag = 1; diff --git a/matlab/osr.m b/matlab/osr.m index dde9b8573..aa3b16b4e 100644 --- a/matlab/osr.m +++ b/matlab/osr.m @@ -1,6 +1,6 @@ % Copyright (C) 2001 Michel Juillard % -function osr(var_list,params,W) +function osr(var_list,params,i_var,W) global M_ options_ oo_ options_.order = 1; @@ -36,7 +36,7 @@ function osr(var_list,params,W) disp(' ') disp('OPTIMAL SIMPLE RULE') disp(' ') - osr1(i_params,W); + osr1(i_params,i_var,W); disp('MODEL SUMMARY') disp(' ') disp([' Number of variables: ' int2str(M_.endo_nbr)]) diff --git a/matlab/osr1.m b/matlab/osr1.m index 2c4149f37..91c349811 100644 --- a/matlab/osr1.m +++ b/matlab/osr1.m @@ -1,4 +1,4 @@ -function osr1(i_params,weights) +function osr1(i_params,i_var,weights) global M_ oo_ options_ it_ klen = M_.maximum_lag + M_.maximum_lead + 1; @@ -21,6 +21,9 @@ function osr1(i_params,weights) end exe =zeros(M_.exo_nbr,1); + + oo_.dr = set_state_space(oo_.dr); + % check if ys is steady state fh = str2func([M_.fname '_static']); if max(abs(feval(fh,oo_.steady_state,exe))) > options_.dynatol @@ -29,17 +32,26 @@ function osr1(i_params,weights) error('OLR: convergence problem in DYNARE_SOLVE') end else - dr.ys = oo_.steady_state; - oo_.dr = dr; + oo_.dr.ys = oo_.steady_state; end np = size(i_params,1); t0 = M_.params(i_params); - - options = optimset('fminunc'); - options = optimset('display','iter'); - [p,f]=fminunc(@osr_obj,t0,options,i_params,weights); + inv_order_var = oo_.dr.inv_order_var; + + H0 = 1e-4*eye(np); + crit = 1e-7; + nit = 1000; + verbose = 2; + + [f,p]=csminwel('osr_obj',t0,H0,[],crit,nit,i_params,... + inv_order_var(i_var),weights(i_var,i_var)); + + % options = optimset('fminunc'); +% options = optimset('display','iter'); +% [p,f]=fminunc(@osr_obj,t0,options,i_params,... +% inv_order_var(i_var),weights(i_var,i_var)); diff --git a/matlab/th_autocovariances.m b/matlab/th_autocovariances.m index 940e91aba..b7f56ba65 100644 --- a/matlab/th_autocovariances.m +++ b/matlab/th_autocovariances.m @@ -59,7 +59,7 @@ function [Gamma_y,ivar]=th_autocovariances(dr,ivar) [vx, u] = lyapunov_symm(A,B*M_.Sigma_e*B'); iky = iv(ivar); if ~isempty(u) - iky = iky(find(any(abs(ghx(iky,:)*u) < 1e-8,2))); + iky = iky(find(any(abs(ghx(iky,:)*u) < options_.Schur_vec_tol,2))); ivar = dr.order_var(iky); end aa = ghx(iky,:);