diff --git a/matlab/gsa/stab_map_.m b/matlab/gsa/stab_map_.m index 5a84573ed..8553005a5 100644 --- a/matlab/gsa/stab_map_.m +++ b/matlab/gsa/stab_map_.m @@ -256,22 +256,36 @@ if fload==0, M_.params(estim_params_.param_vals(:,1)) = lpmat(j,:)'; %try stoch_simul([]); try - [Tt,Rr,SteadyState,infox{j},M_,options_,oo_] = dynare_resolve(M_,options_,oo_,'restrict'); - if infox{j}(1)==0 && ~exist('T'), + [Tt,Rr,SteadyState,info,M_,options_,oo_] = dynare_resolve(M_,options_,oo_,'restrict'); + infox(j,1)=info(1); + if infox(j,1)==0 && ~exist('T'), dr_=oo_.dr; - T=zeros(size(dr_.ghx,1),size(dr_.ghx,2)+size(dr_.ghu,2),Nsam); + if prepSA, + try + T=zeros(size(dr_.ghx,1),size(dr_.ghx,2)+size(dr_.ghu,2),Nsam); + catch ME + if strcmp('MATLAB:nomem',ME.identifier), + prepSA=0; + disp('The model is too large for storing state space matrices ...') + disp('for mapping reduced form or for identification') + end + T=[]; + end + else + T=[]; + end egg=zeros(length(dr_.eigval),Nsam); end - if infox{j}(1), + if infox(j,1), % disp('no solution'), if isfield(oo_.dr,'ghx'), oo_.dr=rmfield(oo_.dr,'ghx'); end - if (infox{j}(1)<3 || infox{j}(1)>5) && isfield(oo_.dr,'eigval'), + if (infox(j,1)<3 || infox(j,1)>5) && isfield(oo_.dr,'eigval'), oo_.dr=rmfield(oo_.dr,'eigval'); end end - catch + catch ME if isfield(oo_.dr,'eigval'), oo_.dr=rmfield(oo_.dr,'eigval'); end @@ -323,8 +337,10 @@ if fload==0, dyn_waitbar(j/Nsam,h,['MC iteration ',int2str(j),'/',int2str(Nsam)]) end dyn_waitbar_close(h); - if prepSA, + if prepSA && jstab, T=T(:,:,1:jstab); + else + T=[]; end istable=istable(find(istable)); % stable params iunstable=iunstable(find(iunstable)); % unstable params @@ -374,22 +390,22 @@ if fload==0, if ~prepSA save([OutputDirectoryName '/' fname_ '_prior.mat'], ... 'bkpprior','lpmat','lpmat0','iunstable','istable','iindeterm','iwrong', ... - 'egg','yys','nspred','nboth','nfwrd') + 'egg','yys','nspred','nboth','nfwrd','infox') else save([OutputDirectoryName '/' fname_ '_prior.mat'], ... 'bkpprior','lpmat','lpmat0','iunstable','istable','iindeterm','iwrong', ... - 'egg','yys','T','nspred','nboth','nfwrd') + 'egg','yys','T','nspred','nboth','nfwrd','infox') end else if ~prepSA save([OutputDirectoryName '/' fname_ '_mc.mat'], ... 'lpmat','lpmat0','iunstable','istable','iindeterm','iwrong', ... - 'egg','yys','nspred','nboth','nfwrd') + 'egg','yys','nspred','nboth','nfwrd','infox') else save([OutputDirectoryName '/' fname_ '_mc.mat'], ... 'lpmat','lpmat0','iunstable','istable','iindeterm','iwrong', ... - 'egg','yys','T','nspred','nboth','nfwrd') + 'egg','yys','T','nspred','nboth','nfwrd','infox') end end else @@ -398,7 +414,7 @@ else else filetoload=[OutputDirectoryName '/' fname_ '_mc.mat']; end - load(filetoload,'lpmat','lpmat0','iunstable','istable','iindeterm','iwrong','egg','yys','nspred','nboth','nfwrd') + load(filetoload,'lpmat','lpmat0','iunstable','istable','iindeterm','iwrong','egg','yys','nspred','nboth','nfwrd','infox') Nsam = size(lpmat,1); if pprior==0, eval(['load ' options_.mode_file '.mat;']); @@ -467,14 +483,46 @@ delete([OutputDirectoryName,'/',fname_,'_',aunstname,'_corr_*.*']); delete([OutputDirectoryName,'/',fname_,'_',aindname,'_corr_*.*']); if length(iunstable)>0 && length(iunstable)0 && length(iunstable)