Skip to content
Snippets Groups Projects
Select Git revision
  • manual_error
  • mex
  • dsge_Base_test
  • DSMH
  • 6.x
  • master default
  • exist
  • trust_region_legacy
  • 5.x
  • osr_analytic
  • gmhmaxlik
  • semi_doc
  • 4.7
  • doc_bib
  • 4.6
  • 4.5
  • dynamic-striated
  • Andreasen
  • occbin
  • filter_initial_state
  • 4.5.6
  • 4.5.5
  • 4.5.4
  • 4.5.3
  • 4.5.2
  • 4.5.1
  • 4.5.0
  • 4.4.3
  • 4.4.2
  • 4.4.1
  • 4.4.0
  • 4.4-beta1
  • 4.3.3
  • 4.3.2
  • 4.3.1
  • 4.3.0
  • 4.2.5
  • 4.2.4
  • 4.2.3
  • 4.2.2
40 results

SymbolList.cc

Blame
  • Forked from Dynare / dynare
    Source project has a limited visibility.
    dynare_simul.m NaN GiB
    %
    % SYNOPSIS
    %
    % r = dynare_simul(name, shocks)
    % r = dynare_simul(name, prefix, shocks)
    % r = dynare_simul(name, shocks, start)
    % r = dynare_simul(name, prefix, shocks, start)
    %
    %     name     name of MAT-file produced by dynare++
    %     prefix   prefix of variables in the MAT-file
    %     shocks   matrix of shocks
    %     start    zero period value
    %
    % Note that this file requires the dynare_simul_ DLL to be in the path.
    % This DLL is distributed with Dynare, under the mex/matlab or mex/octave
    % subdirectory.
    %
    % SEMANTICS
    %
    % The command reads a decision rule from the MAT-file having the given
    % prefix. Then it starts simulating the decision rule with zero time value
    % equal to the given start. It uses the given shocks for the simulation. If
    % the start is not given, the state about which the decision rule is
    % centralized is taken (called fix point, or stochastic steady state, take
    % your pick).
    %
    %     prefix   Use the prefix with which you called dynare++, the default
    %              prefix in dynare++ is 'dyn'.
    %     shocks   Number of rows must be a number of exogenous shocks,
    %              number of columns gives the number of simulated
    %              periods. NaNs and Infs in the matrix are substitued by
    %              draws from the normal distribution using the covariance
    %              matrix given in the model file.
    %     start    Vector of endogenous variables in the ordering given by
    %              <prefix>_vars.
    %
    % Seed for random generator is derived from calling rand(1,1). Therefore,
    % seeding can be controlled with rand('state') and rand('state',some_seed).
    %
    % EXAMPLES
    %
    % All examples suppose that the prefix is 'dyn' and that your_model.mat
    % has been loaded into Matlab.
    %
    % 1. response to permanent negative shock to the third exo var EPS3 for
    %    100 periods
    %
    %       shocks = zeros(4,100); % 4 exogenous variables in the model
    %       shocks(dyn_i_EPS3,:) = -0.1; % the permanent shock to EPS3
    %       r = dynare_simul('your_model.mat',shocks);
    %
    % 2. one stochastic simulation for 100 periods
    %
    %       shocks = zeros(4,100)./0; % put NaNs everywhere
    %       r = dynare_simul('your_model.mat',shocks);
    %
    % 3. one stochastic simulation starting at 75% undercapitalized economy
    %
    %       shocks = zeros(4,100)./0; % put NaNs everywhere
    %       ystart = dyn_ss; % get copy of DR fix point
    %       ystart(dyn_i_K) = 0.75*dyn_ss(dyn_i_K); % scale down the capital
    %       r = dynare_simul('your_model.mat',shocks,ystart);
    %
    %
    % SEE ALSO
    %
    %   "DSGE Models with Dynare++. A Tutorial.", Ondra Kamenik, 2005
    
    % Copyright (C) 2005-2011, Ondra Kamenik
    % Copyright (C) 2020, Dynare Team
    
    
    function r = dynare_simul(varargin)
    
    if ~exist('dynare_simul_','file')
        error('Can''t find dynare_simul_ DLL in the path. The simplest way to add it is to run Dynare once in this session.')
    end
    
    % get the file name and load data
    fname = varargin{1};
    load(fname);
    
    % set prefix, shocks, ystart
    if ischar(varargin{2})
        prefix = varargin{2};
        if length(varargin) == 3
            shocks = varargin{3};
            ystart = NaN;
        elseif length(varargin) == 4
            shocks = varargin{3};
            ystart = varargin{4};
        else
            error('Wrong number of parameters.');
        end
    else
        prefix = 'dyn';
        if length(varargin) == 2
            shocks = varargin{2};
            ystart = NaN;
        elseif length(varargin) == 3
            shocks = varargin{2};
            ystart = varargin{3};
        else
            error('Wrong number of parameters.');
        end
    end
    
    % load all needed variables but prefix_g_*
    if exist([prefix '_nstat'],'var')
        nstat = eval([prefix '_nstat']);
    else
        error(['Could not find variable ' prefix '_nstat in workspace']);
    end
    if exist([prefix '_npred'],'var')
        npred = eval([prefix '_npred']);
    else
        error(['Could not find variable ' prefix '_npred in workspace']);
    end
    if exist([prefix '_nboth'],'var')
        nboth = eval([prefix '_nboth']);
    else
        error(['Could not find variable ' prefix '_nboth in workspace']);
    end
    if exist([prefix '_nforw'],'var')
        nforw = eval([prefix '_nforw']);
    else
        error(['Could not find variable ' prefix '_nforw in workspace']);
    end
    if exist([prefix '_ss'],'var')
        ss = eval([prefix '_ss']);
    else
        error(['Could not find variable ' prefix '_ss in workspace']);
    end
    if exist([prefix '_vcov_exo'],'var')
        vcov_exo = eval([prefix '_vcov_exo']);
    else
        error(['Could not find variable ' prefix '_vcov_exo in workspace']);
    end
    nexog = size(vcov_exo,1);
    
    if isnan(ystart)
        ystart = ss;
    end
    
    % newer version of dynare++ doesn't return prefix_g_0, we make it here if
    % it does not exist in workspace
    g_zero = [prefix '_g_0'];
    if ~exist(g_zero,'var')
        dr.g_0=zeros(nstat+npred+nboth+nforw,1);
    else
        dr.g_0=eval(g_zero);
    end
    
    % make derstr a string of comma seperated existing prefix_g_*
    order = 1;
    cont = 1;
    while cont == 1
        g_ord = [prefix '_g_' num2str(order)];
        if exist(g_ord,'var')
            dr.(['g_' num2str(order)])=eval(g_ord);
            order = order + 1;
        else
            cont = 0;
        end
    end
    
    % set seed
    seed = ceil(10000*rand(1,1));
    
    % call dynare_simul_
    [err,r]=dynare_simul_(order-1,nstat,npred,nboth,nforw,...
        nexog,ystart,shocks,vcov_exo,seed,ss,dr);
    
    if err
        error('Simulation failed')
    end