diff --git a/matlab/dynare_config.m b/matlab/dynare_config.m index e5812af90ed2856d782fce5d9372daf83ccd7bbb..6463a7506b7d735ccd5fda99ca5d6f8c322674f8 100644 --- a/matlab/dynare_config.m +++ b/matlab/dynare_config.m @@ -118,6 +118,11 @@ if (isoctave && ~user_has_octave_forge_package('statistics')) ... p{end+1} = '/missing/nanmean'; end +% Check if struct2array is available. +if ~exist('struct2array') + p{end+1} = '/missing/struct2array'; +end + P = cellfun(@(c)[dynareroot(1:end-1) c], p, 'uni',false); % Get mex files folder(s) diff --git a/matlab/missing/struct2array/struct2array.m b/matlab/missing/struct2array/struct2array.m new file mode 100644 index 0000000000000000000000000000000000000000..b1c1370dd3b9e475c13cec32636aef38e6406215 --- /dev/null +++ b/matlab/missing/struct2array/struct2array.m @@ -0,0 +1,29 @@ +function a = struct2array(s) + +% INPUTS +% - s [struct] with N fields, field i contains a n_i*m_i array of doubles. +% +% OUPUTS +% - a [double] column vector with sum(n_i*m_i, i=1,...,N) elements. + +% Copyright (C) 2017 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 <http://www.gnu.org/licenses/>. + +assert(isstruct(s), 'struct2array:: Argument has to be a structure!') + +c = cellfun(@vec, struct2cell(s), 'UniformOutput', false); +a = vertcat(c{:}); \ No newline at end of file