From c8812b552e448aadcbd40579f90a443263f624f5 Mon Sep 17 00:00:00 2001 From: michel Date: Tue, 27 Sep 2005 20:22:40 +0000 Subject: [PATCH] changed computation of steady state for linear models git-svn-id: https://www.dynare.org/svn/dynare/dynare_v4@464 ac1d8469-bf42-47a9-8791-bf33cf982152 --- matlab/dynare_solve.m | 2 +- matlab/resol.m | 30 ++++++++++++++++++------------ matlab/solve1.m | 2 ++ 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/matlab/dynare_solve.m b/matlab/dynare_solve.m index 8792cbd78..b7a38a891 100644 --- a/matlab/dynare_solve.m +++ b/matlab/dynare_solve.m @@ -3,7 +3,7 @@ function [x,cheik] = dynare_solve(func,x,varargin) global options_ - options_ = set_default_option(options_,'solve_algo',0); + options_ = set_default_option(options_,'solve_algo',2); cheik = 0; func = str2func(func); if options_.solve_algo == 0 diff --git a/matlab/resol.m b/matlab/resol.m index 79109660a..fc948be1d 100644 --- a/matlab/resol.m +++ b/matlab/resol.m @@ -32,21 +32,27 @@ if M_.exo_det_nbr > 0 tempexdet = oo_.exo_det_simul; oo_.exo_det_simul = ones(M_.maximum_lag+1,1)*oo_.exo_steady_statedet_'; end +dr.ys = ys; fh = str2func([M_.fname '_static']); -if max(abs(feval(fh,ys,oo_.exo_steady_state))) > options_.dynatol & options_.olr == 0 - if exist([M_.fname '_steadystate']) - [dr.ys,check1] = feval([M_.fname '_steadystate'],ys,oo_.exo_steady_state); - else - [dr.ys,check1] = dynare_solve([M_.fname '_static'],ys,oo_.exo_steady_state); +if options_.linear == 0 + if max(abs(feval(fh,dr.ys,oo_.exo_steady_state))) > options_.dynatol & options_.olr == 0 + if exist([M_.fname '_steadystate']) + [dr.ys,check1] = feval([M_.fname '_steadystate'],dr.ys,oo_.exo_steady_state); + else + [dr.ys,check1] = dynare_solve(fh,dr.ys,oo_.exo_steady_state); + end + if check1 + info(1) = 20; + resid = feval(fh,ys,oo_.exo_steady_state); + info(2) = resid'*resid; % penalty... + return + end end - if check1 - info(1) = 20; - resid = feval(fh,ys,oo_.exo_steady_state); - info(2) = resid'*resid; % penalty... - return +else + [fvec,jacob] = feval(fh,dr.ys,oo_.exo_steady_state); + if max(abs(fvec)) > options_.dynatol & options_.olr == 0 + dr.ys = dr.ys-jacob\fvec; end -else - dr.ys = ys; end dr.fbias = zeros(M_.endo_nbr,1); diff --git a/matlab/solve1.m b/matlab/solve1.m index 57efe303f..d4f4d749b 100644 --- a/matlab/solve1.m +++ b/matlab/solve1.m @@ -48,6 +48,8 @@ function [x,check] = solve1(func,x,j1,j2,varargin) % g(j) = fvec'*fjac(:,j) ; %end [fvec,fjac] = feval(func,x,varargin{:}); + fvec = fvec(j1); + fjac = fjac(j1,j2); g = (fvec'*fjac)'; if options_.debug disp(['cond(fjac) ' num2str(cond(fjac))])