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)
|
function [x,cheik] = dynare_solve(func,x,varargin)
|
||||||
global options_
|
global options_
|
||||||
|
|
||||||
options_ = set_default_option(options_,'solve_algo',0);
|
options_ = set_default_option(options_,'solve_algo',2);
|
||||||
cheik = 0;
|
cheik = 0;
|
||||||
func = str2func(func);
|
func = str2func(func);
|
||||||
if options_.solve_algo == 0
|
if options_.solve_algo == 0
|
||||||
|
|
|
@ -32,21 +32,27 @@ if M_.exo_det_nbr > 0
|
||||||
tempexdet = oo_.exo_det_simul;
|
tempexdet = oo_.exo_det_simul;
|
||||||
oo_.exo_det_simul = ones(M_.maximum_lag+1,1)*oo_.exo_steady_statedet_';
|
oo_.exo_det_simul = ones(M_.maximum_lag+1,1)*oo_.exo_steady_statedet_';
|
||||||
end
|
end
|
||||||
|
dr.ys = ys;
|
||||||
fh = str2func([M_.fname '_static']);
|
fh = str2func([M_.fname '_static']);
|
||||||
if max(abs(feval(fh,ys,oo_.exo_steady_state))) > options_.dynatol & options_.olr == 0
|
if options_.linear == 0
|
||||||
if exist([M_.fname '_steadystate'])
|
if max(abs(feval(fh,dr.ys,oo_.exo_steady_state))) > options_.dynatol & options_.olr == 0
|
||||||
[dr.ys,check1] = feval([M_.fname '_steadystate'],ys,oo_.exo_steady_state);
|
if exist([M_.fname '_steadystate'])
|
||||||
else
|
[dr.ys,check1] = feval([M_.fname '_steadystate'],dr.ys,oo_.exo_steady_state);
|
||||||
[dr.ys,check1] = dynare_solve([M_.fname '_static'],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
|
end
|
||||||
if check1
|
else
|
||||||
info(1) = 20;
|
[fvec,jacob] = feval(fh,dr.ys,oo_.exo_steady_state);
|
||||||
resid = feval(fh,ys,oo_.exo_steady_state);
|
if max(abs(fvec)) > options_.dynatol & options_.olr == 0
|
||||||
info(2) = resid'*resid; % penalty...
|
dr.ys = dr.ys-jacob\fvec;
|
||||||
return
|
|
||||||
end
|
end
|
||||||
else
|
|
||||||
dr.ys = ys;
|
|
||||||
end
|
end
|
||||||
|
|
||||||
dr.fbias = zeros(M_.endo_nbr,1);
|
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) ;
|
% g(j) = fvec'*fjac(:,j) ;
|
||||||
%end
|
%end
|
||||||
[fvec,fjac] = feval(func,x,varargin{:});
|
[fvec,fjac] = feval(func,x,varargin{:});
|
||||||
|
fvec = fvec(j1);
|
||||||
|
fjac = fjac(j1,j2);
|
||||||
g = (fvec'*fjac)';
|
g = (fvec'*fjac)';
|
||||||
if options_.debug
|
if options_.debug
|
||||||
disp(['cond(fjac) ' num2str(cond(fjac))])
|
disp(['cond(fjac) ' num2str(cond(fjac))])
|
||||||
|
|
Loading…
Reference in New Issue