diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3e8cad8d9..2e679e713 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,7 +2,7 @@ variables: GIT_SUBMODULE_STRATEGY: recursive TERM: linux MATLAB_VERSION: R2023b - OLD_MATLAB_VERSION: R2014a + OLD_MATLAB_VERSION: R2018b # The next stanza creates the version number used for the source tarball and the # binary packages. Here are the following possible cases: diff --git a/doc/manual/source/installation-and-configuration.rst b/doc/manual/source/installation-and-configuration.rst index e4bccbb0e..7c0bcf5f6 100644 --- a/doc/manual/source/installation-and-configuration.rst +++ b/doc/manual/source/installation-and-configuration.rst @@ -14,7 +14,7 @@ compilation steps are necessary in that case. In order to run Dynare, you need one of the following: -* MATLAB, any version ranging from 8.3 (R2014a) to 23.2 (R2023b); +* MATLAB, any version ranging from 9.5 (R2018b) to 23.2 (R2023b); * GNU Octave, any version ranging from 6.2.0 to 8.4.0, with the statistics package from `Octave-Forge`_. Note however that the Dynare installer for Windows requires a more specific version of Octave, as indicated on the download diff --git a/macOS/build.sh b/macOS/build.sh index 845be1085..e94d70d2f 100755 --- a/macOS/build.sh +++ b/macOS/build.sh @@ -37,8 +37,6 @@ else # Remove /opt/homebrew/bin from PATH, so it does not intervene with the x86_64 compilations path_remove PATH /opt/homebrew/bin MATLAB_ARCH=maci64 - # On x86_64 we need to differentiate between older and newer MATLAB versions - OLD_MATLAB_PATH=/Applications/"$PKG_ARCH"/MATLAB_R2016b.app fi MATLAB_PATH=/Applications/"$PKG_ARCH"/MATLAB_R2023b.app @@ -71,16 +69,10 @@ common_meson_opts=(-Dbuild_for=matlab -Dbuildtype=release -Dprefer_static=true - -Dc_link_args="[ '-Wl,-ld_classic', '-L$QUADMATH_DIR' ]" -Dcpp_link_args="[ '-Wl,-ld_classic', '-L$QUADMATH_DIR' ]" -Dfortran_link_args="[ '-Wl,-ld_classic', '-L$QUADMATH_DIR' ]" \ --native-file scripts/homebrew-native-$PKG_ARCH.ini) -# Build for MATLAB ⩾ R2018a (x86_64) and MATLAB ⩾ R2023b (arm64) +# Build for MATLAB ⩾ R2018b (x86_64) and MATLAB ⩾ R2023b (arm64) arch -"$PKG_ARCH" meson setup "${common_meson_opts[@]}" -Dmatlab_path="$MATLAB_PATH" build-matlab --wipe arch -"$PKG_ARCH" meson compile -v -C build-matlab -if [[ "$PKG_ARCH" == x86_64 ]]; then - # Build for MATLAB < R2018a - arch -"$PKG_ARCH" meson setup "${common_meson_opts[@]}" -Dmatlab_path="$OLD_MATLAB_PATH" build-old-matlab --wipe - arch -"$PKG_ARCH" meson compile -v -C build-old-matlab -fi - # If not in CI, build the docs if [[ -z $CI ]]; then arch -"$PKG_ARCH" meson compile -v -C build-matlab doc @@ -125,8 +117,7 @@ mkdir -p \ "$PKGFILES"/scripts \ "$PKGFILES"/contrib/ms-sbvar/TZcode if [[ "$PKG_ARCH" == x86_64 ]]; then - mkdir -p "$PKGFILES"/mex/matlab/"$MATLAB_ARCH"-8.3-9.3 \ - "$PKGFILES"/mex/matlab/"$MATLAB_ARCH"-9.4-23.2 + mkdir -p "$PKGFILES"/mex/matlab/"$MATLAB_ARCH"-9.5-23.2 else mkdir -p "$PKGFILES"/mex/matlab/"$MATLAB_ARCH"-23.2 fi @@ -147,8 +138,7 @@ mkdir -p "$PKGFILES" ln -sf ../../preprocessor/dynare-preprocessor "$PKGFILES"/matlab/preprocessor64/dynare_m if [[ "$PKG_ARCH" == x86_64 ]]; then - cp -L "$ROOTDIR"/build-matlab/*.mex"$MATLAB_ARCH" "$PKGFILES"/mex/matlab/"$MATLAB_ARCH"-9.4-23.2 - cp -L "$ROOTDIR"/build-old-matlab/*.mex"$MATLAB_ARCH" "$PKGFILES"/mex/matlab/"$MATLAB_ARCH"-8.3-9.3 + cp -L "$ROOTDIR"/build-matlab/*.mex"$MATLAB_ARCH" "$PKGFILES"/mex/matlab/"$MATLAB_ARCH"-9.5-23.2 else cp -L "$ROOTDIR"/build-matlab/*.mex"$MATLAB_ARCH" "$PKGFILES"/mex/matlab/"$MATLAB_ARCH"-23.2 fi diff --git a/matlab/+mom/get_data_moments.m b/matlab/+mom/get_data_moments.m index bea84599e..8f0569225 100644 --- a/matlab/+mom/get_data_moments.m +++ b/matlab/+mom/get_data_moments.m @@ -60,11 +60,11 @@ for jm = 1:options_mom_.mom.mom_nbr end end % We replace NaN (due to leads and lags and missing values) with the corresponding mean - if isoctave || matlab_ver_less_than('8.5') + if isoctave dataMoments(jm,1) = nanmean(m_data_tmp); else dataMoments(jm,1) = mean(m_data_tmp,'omitnan'); end m_data_tmp(isnan(m_data_tmp)) = dataMoments(jm,1); m_data(:,jm) = m_data_tmp; -end \ No newline at end of file +end diff --git a/matlab/+mom/run.m b/matlab/+mom/run.m index 30dd4bb02..3994ffbe9 100644 --- a/matlab/+mom/run.m +++ b/matlab/+mom/run.m @@ -172,22 +172,6 @@ options_mom_ = mom.default_option_mom_values(options_mom_, options_, M_.dname, d % ------------------------------------------------------------------------- % workarounds % ------------------------------------------------------------------------- -% The TeX option crashes MATLAB R2014a run with "-nodisplay" option -% (as is done from the testsuite). -% Since we can’t directly test whether "-nodisplay" has been passed, -% we test for the "source_root" environment variable, which is set -% by the testsuite. -% Note that it was not tested whether the crash happens with more -% recent MATLAB versions, so when OLD_MATLAB_VERSION is increased, -% one should make a test before removing this workaround. -if options_.TeX && ~isoctave && matlab_ver_less_than('8.4') && ~isempty(getenv('source_root')) - warning('Disabling TeX option due to a bug in MATLAB R2014a with -nodisplay') - options_.TeX = false; -end -if isfield(options_mom_, 'TeX') && options_mom_.TeX && ~isoctave && matlab_ver_less_than('8.4') && ~isempty(getenv('source_root')) - warning('Disabling TeX option due to a bug in MATLAB R2014a with -nodisplay') - options_mom_.TeX = false; -end if strcmp(options_mom_.mom.mom_method,'GMM') || strcmp(options_mom_.mom.mom_method,'SMM') % temporary workaround for https://git.dynare.org/Dynare/dseries/-/issues/51 if options_mom_.xls_sheet~=1 diff --git a/matlab/+occbin/mkdatap_anticipated_2constraints_dyn.m b/matlab/+occbin/mkdatap_anticipated_2constraints_dyn.m index d74db4c21..4b4fdf2f9 100644 --- a/matlab/+occbin/mkdatap_anticipated_2constraints_dyn.m +++ b/matlab/+occbin/mkdatap_anticipated_2constraints_dyn.m @@ -98,11 +98,7 @@ if T_max > 0 % check if last binding regime was already stored tmp = 0*binding_indicator; tmp(1:end-T_max+1,:) = binding_indicator(T_max:end,:); - if ~isoctave && matlab_ver_less_than('9.1') % Automatic broadcasting was introduced in MATLAB R2016b - itmp = find(~any(bsxfun(@minus, dictionary.binding_indicator(1:length(tmp)*2,:), tmp(:)))); - else - itmp = find(~any(dictionary.binding_indicator(1:length(tmp)*2,:)-tmp(:))); - end + itmp = find(~any(dictionary.binding_indicator(1:length(tmp)*2,:)-tmp(:))); if ~isempty(itmp) ireg(T_max) = itmp; else @@ -134,11 +130,7 @@ if T_max > 0 for i = T_max-1:-1:1 tmp = 0*binding_indicator; tmp(1:end-i+1,:) = binding_indicator(i:end,:); - if ~isoctave && matlab_ver_less_than('9.1') % Automatic broadcasting was introduced in MATLAB R2016b - itmp = find(~any(bsxfun(@minus, dictionary.binding_indicator(1:length(tmp)*2,:), tmp(:)))); - else - itmp = find(~any(dictionary.binding_indicator(1:length(tmp)*2,:)-tmp(:))); - end + itmp = find(~any(dictionary.binding_indicator(1:length(tmp)*2,:)-tmp(:))); if ~isempty(itmp) ireg(i) = itmp; else diff --git a/matlab/+occbin/mkdatap_anticipated_dyn.m b/matlab/+occbin/mkdatap_anticipated_dyn.m index f68085192..62b474315 100644 --- a/matlab/+occbin/mkdatap_anticipated_dyn.m +++ b/matlab/+occbin/mkdatap_anticipated_dyn.m @@ -89,11 +89,7 @@ if T_max > 0 tmp = 0*binding_indicator; tmp(1:end-i+1) = binding_indicator(i:end); - if ~isoctave && matlab_ver_less_than('9.1') % Automatic broadcasting was introduced in MATLAB R2016b - itmp = find(~any(bsxfun(@minus, dictionary.binding_indicator, tmp))); - else - itmp = find(~any(dictionary.binding_indicator-tmp)); - end + itmp = find(~any(dictionary.binding_indicator-tmp)); if ~isempty(itmp) ireg(i) = itmp; else diff --git a/matlab/+occbin/solver.m b/matlab/+occbin/solver.m index 33b26e028..3b74f018f 100644 --- a/matlab/+occbin/solver.m +++ b/matlab/+occbin/solver.m @@ -19,7 +19,7 @@ function [dr, out, ss] = solver(M_, options_, dr ,steady_state, exo_steady_state % - R: [n_vars by n_exo by n_shock_period] array of shock response matrices % - C: [n_vars by n_shock_period] array of constants -% Copyright © 2021 Dynare Team +% Copyright © 2021-2023 Dynare Team % % This file is part of Dynare. % @@ -90,15 +90,7 @@ end % add back steady state if ~options_.occbin.simul.piecewise_only - if ~isoctave && matlab_ver_less_than('9.1') % Automatic broadcasting was introduced in MATLAB R2016b - out.linear = bsxfun(@plus, out.linear, out.ys'); - else - out.linear = out.linear + out.ys'; - end + out.linear = out.linear + out.ys'; end -if ~isoctave && matlab_ver_less_than('9.1') % Automatic broadcasting was introduced in MATLAB R2016b - out.piecewise = bsxfun(@plus, out.piecewise, out.ys'); -else - out.piecewise = out.piecewise + out.ys'; -end -out.exo_pos = options_.occbin.simul.exo_pos; \ No newline at end of file +out.piecewise = out.piecewise + out.ys'; +out.exo_pos = options_.occbin.simul.exo_pos; diff --git a/matlab/+occbin/write_regimes_to_xls.m b/matlab/+occbin/write_regimes_to_xls.m index 40b7ff816..4766f36a5 100644 --- a/matlab/+occbin/write_regimes_to_xls.m +++ b/matlab/+occbin/write_regimes_to_xls.m @@ -7,7 +7,7 @@ function write_regimes_to_xls(occbin_struct,M_,options_) % - M_ [struct] Matlab's structure describing the model % - options_ [struct] Matlab's structure describing the current options -% Copyright © 2021 Dynare Team +% Copyright © 2021-2023 Dynare Team % % This file is part of Dynare. % @@ -62,14 +62,7 @@ else end end -if ~ispc && ~isoctave && matlab_ver_less_than('9.0') - % On GNU/Linux and macOS, with MATLAB < R2016a, “writeable” can’t write Excel files - % (and “xlswrite” can’t either) - warning('This version of MATLAB is too old and cannot create Excel files. The Occbin regimes will rather be written to a CSV file.') - filename=[OutputDirectoryName filesep xls_filename '.csv']; -else - filename=[OutputDirectoryName filesep xls_filename '.xls']; -end +filename=[OutputDirectoryName filesep xls_filename '.xls']; if isfile(filename) delete(filename) @@ -81,10 +74,6 @@ if isoctave error('The io package is required to write XLS files from Octave') end xlswrite(filename, vertcat(Header, xlsmat)); -elseif ~ispc && matlab_ver_less_than('9.0') - % Use a CSV file. See the comment above about filename. - % We don’t use xlswrite because its CSV fallback does not support cell-arrays. - writetable(array2table(xlsmat,'VariableNames',Header), filename); else writetable(array2table(xlsmat,'VariableNames',Header), filename, 'Sheet', 'Regimes'); end diff --git a/matlab/dynare.m b/matlab/dynare.m index c23be0d5e..68db17156 100644 --- a/matlab/dynare.m +++ b/matlab/dynare.m @@ -87,9 +87,9 @@ if isoctave skipline() end else - if matlab_ver_less_than('8.3') % Should match the test in meson.build + if matlab_ver_less_than('9.5') % Should match the test in meson.build skipline() - warning('This version of Dynare has only been tested on MATLAB 8.3 (R2014a) and above. Since your MATLAB version is older than that, Dynare may fail to run, or give unexpected results. Consider upgrading your MATLAB installation, or switch to Octave.'); + warning('This version of Dynare has only been tested on MATLAB 9.5 (R2018b) and above. Since your MATLAB version is older than that, Dynare may fail to run, or give unexpected results. Consider upgrading your MATLAB installation, or switch to Octave.'); skipline() end end diff --git a/matlab/dynare_config.m b/matlab/dynare_config.m index bc0004935..696c2e522 100644 --- a/matlab/dynare_config.m +++ b/matlab/dynare_config.m @@ -105,19 +105,14 @@ if ~exist('struct2array') p{end+1} = '/missing/struct2array'; end -% isfile is missing in MATLAB < R2017b -if ~isoctave && matlab_ver_less_than('9.3') - p{end+1} = '/missing/isfile'; -end - -% contains and splitlines don't exist in Octave and in MATLAB < R2016b -if isoctave || matlab_ver_less_than('9.1') +% contains and splitlines don't exist in Octave +if isoctave p{end+1} = '/missing/contains'; p{end+1} = '/missing/splitlines'; end -% datetime doesn't exist in Octave and in MATLAB < R2014b -if isoctave || matlab_ver_less_than('8.4') +% datetime doesn't exist in Octave +if isoctave p{end+1} = '/missing/datetime'; end diff --git a/matlab/dynare_estimation.m b/matlab/dynare_estimation.m index ca1e4065b..7797af3dc 100644 --- a/matlab/dynare_estimation.m +++ b/matlab/dynare_estimation.m @@ -43,19 +43,6 @@ if ~isempty(strmatch('dsge_prior_weight',M_.param_names)) options_.dsge_var = 1; end -% The TeX option crashes MATLAB R2014a run with "-nodisplay" option -% (as is done from the testsuite). -% Since we can’t directly test whether "-nodisplay" has been passed, -% we test for the "source_root" environment variable, which is set -% by the testsuite. -% Note that it was not tested whether the crash happens with more -% recent MATLAB versions, so when OLD_MATLAB_VERSION is increased, -% one should make a test before removing this workaround. -if options_.TeX && ~isoctave && matlab_ver_less_than('8.4') && ~isempty(getenv('source_root')) - warning('Disabling TeX option due to a bug in MATLAB R2014a with -nodisplay') - options_.TeX = false; -end - var_list = check_list_of_variables(options_, M_, var_list); options_.varlist = var_list; diff --git a/matlab/dynare_identification.m b/matlab/dynare_identification.m index 6c0e64866..edfc8534c 100644 --- a/matlab/dynare_identification.m +++ b/matlab/dynare_identification.m @@ -67,19 +67,6 @@ function [pdraws, STO_REDUCEDFORM, STO_MOMENTS, STO_DYNAMIC, STO_si_dDYNAMIC, ST global M_ options_ oo_ bayestopt_ estim_params_ -% The TeX option crashes MATLAB R2014a run with "-nodisplay" option -% (as is done from the testsuite). -% Since we can’t directly test whether "-nodisplay" has been passed, -% we test for the "source_root" environment variable, which is set -% by the testsuite. -% Note that it was not tested whether the crash happens with more -% recent MATLAB versions, so when OLD_MATLAB_VERSION is increased, -% one should make a test before removing this workaround. -if options_.TeX && ~isoctave && matlab_ver_less_than('8.4') && ~isempty(getenv('source_root')) - warning('Disabling TeX option due to a bug in MATLAB R2014a with -nodisplay') - options_.TeX = false; -end - store_options_ = options_; % store options to restore them at the end fname = M_.fname; %model name dname = M_.dname; %model name diff --git a/matlab/dynare_solve.m b/matlab/dynare_solve.m index 3368eb96a..871737faa 100644 --- a/matlab/dynare_solve.m +++ b/matlab/dynare_solve.m @@ -162,7 +162,7 @@ if options.solve_algo == 0 else options4fsolve = optimoptions('fsolve'); end - if isoctave || matlab_ver_less_than('9.0') % Option names changed in MATLAB R2016a + if isoctave options4fsolve.MaxFunEvals = 50000; options4fsolve.MaxIter = maxit; options4fsolve.TolFun = tolf; diff --git a/matlab/epilogue_shock_decomposition.m b/matlab/epilogue_shock_decomposition.m index 4a76cd2de..b610c5f35 100644 --- a/matlab/epilogue_shock_decomposition.m +++ b/matlab/epilogue_shock_decomposition.m @@ -27,11 +27,7 @@ nterms = size(z,2); for k=1:size(y,1) ytmp = squeeze(y(k,:,:)); yres = ytmp(end,:) - sum(ytmp(1:end-1,:)); - if ~isoctave && matlab_ver_less_than('9.1') % Automatic broadcasting was introduced in MATLAB R2016b - w = bsxfun(@rdivide, abs(ytmp(1:end-1,:)), sum(abs(ytmp(1:end-1,:)))) - else - w = abs(ytmp(1:end-1,:))./sum(abs(ytmp(1:end-1,:))); - end + w = abs(ytmp(1:end-1,:))./sum(abs(ytmp(1:end-1,:))); % ytmp(1:end-1,:) = ytmp(1:end-1,:) + repmat(yres,[nterms-1 1])/(nterms-1); ytmp(1:end-1,:) = ytmp(1:end-1,:) + repmat(yres,[nterms-1 1]).*w; y(k,:,:) = ytmp; diff --git a/matlab/get_path_to_mex_files.m b/matlab/get_path_to_mex_files.m index 432d4095a..a583f0d88 100644 --- a/matlab/get_path_to_mex_files.m +++ b/matlab/get_path_to_mex_files.m @@ -47,30 +47,16 @@ else end % Add win64 specific paths for Dynare Windows package if strcmp(computer, 'PCWIN64') - if matlab_ver_less_than('9.4') - tmp = [dynareroot '../mex/matlab/win64-8.3-9.3/']; - if exist(tmp, 'dir') - mexpath = tmp; - end - else - tmp = [dynareroot '../mex/matlab/win64-9.4-23.2/']; - if exist(tmp, 'dir') - mexpath = tmp; - end + tmp = [dynareroot '../mex/matlab/win64-9.5-23.2/']; + if exist(tmp, 'dir') + mexpath = tmp; end end % Add macOS paths for Dynare Mac package if strcmp(computer, 'MACI64') - if matlab_ver_less_than('9.4') - tmp = [dynareroot '../mex/matlab/maci64-8.3-9.3/']; - if exist(tmp, 'dir') - mexpath = tmp; - end - else - tmp = [dynareroot '../mex/matlab/maci64-9.4-23.2/']; - if exist(tmp, 'dir') - mexpath = tmp; - end + tmp = [dynareroot '../mex/matlab/maci64-9.5-23.2/']; + if exist(tmp, 'dir') + mexpath = tmp; end end if strcmp(computer, 'MACA64') diff --git a/matlab/graph_decomp_detail.m b/matlab/graph_decomp_detail.m index dde4a90db..37fce139e 100644 --- a/matlab/graph_decomp_detail.m +++ b/matlab/graph_decomp_detail.m @@ -190,8 +190,8 @@ for j=1:nvar ineg=zz<0; hax = subplot(nrow,ncol,i); set(gca,'box','on') hbar = bar(x(2:end),(zz.*ipos)','stacked','FaceColor','flat'); - if ~isoctave && ~matlab_ver_less_than('9.3.0') - % make bar obey colormap under MATLAB R2017b + if ~isoctave + % make bar obey colormap under MATLAB for k = 1:2 hbar(k).CData = k; end @@ -199,8 +199,8 @@ for j=1:nvar set(hbar,'edgecolor','flat'); hold on, hbar = bar(x(2:end),(zz.*ineg)','stacked','FaceColor','flat'); - if ~isoctave && ~matlab_ver_less_than('9.3.0') - % make bar obey colormap under MATLAB R2017b + if ~isoctave + % make bar obey colormap under MATLAB for k = 1:2 hbar(k).CData = k; end diff --git a/matlab/loadjson_.m b/matlab/loadjson_.m index 9df0a51e3..70c61b286 100644 --- a/matlab/loadjson_.m +++ b/matlab/loadjson_.m @@ -10,9 +10,8 @@ function o = loadjson_(jsonfilename) % % REMARKS % jsondecode builtin was introduced in MATLAB R2016b and in Octave 7. -% Older MATLAB and Octave versions use jsonlab as fallback. -% Copyright © 2020-2022 Dynare Team +% Copyright © 2020-2023 Dynare Team % % This file is part of Dynare. % @@ -29,7 +28,7 @@ function o = loadjson_(jsonfilename) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see . -if (isoctave && octave_ver_less_than('7')) || (~isoctave && matlab_ver_less_than('9.1')) +if isoctave && octave_ver_less_than('7') o = loadjson(jsonfilename); return end diff --git a/matlab/missing/isfile/isfile.m b/matlab/missing/isfile/isfile.m deleted file mode 100644 index 9fb0af345..000000000 --- a/matlab/missing/isfile/isfile.m +++ /dev/null @@ -1,88 +0,0 @@ -function a = isfile(b) - -%@info: -%! @deftypefn {Function File} {@var{a} =} isfile (@var{b}) -%! @anchor{isfile} -%! @sp 1 -%! Test if @var{b} is a file. -%! @sp 2 -%! @strong{Inputs} -%! @sp 1 -%! @table @var -%! @item b -%! A matlab/octave string. -%! @end table -%! @sp 2 -%! @strong{Outputs} -%! @sp 1 -%! @table @var -%! @item a -%! Integer scalar, equal to 1 if @var{b} is a file, zero otherwise. -%! @end table -%! @sp 2 -%! @strong{This function is called by:} -%! @sp 2 -%! @strong{This function calls:} -%! @sp 2 -%! @end deftypefn -%@eod: - -% Copyright © 2012-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 . - -stringarrayflag = false; -cellofstringflag = false; -n = 1; -a = false; - -if ~isoctave() && ~matlab_ver_less_than('9.1') && isstring(b) && length(b)>1 && isvector(b) - n = length(b); - stringarrayflag = true; - a = false(size(b)); -end - -if iscell(b) && length(b)>1 && isvector(b) - if all(cellfun(@ischar, b)) - n = length(b); - cellofstringflag = true; - a = false(size(b)); - else - error('Wrong input argument type!') - end -end - -for i=1:n - if stringarrayflag - d = b(i); - elseif cellofstringflag - d = b{i}; - elseif ischar(b) && size(b, 1)==1 - d = b; - else - error('Wrong input argument type!') - end - [base, ext] = strtok(d, '.'); - if isempty(ext) - % File has no extension. - [status, c] = fileattrib(d); - if status - a(i) = ~c.directory; - end - else - a(i) = isequal(exist(d, 'file'), 2); - end -end \ No newline at end of file diff --git a/matlab/missing/stats/+gamrnd/best_1978.m b/matlab/missing/stats/+gamrnd/best_1978.m index 30b540adf..8f0da3a20 100644 --- a/matlab/missing/stats/+gamrnd/best_1978.m +++ b/matlab/missing/stats/+gamrnd/best_1978.m @@ -9,7 +9,7 @@ function g = best_1978(a ,b) % OUTPUTS % - g [double] n*1 vector, gamma variates. -% Copyright © 2006-2020 Dynare Team +% Copyright © 2006-2023 Dynare Team % % This file is part of Dynare. % @@ -44,12 +44,7 @@ while mm X(index) = bb(index)+Y(index); % x id1 = index(X(index)<0); % Reject. id2 = setdiff(index, id1); - if numel(id2) ~= 0 || isoctave || ~matlab_ver_less_than('9.1') - % If id2=[], LHS of the .* has size [0,0], while RHS is [0,1]. - % Since there is no automatic broadcast in MATLAB < R2016b, skip the - % statement in that case. - Z(id2) = 64.0*(W(id2).^3).*(rand(length(id2),1).^2); % d - end + Z(id2) = 64.0*(W(id2).^3).*(rand(length(id2),1).^2); % d id3 = id2(Z(id2)>1.0-2.0*Y(id2).*Y(id2)./X(id2)); % Reject. id4 = id3(log(Z(id3))>2.0*(bb(id3).*log(X(id3)./bb(id3))-Y(id3))); % Reject. index = [id1, id4]; diff --git a/matlab/missing/stats/+gamrnd/knuth.m b/matlab/missing/stats/+gamrnd/knuth.m index f8ca7ef30..e5ed6c327 100644 --- a/matlab/missing/stats/+gamrnd/knuth.m +++ b/matlab/missing/stats/+gamrnd/knuth.m @@ -9,7 +9,7 @@ function g = knuth(a, b) % OUTPUTS % - g [double] n*1 vector, gamma variates. -% Copyright © 2006-2020 Dynare Team +% Copyright © 2006-2023 Dynare Team % % This file is part of Dynare. % @@ -38,15 +38,7 @@ while mm X(index) = Y(index).*bb(index) + a(index) - 1; id1 = index(X(index)<=0); % Rejected draws. id2 = setdiff(index, id1); - if numel(id2) == 0 && ~isoctave && matlab_ver_less_than('9.1') - % The LHS of the > comparison in the "else" branch has size = [0, 1] - % while the RHS has size = [0, 0]. - % Automatic broadcasting was only introduced in MATLAB R2016b, so we - % must handle this case separately to avoid an error. - id3 = []; - else - id3 = id2(rand(length(id2), 1)>(1+Y(id2).*Y(id2)).*exp((a(id2)-1).*(log(X(id2))-log(a(id2)-1))-bb(id2).*Y(id2))); % Rejected draws. - end + id3 = id2(rand(length(id2), 1)>(1+Y(id2).*Y(id2)).*exp((a(id2)-1).*(log(X(id2))-log(a(id2)-1))-bb(id2).*Y(id2))); % Rejected draws. index = [id1, id3]; mm = length(index); end diff --git a/matlab/modules/dseries b/matlab/modules/dseries index 3d7817fcd..99b6f167e 160000 --- a/matlab/modules/dseries +++ b/matlab/modules/dseries @@ -1 +1 @@ -Subproject commit 3d7817fcd9b929d5e71b2669e59f2268558d136a +Subproject commit 99b6f167e71945a45249dbc6b5100d2ca6b1474f diff --git a/matlab/optimization/dynare_minimize_objective.m b/matlab/optimization/dynare_minimize_objective.m index 582b45645..93737a85c 100644 --- a/matlab/optimization/dynare_minimize_objective.m +++ b/matlab/optimization/dynare_minimize_objective.m @@ -26,7 +26,7 @@ function [opt_par_values,fval,exitflag,hessian_mat,options_,Scale,new_rat_hess_i % none. % % -% Copyright © 2014-2021 Dynare Team +% Copyright © 2014-2023 Dynare Team % % This file is part of Dynare. % @@ -566,7 +566,7 @@ switch minimizer_algorithm optim_options.Display='off'; end if options_.analytic_derivation || (isfield(options_,'mom') && options_.mom.analytic_jacobian==1) - if isoctave || matlab_ver_less_than('9.0') % Option names changed in MATLAB R2016a + if isoctave optim_options.Jacobian = 'on'; else optim_options.SpecifyObjectiveGradient = true; diff --git a/matlab/stoch_simul.m b/matlab/stoch_simul.m index 6803b9040..30278fd0c 100644 --- a/matlab/stoch_simul.m +++ b/matlab/stoch_simul.m @@ -36,19 +36,6 @@ if isequal(options_.order,0) error('stoch_simul:: The order of the Taylor approximation cannot be 0!') end -% The TeX option crashes MATLAB R2014a run with "-nodisplay" option -% (as is done from the testsuite). -% Since we can’t directly test whether "-nodisplay" has been passed, -% we test for the "source_root" environment variable, which is set -% by the testsuite. -% Note that it was not tested whether the crash happens with more -% recent MATLAB versions, so when OLD_MATLAB_VERSION is increased, -% one should make a test before removing this workaround. -if options_.TeX && ~isoctave && matlab_ver_less_than('8.4') && ~isempty(getenv('source_root')) - warning('Disabling TeX option due to a bug in MATLAB R2014a with -nodisplay') - options_.TeX = false; -end - if M_.exo_nbr==0 error('stoch_simul:: does not support having no varexo in the model. As a workaround you could define a dummy exogenous variable.') end diff --git a/matlab/surgibbs.m b/matlab/surgibbs.m index 1528efa45..994d9169d 100644 --- a/matlab/surgibbs.m +++ b/matlab/surgibbs.m @@ -217,8 +217,8 @@ end % Plot % -% The histogram() function is not implemented in Octave and in MATLAB < R2014b -if ~options_.nograph && ~isoctave && ~matlab_ver_less_than('8.4') +% The histogram() function is not implemented in Octave +if ~options_.nograph && ~isoctave figure nrows = 5; ncols = floor(nparams/nrows); diff --git a/matlab/trust_region.m b/matlab/trust_region.m index 3e2396252..9aa8b78c1 100644 --- a/matlab/trust_region.m +++ b/matlab/trust_region.m @@ -36,7 +36,7 @@ function [x, errorflag, info] = trust_region(objfun, x, j1, j2, jacobianflag, gs % 4 if iteration is not making good progress, as measured by the improvement from the last 15 iterations. % 5 if no further improvement in the approximate solution x is possible (xtol is too small). -% Copyright © 2014-2022 Dynare Team +% Copyright © 2014-2023 Dynare Team % % This file is part of Dynare. % @@ -285,8 +285,8 @@ end function x = dogleg (r, b, d, delta) % Compute the Gauss-Newton direction. -if isoctave || matlab_ver_less_than('9.3') - % The decomposition() function does not exist in Octave and MATLAB < R2017b +if isoctave + % The decomposition() function does not exist in Octave x = r \ b; else x = decomposition(r, 'CheckCondition', false) \ b; @@ -332,4 +332,4 @@ else else %prevent zero weight on Inf evaluating to NaN x = min(sgnorm, delta)*s; end -end \ No newline at end of file +end diff --git a/meson.build b/meson.build index b40b17887..3a6ac503d 100644 --- a/meson.build +++ b/meson.build @@ -97,7 +97,7 @@ if get_option('build_for') == 'matlab' error('The “matlab_path” option must be provided when doing a MATLAB build') endif matlab_version = run_command('scripts/get-matlab-version', matlab_path, check : true).stdout().strip() - matlab_minimal_version = [ '8.3', 'R2014a' ] + matlab_minimal_version = [ '9.5', 'R2018b' ] if matlab_version.version_compare('<' + matlab_minimal_version[0]) error('MATLAB is too old (version ' + matlab_version + '), please upgrade to version ' + matlab_minimal_version[0] + ' (' + matlab_minimal_version[1] + ') at least.') diff --git a/mex/sources/defines.F08 b/mex/sources/defines.F08 index 80d607f63..483f714d4 100644 --- a/mex/sources/defines.F08 +++ b/mex/sources/defines.F08 @@ -1 +1 @@ -#define MX_HAS_INTERLEAVED_COMPLEX (defined(MATLAB_MEX_FILE) && MATLAB_VERSION >= 0x0904) +#define MX_HAS_INTERLEAVED_COMPLEX (defined(MATLAB_MEX_FILE)) diff --git a/mex/sources/dynmex.h b/mex/sources/dynmex.h index 3fb46aab5..c7a839598 100644 --- a/mex/sources/dynmex.h +++ b/mex/sources/dynmex.h @@ -26,24 +26,4 @@ #include -#if defined(MATLAB_MEX_FILE) && MATLAB_VERSION < 0x0805 -# define mxIsScalar(x) (mxGetM(x) == 1 && mxGetN(x) == 1) -#endif - -/* The int64_T and uint64_T type are broken under MinGW for MATLAB < R2015b - (they actually alias long integer types, which are 32-bit) */ -#if defined(MATLAB_MEX_FILE) && defined(__MINGW64__) && MATLAB_VERSION < 0x0806 -# define int64_T long long -# define uint64_T unsigned long long -#endif -/* NB: the following #ifdef can be removed when we upgrade to C23, since the - latter has static_assert as a keyword */ -#ifdef __cplusplus -static_assert(sizeof(int64_T) == 8, "The int64_T type is buggy"); -static_assert(sizeof(uint64_T) == 8, "The uint64_T type is buggy"); -#else -_Static_assert(sizeof(int64_T) == 8, "The int64_T type is buggy"); -_Static_assert(sizeof(uint64_T) == 8, "The uint64_T type is buggy"); -#endif - #endif diff --git a/mex/sources/matlab_mex.F08 b/mex/sources/matlab_mex.F08 index 4109bd2c9..3ab246f2f 100644 --- a/mex/sources/matlab_mex.F08 +++ b/mex/sources/matlab_mex.F08 @@ -8,11 +8,11 @@ ! Things to be aware of when adding new interfaces this file: ! ! — The tricky part is to deal with API versioning. -! • API_VER is for functions which were not versioned before 9.4 (R2018a) -! • API_VER2 is for functions which were versioned _730 before 9.4 (R2018a) -! when not using the MX_COMPAT_32 mode +! For MATLAB ⩾ R2018b, all versions share the same API (embodied in API_VER +! define), but in the past the API would differ across function, so there +! was an API_VER2 define for those. ! For each function, the information can be retrieved from either matrix.h or -! mex.h from R2014a +! mex.h. ! — C passes arguments by value, so the “value” keyword is often needed ! — Strings passed to C must be null terminated (hence a wrapper is needed to ! append c_null_char) @@ -49,17 +49,10 @@ ! along with Dynare. If not, see . #ifdef MATLAB_MEX_FILE -# if MATLAB_VERSION >= 0x0904 -# define API_VER "_800" -# define API_VER2 "_800" -# else -# define API_VER "" -# define API_VER2 "_730" -# endif +# define API_VER "_800" #else ! Octave # define API_VER "" -# define API_VER2 "" #endif #include "defines.F08" @@ -116,7 +109,7 @@ module matlab_mat !! Create, Query, and Access Data Types ! Numeric types - type(c_ptr) function mxCreateDoubleMatrix(m, n, ComplexFlag) bind(c, name="mxCreateDoubleMatrix"//API_VER2) + type(c_ptr) function mxCreateDoubleMatrix(m, n, ComplexFlag) bind(c, name="mxCreateDoubleMatrix"//API_VER) use iso_c_binding import :: mwSize, mxComplexity integer(mwSize), intent(in), value :: m, n @@ -178,7 +171,7 @@ module matlab_mat #endif ! Sparse - type(c_ptr) function mxCreateSparse(m, n, nzmax, ComplexFlag) bind(c, name="mxCreateSparse"//API_VER2) + type(c_ptr) function mxCreateSparse(m, n, nzmax, ComplexFlag) bind(c, name="mxCreateSparse"//API_VER) use iso_c_binding import :: mwSize, mxComplexity integer(mwSize), intent(in), value :: m, n, nzmax @@ -190,12 +183,12 @@ module matlab_mat type(c_ptr), intent(in), value :: pm end function mxIsSparse - pure type(c_ptr) function mxGetIr(pm) bind(c, name="mxGetIr"//API_VER2) + pure type(c_ptr) function mxGetIr(pm) bind(c, name="mxGetIr"//API_VER) use iso_c_binding type(c_ptr), intent(in), value :: pm end function mxGetIr - pure type(c_ptr) function mxGetJc(pm) bind(c, name="mxGetJc"//API_VER2) + pure type(c_ptr) function mxGetJc(pm) bind(c, name="mxGetJc"//API_VER) use iso_c_binding type(c_ptr), intent(in), value :: pm end function mxGetJc @@ -242,7 +235,7 @@ module matlab_mat end function mxIsClass_internal ! Structure - type(c_ptr) function mxCreateStructMatrix_internal(m, n, nfields, fieldnames) bind(c, name="mxCreateStructMatrix"//API_VER2) + type(c_ptr) function mxCreateStructMatrix_internal(m, n, nfields, fieldnames) bind(c, name="mxCreateStructMatrix"//API_VER) use iso_c_binding import :: mwSize integer(mwSize), intent(in), value :: m, n @@ -255,7 +248,7 @@ module matlab_mat type(c_ptr), intent(in), value :: pm end function mxIsStruct - pure type(c_ptr) function mxGetField_internal(pm, index, fieldname) bind(c, name="mxGetField"//API_VER2) + pure type(c_ptr) function mxGetField_internal(pm, index, fieldname) bind(c, name="mxGetField"//API_VER) use iso_c_binding import :: mwIndex type(c_ptr), intent(in), value :: pm @@ -263,7 +256,7 @@ module matlab_mat character(c_char), dimension(*), intent(in) :: fieldname end function mxGetField_internal - subroutine mxSetField_internal(pm, index, fieldname, pvalue) bind(c, name="mxSetField"//API_VER2) + subroutine mxSetField_internal(pm, index, fieldname, pvalue) bind(c, name="mxSetField"//API_VER) use iso_c_binding import :: mwIndex type(c_ptr), intent(in), value :: pm @@ -283,7 +276,7 @@ module matlab_mat type(c_ptr), intent(in), value :: pm end function mxIsCell - pure type(c_ptr) function mxGetCell_internal(pm, index) bind(c, name="mxGetCell"//API_VER2) + pure type(c_ptr) function mxGetCell_internal(pm, index) bind(c, name="mxGetCell"//API_VER) use iso_c_binding import :: mwIndex type(c_ptr), intent(in), value :: pm diff --git a/preprocessor b/preprocessor index c4c14963a..73be95423 160000 --- a/preprocessor +++ b/preprocessor @@ -1 +1 @@ -Subproject commit c4c14963a1d66009fcf04fbc63fdffff4384d9fd +Subproject commit 73be95423d3f8c1aa05a5edae2712ffbf646602a diff --git a/tests/bgp/fs2000/fs2000.mod b/tests/bgp/fs2000/fs2000.mod index 8ad295092..d26177b3c 100644 --- a/tests/bgp/fs2000/fs2000.mod +++ b/tests/bgp/fs2000/fs2000.mod @@ -7,7 +7,7 @@ */ /* - * Copyright © 2019-2021 Dynare Team + * Copyright © 2019-2023 Dynare Team * * This file is part of Dynare. * @@ -66,9 +66,6 @@ verbatim; g = ones(M_.endo_nbr,1);% 1+(rand(M_.endo_nbr,1)-.5)*.1; if isoctave options = optimset('Display','iter','Algorithm','levenberg-marquardt','MaxFunEvals',1000000,'MaxIter',100000,'GradObj','on','TolFun',1e-6,'TolX',1e-6); - elseif matlab_ver_less_than('9.0') - % See https://fr.mathworks.com/help/optim/ug/current-and-legacy-option-name-tables.html - options = optimoptions('fsolve','Display','iter','Algorithm','levenberg-marquardt','MaxFunEvals',1000000,'MaxIter',100000,'Jacobian','on','TolFun',1e-6,'TolX',1e-6); else options = optimoptions('fsolve','Display','iter','Algorithm','levenberg-marquardt','MaxFunctionEvaluations',1000000,'MaxIterations',100000,'SpecifyObjectiveGradient',true,'FunctionTolerance',1e-6,'StepTolerance',1e-6); end diff --git a/tests/bgp/nk-1/nk.mod b/tests/bgp/nk-1/nk.mod index 32f8ec25f..d8b4aca27 100644 --- a/tests/bgp/nk-1/nk.mod +++ b/tests/bgp/nk-1/nk.mod @@ -23,9 +23,6 @@ verbatim; bgp.write(M_); if isoctave options = optimset('Display', 'iter', 'MaxFunEvals', 1000000,'MaxIter',100000,'Jacobian','on','TolFun',1e-8,'TolX',1e-8); - elseif matlab_ver_less_than('9.0') - % See https://fr.mathworks.com/help/optim/ug/current-and-legacy-option-name-tables.html - options = optimoptions('fsolve','Display','iter','Algorithm','levenberg-marquardt','MaxFunEvals',1000000,'MaxIter',100000,'Jacobian','on','TolFun',1e-8,'TolX',1e-8); else options = optimoptions('fsolve','Display','iter','Algorithm','levenberg-marquardt','MaxFunctionEvaluations',1000000,'MaxIterations',100000,'SpecifyObjectiveGradient',true,'FunctionTolerance',1e-8,'StepTolerance',1e-8); end diff --git a/tests/bgp/ramsey-1/ramsey.mod b/tests/bgp/ramsey-1/ramsey.mod index 62a0d0155..26227db4c 100644 --- a/tests/bgp/ramsey-1/ramsey.mod +++ b/tests/bgp/ramsey-1/ramsey.mod @@ -18,9 +18,6 @@ verbatim; bgp.write(M_); if isoctave options = optimset('Display', 'iter', 'MaxFunEvals', 1000000,'MaxIter',100000,'Jacobian','on','TolFun',1e-7,'TolX',1e-7); - elseif matlab_ver_less_than('9.0') - % See https://fr.mathworks.com/help/optim/ug/current-and-legacy-option-name-tables.html - options = optimoptions('fsolve','Display','iter','Algorithm','levenberg-marquardt','MaxFunEvals',1000000,'MaxIter',100000,'Jacobian','on','TolFun',1e-6,'TolX',1e-6); else options = optimoptions('fsolve','Display','iter','Algorithm','levenberg-marquardt','MaxFunctionEvaluations',1000000,'MaxIterations',100000,'SpecifyObjectiveGradient',true,'FunctionTolerance',1e-6,'StepTolerance',1e-6); end diff --git a/tests/bgp/solow-1/solow.mod b/tests/bgp/solow-1/solow.mod index 930c6d0d7..c96abdcde 100644 --- a/tests/bgp/solow-1/solow.mod +++ b/tests/bgp/solow-1/solow.mod @@ -49,9 +49,6 @@ verbatim; EG = NaN(MC,1); if isoctave options = optimset('Display', 'off', 'MaxFunEvals', 1000000,'MaxIter',100000,'Jacobian','on','TolFun',1e-8,'TolX',1e-8); - elseif matlab_ver_less_than('9.0') - % See https://fr.mathworks.com/help/optim/ug/current-and-legacy-option-name-tables.html - options = optimoptions('fsolve','Display','off','Algorithm','levenberg-marquardt','MaxFunEvals',1000000,'MaxIter',100000,'Jacobian','on','TolFun',1e-8,'TolX',1e-8); else options = optimoptions('fsolve','Display','off','Algorithm','levenberg-marquardt','MaxFunctionEvaluations',1000000,'MaxIterations',100000,'SpecifyObjectiveGradient',true,'FunctionTolerance',1e-8,'StepTolerance',1e-8); end diff --git a/tests/estimation/method_of_moments/AFVRR/AFVRR_M0.mod b/tests/estimation/method_of_moments/AFVRR/AFVRR_M0.mod index 88bb95a00..62b1edc51 100644 --- a/tests/estimation/method_of_moments/AFVRR/AFVRR_M0.mod +++ b/tests/estimation/method_of_moments/AFVRR/AFVRR_M0.mod @@ -2,7 +2,7 @@ % Andreasen, Fernandez-Villaverde, Rubio-Ramirez (2018), The Pruned State-Space System for Non-Linear DSGE Models: Theory and Empirical Applications, Review of Economic Studies, 85, p. 1-49 % Adapted for Dynare by Willi Mutschler (@wmutschl, willi@mutschler.eu), Jan 2021 % ========================================================================= -% Copyright © 2021 Dynare Team +% Copyright © 2021-2023 Dynare Team % % This file is part of Dynare. % @@ -257,8 +257,7 @@ dev_datamoments = str2double(AndreasenEtAl.moments@{orderApp}(:,5)) - oo_.mom.d dev_modelmoments = str2double(AndreasenEtAl.moments@{orderApp}(:,6)) - oo_.mom.model_moments; % There is no table command in Octave -% The table command also crashes on MATLAB R2014a because it does not like variable names -if ~isoctave && ~matlab_ver_less_than('8.4') +if ~isoctave table([AndreasenEtAl.Q@{orderApp} ; str2double(AndreasenEtAl.moments@{orderApp}(:,5)) ; str2double(AndreasenEtAl.moments@{orderApp}(:,6))],... [oo_.mom.Q ; oo_.mom.data_moments ; oo_.mom.model_moments ],... [dev_Q ; dev_datamoments ; dev_modelmoments ],... diff --git a/tests/estimation/method_of_moments/AFVRR/AFVRR_MFB.mod b/tests/estimation/method_of_moments/AFVRR/AFVRR_MFB.mod index 0faacd04a..f4653c43a 100644 --- a/tests/estimation/method_of_moments/AFVRR/AFVRR_MFB.mod +++ b/tests/estimation/method_of_moments/AFVRR/AFVRR_MFB.mod @@ -2,7 +2,7 @@ % Andreasen, Fernandez-Villaverde, Rubio-Ramirez (2018), The Pruned State-Space System for Non-Linear DSGE Models: Theory and Empirical Applications, Review of Economic Studies, 85, p. 1-49 % Adapted for Dynare by Willi Mutschler (@wmutschl, willi@mutschler.eu), Jan 2021 % ========================================================================= -% Copyright © 2021 Dynare Team +% Copyright © 2021-2023 Dynare Team % % This file is part of Dynare. % @@ -258,8 +258,7 @@ dev_datamoments = str2double(AndreasenEtAl.moments@{orderApp}(:,5)) - oo_.mom.d dev_modelmoments = str2double(AndreasenEtAl.moments@{orderApp}(:,6)) - oo_.mom.model_moments; % There is no table command in Octave -% The table command also crashes on MATLAB R2014a because it does not like variable names -if ~isoctave && ~matlab_ver_less_than('8.4') +if ~isoctave table([AndreasenEtAl.Q@{orderApp} ; str2double(AndreasenEtAl.moments@{orderApp}(:,5)) ; str2double(AndreasenEtAl.moments@{orderApp}(:,6))],... [oo_.mom.Q ; oo_.mom.data_moments ; oo_.mom.model_moments ],... [dev_Q ; dev_datamoments ; dev_modelmoments ],... diff --git a/tests/estimation/method_of_moments/AFVRR/AFVRR_MFB_RRA.mod b/tests/estimation/method_of_moments/AFVRR/AFVRR_MFB_RRA.mod index e8d0a97a4..8a511af73 100644 --- a/tests/estimation/method_of_moments/AFVRR/AFVRR_MFB_RRA.mod +++ b/tests/estimation/method_of_moments/AFVRR/AFVRR_MFB_RRA.mod @@ -2,7 +2,7 @@ % Andreasen, Fernandez-Villaverde, Rubio-Ramirez (2018), The Pruned State-Space System for Non-Linear DSGE Models: Theory and Empirical Applications, Review of Economic Studies, 85, p. 1-49 % Adapted for Dynare by Willi Mutschler (@wmutschl, willi@mutschler.eu), Jan 2021 % ========================================================================= -% Copyright © 2021 Dynare Team +% Copyright © 2021-2023 Dynare Team % % This file is part of Dynare. % @@ -257,8 +257,7 @@ dev_datamoments = str2double(AndreasenEtAl.moments@{orderApp}(:,5)) - oo_.mom.d dev_modelmoments = str2double(AndreasenEtAl.moments@{orderApp}(:,6)) - oo_.mom.model_moments; % There is no table command in Octave -% The table command also crashes on MATLAB R2014a because it does not like variable names -if ~isoctave && ~matlab_ver_less_than('8.4') +if ~isoctave table([AndreasenEtAl.Q@{orderApp} ; str2double(AndreasenEtAl.moments@{orderApp}(:,5)) ; str2double(AndreasenEtAl.moments@{orderApp}(:,6))],... [oo_.mom.Q ; oo_.mom.data_moments ; oo_.mom.model_moments ],... [dev_Q ; dev_datamoments ; dev_modelmoments ],... diff --git a/tests/histval_initval_file_unit_tests.m b/tests/histval_initval_file_unit_tests.m index 9d5f622b3..80d2f58ee 100644 --- a/tests/histval_initval_file_unit_tests.m +++ b/tests/histval_initval_file_unit_tests.m @@ -177,7 +177,7 @@ end fclose(fh); % The table() function is not implemented in Octave -if ~isoctave && ((ispc && ~matlab_ver_less_than('8.2')) || (~ispc && ~matlab_ver_less_than('9.0'))) +if ~isoctave writetable(table(x,y), 'data.xlsx') options = struct(); options.datafile = 'data.xlsx'; @@ -190,7 +190,7 @@ end % The table() function is not implemented in Octave % The test also does not work under GNU/Linux + MATLAB R2020b (Unicode issue in xlsread) -if ~isoctave && (ispc && ~matlab_ver_less_than('8.2')) +if ~isoctave && ispc writetable(table(x,y), 'data.xls') options = struct(); options.datafile = 'data.xls'; diff --git a/tests/occbin/model_borrcon/borrcon_common.inc b/tests/occbin/model_borrcon/borrcon_common.inc index 845c5d919..b4d12a463 100644 --- a/tests/occbin/model_borrcon/borrcon_common.inc +++ b/tests/occbin/model_borrcon/borrcon_common.inc @@ -17,11 +17,7 @@ ylabels = char(percent,percent,percent,level); figtitle = 'Simulated variables'; legendlist = cellstr(char('Piecewise Linear','Linear')); -if isoctave || ~matlab_ver_less_than('8.4') - % For some unknown reason, MATLAB R2014a crashes with TeX labels - % when -nodisplay is passed (as in the testsuite) - options_.TeX=1; -end +options_.TeX=1; occbin_graph; occbin_graph c_hat b_hat y_hat; diff --git a/windows/README.txt b/windows/README.txt index d87ff3c8a..6ea7c46c3 100644 --- a/windows/README.txt +++ b/windows/README.txt @@ -21,7 +21,7 @@ Note: Dynare comes with an automated uninstaller, which you can run from the Using Dynare with MATLAB® ───────────────────────── -Dynare works on top of MATLAB®, any version ranging from 8.3 (R2014a) to 23.2 +Dynare works on top of MATLAB®, any version ranging from 9.5 (R2018b) to 23.2 (R2023b). Only 64-bit versions are supported. To use Dynare, you just have to add the ‘matlab’ subdirectory of your Dynare diff --git a/windows/build.sh b/windows/build.sh index 4d00734b7..b6909e4cf 100755 --- a/windows/build.sh +++ b/windows/build.sh @@ -31,7 +31,6 @@ ROOT_DIRECTORY=$(dirname "$(readlink -f "$0")") # Check that build directories do not already exist [[ -d /tmp/windeps ]] && { echo "Please remove the /tmp/windeps directory" 2>&1; exit 1; } [[ -d "$ROOT_DIRECTORY"/../build-win-matlab ]] && { echo "Please remove the build-win-matlab directory" 2>&1; exit 1; } -[[ -d "$ROOT_DIRECTORY"/../build-win-old-matlab ]] && { echo "Please remove the build-win-old-matlab directory" 2>&1; exit 1; } [[ -d "$ROOT_DIRECTORY"/../build-win-octave ]] && { echo "Please remove the build-win-octave directory" 2>&1; exit 1; } # Create TMP folder and make sure it is deleted upon exit @@ -56,16 +55,11 @@ cd .. common_meson_opts=(-Dbuildtype=release --cross-file scripts/windows-cross.ini) -# Create Windows 64-bit DLL binaries for MATLAB ≥ R2018a -meson setup --cross-file scripts/windows-cross-matlab.ini -Dmatlab_path=/tmp/windeps/matlab64/R2018a \ +# Create Windows 64-bit DLL binaries for MATLAB ≥ R2018b +meson setup --cross-file scripts/windows-cross-matlab.ini -Dmatlab_path=/tmp/windeps/matlab64/R2018b \ "${common_meson_opts[@]}" build-win-matlab meson compile -v -C build-win-matlab -# Create Windows 64-bit DLL binaries for MATLAB ≥ R2014a and ≤ R2017b -meson setup --cross-file scripts/windows-cross-matlab.ini -Dmatlab_path=/tmp/windeps/matlab64/R2014a \ - "${common_meson_opts[@]}" build-win-old-matlab -meson compile -v -C build-win-old-matlab - # Create Windows DLL binaries for Octave/MinGW (64bit) meson setup --cross-file scripts/windows-cross-octave.ini \ "${common_meson_opts[@]}" build-win-octave @@ -87,7 +81,6 @@ fi # Strip binaries x86_64-w64-mingw32-strip build-win-matlab/preprocessor/src/dynare-preprocessor.exe x86_64-w64-mingw32-strip -- build-win-matlab/*.mexw64 -x86_64-w64-mingw32-strip -- build-win-old-matlab/*.mexw64 x86_64-w64-mingw32-strip -- build-win-octave/*.mex # Add a preprocessor copy for backward compatibility @@ -128,10 +121,8 @@ mkdir -p "$ZIPDIR"/contrib/ms-sbvar/TZcode cp -pr contrib/ms-sbvar/TZcode/MatlabFiles "$ZIPDIR"/contrib/ms-sbvar/TZcode mkdir -p "$ZIPDIR"/contrib/jsonlab cp -pr contrib/jsonlab/* "$ZIPDIR"/contrib/jsonlab -mkdir -p "$ZIPDIR"/mex/matlab/win64-8.3-9.3 -cp -p build-win-old-matlab/*.mexw64 "$ZIPDIR"/mex/matlab/win64-8.3-9.3 -mkdir -p "$ZIPDIR"/mex/matlab/win64-9.4-23.2 -cp -p build-win-matlab/*.mexw64 "$ZIPDIR"/mex/matlab/win64-9.4-23.2 +mkdir -p "$ZIPDIR"/mex/matlab/win64-9.5-23.2 +cp -p build-win-matlab/*.mexw64 "$ZIPDIR"/mex/matlab/win64-9.5-23.2 mkdir -p "$ZIPDIR"/mex/octave/win64 cp -p build-win-octave/*.mex "$ZIPDIR"/mex/octave/win64 mkdir "$ZIPDIR"/preprocessor diff --git a/windows/deps/versions.mk b/windows/deps/versions.mk index a0a4032ae..5b65665cd 100644 --- a/windows/deps/versions.mk +++ b/windows/deps/versions.mk @@ -4,7 +4,7 @@ X13AS_VERSION = 1-1-b60 OCTAVE_VERSION = 8.4.0 OCTAVE_W64_BUILD = -MATLAB64_VERSION = 20200930 +MATLAB64_VERSION = 20231122 ### MSYS2 packages diff --git a/windows/dynare.nsi b/windows/dynare.nsi index f3234fb20..fb9bf6374 100644 --- a/windows/dynare.nsi +++ b/windows/dynare.nsi @@ -90,13 +90,8 @@ Section "Dynare core (preprocessor and M-files)" SectionEnd -Section "MEX files for MATLAB 64-bit, version 8.3 to 9.3 (R2014a to R2017b)" - SetOutPath $INSTDIR\mex\matlab\win64-8.3-9.3 - File ..\build-win-old-matlab\*.mexw64 -SectionEnd - -Section "MEX files for MATLAB 64-bit, version 9.4 to 23.2 (R2018a to R2023b)" - SetOutPath $INSTDIR\mex\matlab\win64-9.4-23.2 +Section "MEX files for MATLAB 64-bit, version 9.5 to 23.2 (R2018b to R2023b)" + SetOutPath $INSTDIR\mex\matlab\win64-9.5-23.2 File ..\build-win-matlab\*.mexw64 SectionEnd