function initvalf(fname_) % function initvalf(fname_) % % Reads an initial path from the 'fname_' file for exogenous and endogenous variables % % INPUTS % fname_: name of the function or file containing the data % % OUTPUTS % none % % SPECIAL REQUIREMENTS % All variables local to this function have an underscore appended to % their name, to minimize clashes with model variables loaded by this function. % Copyright (C) 2003-2018 Dynare Team % % This file is part of Dynare. % % Dynare is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % Dynare is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with Dynare. If not, see . global M_ oo_ options_ series_ = 1; [directory, basename, extension] = fileparts(fname_); % Auto-detect extension if not provided if isempty(extension) if exist([basename '.m'],'file') extension = '.m'; elseif exist([basename '.mat'],'file') extension = '.mat'; elseif exist([basename '.xls'],'file') extension = '.xls'; elseif exist([basename '.xlsx'],'file') extension = '.xlsx'; else error(['Can''t find datafile: ' basename '.{m,mat,xls,xlsx}']); end end if isempty(directory) directory = '.'; end fullname = [directory '/' basename extension]; if ~exist(fullname, 'file') error(['Can''t find datafile: ' fullname ]); end options_.initval_file = true; oo_.endo_simul = []; oo_.exo_simul = []; if ismember(extension, {'.mat', '.m'}) && isdseries(fullname) data = dseries(fullname); % Add auxiliary variables if any. data = feval(sprintf('%s.dynamic_set_auxiliary_series', M_.fname), data, M_.params); % Remove NaNs in the first periods. data = data(data.firstobservedperiod:data.lastobservedperiod); % Fill endo_simul. oo_.endo_simul = transpose(data{M_.endo_names{:}}.data); % Fill exo_simul. oo_.exo_simul = data{M_.exo_names{:}}.data; % Update number of periods for the deterministic simulation. options_.periods = data.nobs-M_.maximum_lag-M_.maximum_lead; else switch (extension) case '.m' eval(basename); case '.mat' load(basename); case { '.xls', '.xlsx' } [data_,names_v_]=xlsread(fullname); % Octave needs the extension explicitly series_=0; otherwise error(['Unsupported extension for datafile: ' extension]) end for i_=1:length(M_.endo_names) if series_ == 1 x_ = eval(M_.endo_names{i_}); if size(x_,2)>size(x_,1) %oo_.endo_simul must be collection of row vectors oo_.endo_simul = [oo_.endo_simul; x_]; else %transpose if column vector oo_.endo_simul = [oo_.endo_simul; x_']; end else k_ = strmatch(M_.endo_names{i_}, names_v_, 'exact'); if isempty(k_) error(['INITVAL_FILE: ' M_.endo_names{i_} ' not found']) end x_ = data_(:,k_); oo_.endo_simul = [oo_.endo_simul; x_']; end end for i_=1:length(M_.exo_names) if series_ == 1 x_ = eval(M_.exo_names{i_}); if size(x_,2)>size(x_,1) %oo_.endo_simul must be collection of row vectors oo_.exo_simul = [oo_.exo_simul x_']; else %if column vector oo_.exo_simul = [oo_.exo_simul x_]; end else k_ = strmatch(M_.exo_names{i_}, names_v_, 'exact'); if isempty(k_) error(['INITVAL_FILE: ' M_.exo_names{i_} ' not found']) end x_ = data_(:,k_); oo_.exo_simul = [oo_.exo_simul x_]; end end end