changed computation of steady state for linear models
git-svn-id: https://www.dynare.org/svn/dynare/dynare_v4@464 ac1d8469-bf42-47a9-8791-bf33cf982152time-shift
parent
d6a008b7c3
commit
c8812b552e
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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))])
|
||||
|
|
Loading…
Reference in New Issue