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
time-shift
michel 2005-09-27 20:22:40 +00:00
parent d6a008b7c3
commit c8812b552e
3 changed files with 21 additions and 13 deletions

View File

@ -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

View File

@ -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);

View File

@ -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))])