0001 function [ys,params,info] = evaluate_steady_state_file(ys_init,exo_ss,M,options)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039 ys = [];
0040 params = [];
0041 info = 0;
0042 params = M.params;
0043 fname = M.fname;
0044 if options.steadystate_flag == 1
0045
0046 assignin('base','tmp_00_',params);
0047 evalin('base','M_.params=tmp_00_; clear(''tmp_00_'')');
0048 h_steadystate = str2func([fname '_steadystate']);
0049 [ys,check] = h_steadystate(ys_init, exo_ss);
0050 params1 = evalin('base','M_.params');
0051 else
0052
0053 h_steadystate = str2func([fname '_steadystate2']);
0054 [ys,params1,check] = h_steadystate(ys_init, exo_ss, params);
0055 end
0056
0057 if check
0058 info(1) = 19
0059 info(2) = NaN;
0060 end
0061
0062 updated_params_flag = max(abs(params1-params)) > 1e-12 || ~isequal(isnan(params1),isnan(params));
0063
0064 if isnan(updated_params_flag) || (updated_params_flag && any(isnan(params(~isnan(params))-params1(~isnan(params)))))
0065 info(1) = 24;
0066 info(2) = NaN;
0067 return
0068 end
0069
0070 if updated_params_flag && ~isreal(params1)
0071 info(1) = 23;
0072 info(2) = sum(imag(params).^2);
0073 return
0074 end
0075
0076 if updated_params_flag
0077 params = params1;
0078 end
0079
0080
0081 if length(M.aux_vars) > 0 && ~options.ramsey_policy
0082 h_set_auxiliary_variables = str2func([M.fname '_set_auxiliary_variables']);
0083 ys = h_set_auxiliary_variables(ys,exo_ss,params);
0084 end
0085
0086 check1 = 0;
0087 if ~options.steadystate.nocheck
0088
0089 [residuals,check] = evaluate_static_model(ys,exo_ss,params,M,options);
0090 if check
0091 info(1) = 19;
0092 info(2) = check;
0093 return;
0094 end
0095 if max(abs(residuals)) > options.dynatol.f
0096 info(1) = 19;
0097 info(2) = residuals'*residuals;
0098 return
0099 end
0100 elseif ~isempty(options.steadystate_partial)
0101 ssvar = options.steadystate_partial.ssvar;
0102 nov = length(ssvar);
0103 indv = zeros(nov,1);
0104 for i = 1:nov
0105 indv(i) = strmatch(ssvar(i),M.endo_names,'exact');
0106 end
0107 [ys,check] = dynare_solve('restricted_steadystate',...
0108 ys(indv),...
0109 options.jacobian_flag, ...
0110 exo_ss,indv);
0111 end
0112
0113