From 6e0f104d7e2bd9b15e47d2715494734d96652e23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org> Date: Tue, 7 Apr 2020 12:24:16 +0200 Subject: [PATCH] Bump minimal MATLAB version to R2014a Ref. #1713 --- .gitlab-ci.yml | 2 +- .../source/installation-and-configuration.rst | 2 +- license.txt | 6 -- m4/ax_mexopts.m4 | 6 +- macOS/build.sh | 4 +- matlab/add_path_to_mex_files.m | 8 +- matlab/compute_moments_varendo.m | 4 +- matlab/conditional_variance_decomposition.m | 4 +- ...al_variance_decomposition_ME_mc_analysis.m | 4 +- matlab/disp_moments.m | 4 +- matlab/disp_th_moments.m | 6 +- matlab/distributions/lpdfgweibull.m | 24 +++-- ...tical_conditional_variance_decomposition.m | 2 +- ...lated_theoretical_variance_decomposition.m | 2 +- matlab/dynare.m | 4 +- matlab/dynare_config.m | 25 +---- matlab/get_dynare_random_generator_state.m | 16 +--- matlab/identification_analysis.m | 4 +- .../missing/is-row-column-matrix/iscolumn.m | 20 ---- .../missing/is-row-column-matrix/ismatrix.m | 19 ---- matlab/missing/is-row-column-matrix/isrow.m | 20 ---- matlab/missing/isdiag/isdiag.m | 62 ------------ matlab/missing/narginchk/narginchk.m | 28 ------ matlab/missing/stats/wblinv.m | 6 +- matlab/missing/strjoin/strjoin.m | 62 ------------ matlab/missing/strsplit/private/ischarint.m | 27 ------ matlab/missing/strsplit/private/ischarnum.m | 35 ------- matlab/missing/strsplit/strsplit.m | 90 ------------------ matlab/modules/dseries | 2 +- matlab/modules/reporting | 2 +- matlab/posterior_analysis.m | 4 +- matlab/set_dynare_random_generator_state.m | 22 ++--- matlab/set_dynare_seed.m | 28 ++---- matlab/simulated_moments_estimation.m | 10 +- matlab/smm_objective.m | 10 +- matlab/user_has_matlab_license.m | 11 +-- matlab/utilities/tests | 2 +- mex/build/matlab/configure.ac | 4 +- mex/sources/dynblas.h | 5 +- mex/sources/dynlapack.h | 5 +- mex/sources/mjdgges/mjdgges.F08 | 16 ---- tests/Makefile.am | 3 - .../BrockMirman_PertParamsDerivs.mod | 6 -- tests/bgp/nk-1/nk.mod | 2 +- tests/bgp/ramsey-1/ramsey.mod | 2 +- tests/bgp/solow-1/solow.mod | 2 +- .../example1.mod | 4 +- tests/data/mod1a.mod | 4 - tests/data/test.xls | Bin 62464 -> 0 bytes tests/dates/data_uav.xls | Bin 9216 -> 0 bytes tests/dates/dseries_interact.mod | 8 -- .../LindeTrabandt/LindeTrabandt2019_xfail.mod | 8 -- tests/identification/kim/kim2.mod | 6 -- tests/optimizers/fs2000_3.mod | 4 +- tests/recursive/data_ca1_xls.xls | Bin 15872 -> 0 bytes tests/recursive/ls2003_bayesian_xls.mod | 4 - tests/run_all_unitary_tests.m | 2 +- windows/README.txt | 2 +- windows/build.sh | 20 ++-- windows/deps/Makefile | 6 +- windows/deps/versions.mk | 4 +- windows/dynare.nsi | 12 +-- 62 files changed, 109 insertions(+), 607 deletions(-) delete mode 100644 matlab/missing/is-row-column-matrix/iscolumn.m delete mode 100644 matlab/missing/is-row-column-matrix/ismatrix.m delete mode 100644 matlab/missing/is-row-column-matrix/isrow.m delete mode 100644 matlab/missing/isdiag/isdiag.m delete mode 100644 matlab/missing/narginchk/narginchk.m delete mode 100644 matlab/missing/strjoin/strjoin.m delete mode 100644 matlab/missing/strsplit/private/ischarint.m delete mode 100644 matlab/missing/strsplit/private/ischarnum.m delete mode 100644 matlab/missing/strsplit/strsplit.m delete mode 100644 tests/data/test.xls delete mode 100644 tests/dates/data_uav.xls delete mode 100644 tests/recursive/data_ca1_xls.xls diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 33f4a41d47..8b5e309453 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,7 +2,7 @@ variables: GIT_SUBMODULE_STRATEGY: recursive TERM: linux MATLAB_VERSION: R2020a - OLD_MATLAB_VERSION: R2009b + OLD_MATLAB_VERSION: R2014a # 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 49651c5799..0de229401d 100644 --- a/doc/manual/source/installation-and-configuration.rst +++ b/doc/manual/source/installation-and-configuration.rst @@ -14,7 +14,7 @@ are necessary in that case. In order to run Dynare, you need one of the following: -* MATLAB version 7.9 (R2009b) or above; +* MATLAB version 8.3 (R2014a) or above; * GNU Octave version 4.4 or above, with the statistics package from `Octave-Forge`_. Note however that the Dynare installers for Windows and macOS require a more specific version of Octave, as indicated on the download diff --git a/license.txt b/license.txt index 5bda147d27..18e5e35bb9 100644 --- a/license.txt +++ b/license.txt @@ -207,12 +207,6 @@ Copyright: 1993-1996 Kurt Hornik 2016-2017 Dynare Team License: GPL-3+ -Files: matlab/missing/strjoin/strjoin.m -Copyright: 2013-2019 Ben Abbott - 2007 Muthiah Annamalai - 2019 Dynare Team -License: GPL-3+ - Files: matlab/lmmcp/catstruct.m Copyright: 2005 Jos van der Geest <jos@jasen.nl> 2013 Christophe Gouel diff --git a/m4/ax_mexopts.m4 b/m4/ax_mexopts.m4 index 890397b61c..60fda3441a 100644 --- a/m4/ax_mexopts.m4 +++ b/m4/ax_mexopts.m4 @@ -22,7 +22,7 @@ AC_REQUIRE([AX_MATLAB_ARCH]) AC_REQUIRE([AX_MATLAB_VERSION]) AC_REQUIRE([AC_PROG_SED]) -AX_COMPARE_VERSION([$MATLAB_VERSION], [lt], [7.9], [AC_MSG_ERROR([Your MATLAB is too old, please upgrade to 7.9 (R2009b) at least.])]) +AX_COMPARE_VERSION([$MATLAB_VERSION], [lt], [8.3], [AC_MSG_ERROR([Your MATLAB is too old, please upgrade to 8.3 (R2014a) at least.])]) AC_MSG_CHECKING([for options to compile MEX for MATLAB]) @@ -80,10 +80,6 @@ case ${MATLAB_ARCH} in ;; esac -# Kludge for incompatibility of older MATLABs (≤ R2011a) with recent gcc -# Include <uchar.h>, because matrix.h needs char16_t -AX_COMPARE_VERSION([$MATLAB_VERSION], [le], [7.12], [MATLAB_CFLAGS="$MATLAB_CFLAGS -include uchar.h"]) - # Converts the MATLAB version number into comparable integers with only major and minor version numbers # For example, 7.4.2 will become 0704 ax_matlab_ver=$(echo "$MATLAB_VERSION" | $SED -e 's/\([[0-9]]*\)\.\([[0-9]]*\).*/Z\1ZZ\2Z/' \ diff --git a/macOS/build.sh b/macOS/build.sh index 55b78f7caa..c6af350ab1 100755 --- a/macOS/build.sh +++ b/macOS/build.sh @@ -88,7 +88,7 @@ make -j"$NTHREADS" NAME=dynare-"$VERSION" PKGFILES="$ROOTDIR"/macOS/pkg/"$NAME" mkdir -p \ - "$PKGFILES"/mex/matlab/maci64-7.9-9.3 \ + "$PKGFILES"/mex/matlab/maci64-8.3-9.3 \ "$PKGFILES"/mex/matlab/maci64-9.4-9.8 \ "$PKGFILES"/mex/octave \ "$PKGFILES"/doc/dynare++ \ @@ -107,7 +107,7 @@ cp -p "$ROOTDIR"/license.txt "$PKGFILES" cp -pr "$ROOTDIR"/matlab "$PKGFILES" cp -pr "$ROOTDIR"/examples "$PKGFILES" -cp -L "$ROOTDIR"/mex/matlab/* "$PKGFILES"/mex/matlab/maci64-7.9-9.3 +cp -L "$ROOTDIR"/mex/matlab/* "$PKGFILES"/mex/matlab/maci64-8.3-9.3 cp -p "$ROOTDIR"/scripts/dynare.el "$PKGFILES"/scripts cp -pr "$ROOTDIR"/contrib/ms-sbvar/TZcode/MatlabFiles "$PKGFILES"/contrib/ms-sbvar/TZcode diff --git a/matlab/add_path_to_mex_files.m b/matlab/add_path_to_mex_files.m index 85f2593030..0f0c4abd87 100644 --- a/matlab/add_path_to_mex_files.m +++ b/matlab/add_path_to_mex_files.m @@ -1,6 +1,6 @@ function mexpath = add_path_to_mex_files(dynareroot, modifypath) -% Copyright (C) 2015-2019 Dynare Team +% Copyright (C) 2015-2020 Dynare Team % % This file is part of Dynare. % @@ -54,7 +54,7 @@ if isoctave else % Add win32 specific paths for Dynare Windows package if strcmp(computer, 'PCWIN') - tmp = [dynareroot '../mex/matlab/win32-7.9-8.6/']; + tmp = [dynareroot '../mex/matlab/win32-8.3-8.6/']; if exist(tmp, 'dir') mexpath = tmp; if modifypath @@ -65,7 +65,7 @@ else % Add win64 specific paths for Dynare Windows package if strcmp(computer, 'PCWIN64') if matlab_ver_less_than('9.4') - tmp = [dynareroot '../mex/matlab/win64-7.9-9.3/']; + tmp = [dynareroot '../mex/matlab/win64-8.3-9.3/']; if exist(tmp, 'dir') mexpath = tmp; if modifypath @@ -85,7 +85,7 @@ else % Add macOS paths for Dynare Mac package if strcmp(computer, 'MACI64') if matlab_ver_less_than('9.4') - tmp = [dynareroot '../mex/matlab/maci64-7.9-9.3/']; + tmp = [dynareroot '../mex/matlab/maci64-8.3-9.3/']; if exist(tmp, 'dir') mexpath = tmp; if modifypath diff --git a/matlab/compute_moments_varendo.m b/matlab/compute_moments_varendo.m index 4bfabce340..21f5201f00 100644 --- a/matlab/compute_moments_varendo.m +++ b/matlab/compute_moments_varendo.m @@ -17,7 +17,7 @@ function oo_ = compute_moments_varendo(type, options_, M_, oo_, var_list_) % SPECIAL REQUIREMENTS % none -% Copyright (C) 2008-2018 Dynare Team +% Copyright (C) 2008-2020 Dynare Team % % This file is part of Dynare. % @@ -145,7 +145,7 @@ if M_.exo_nbr > 1 end skipline(); if ~all(M_.H==0) - if isoctave || matlab_ver_less_than('8.1') + if isoctave [observable_name_requested_vars, varlist_pos] = intersect_stable(var_list_, options_.varobs); else [observable_name_requested_vars, varlist_pos] = intersect(var_list_, options_.varobs, 'stable'); diff --git a/matlab/conditional_variance_decomposition.m b/matlab/conditional_variance_decomposition.m index 4ef81da553..45fe803bdc 100644 --- a/matlab/conditional_variance_decomposition.m +++ b/matlab/conditional_variance_decomposition.m @@ -17,7 +17,7 @@ function [ConditionalVarianceDecomposition, ConditionalVarianceDecomposition_ME] % h is the number of Steps % p is the number of state innovations and -% Copyright (C) 2010-2017 Dynare Team +% Copyright (C) 2010-2020 Dynare Team % % This file is part of Dynare. % @@ -89,7 +89,7 @@ end % Measurement error if ~all(StateSpaceModel.measurement_error==0) - if isoctave || matlab_ver_less_than('8.1') + if isoctave [observable_pos,index_subset,index_observables]=intersect_stable(SubsetOfVariables,StateSpaceModel.observable_pos); else [observable_pos,index_subset,index_observables]=intersect(SubsetOfVariables,StateSpaceModel.observable_pos,'stable'); diff --git a/matlab/conditional_variance_decomposition_ME_mc_analysis.m b/matlab/conditional_variance_decomposition_ME_mc_analysis.m index cfe9a1b155..a0b5ffdd7a 100644 --- a/matlab/conditional_variance_decomposition_ME_mc_analysis.m +++ b/matlab/conditional_variance_decomposition_ME_mc_analysis.m @@ -22,7 +22,7 @@ function oo_ = ... % OUTPUTS % oo_ [structure] Dynare structure where the results are saved. -% Copyright (C) 2017-2018 Dynare Team +% Copyright (C) 2017-2020 Dynare Team % % This file is part of Dynare. % @@ -63,7 +63,7 @@ if isempty(exogenous_variable_index) end end -if isoctave || matlab_ver_less_than('8.1') +if isoctave [observable_pos_requested_vars,index_subset,index_observables]=intersect_stable(var_list,options_.varobs); else [observable_pos_requested_vars,index_subset,index_observables]=intersect(var_list,options_.varobs,'stable'); diff --git a/matlab/disp_moments.m b/matlab/disp_moments.m index 8223ba4f92..cd819cb99a 100644 --- a/matlab/disp_moments.m +++ b/matlab/disp_moments.m @@ -11,7 +11,7 @@ function oo_=disp_moments(y,var_list,M_,options_,oo_) % OUTPUTS % oo_ [structure] Dynare's results structure, -% Copyright (C) 2001-2019 Dynare Team +% Copyright (C) 2001-2020 Dynare Team % % This file is part of Dynare. % @@ -50,7 +50,7 @@ y = y(ivar,options_.drop+1:end)'; ME_present=0; if ~all(M_.H==0) - if isoctave || matlab_ver_less_than('8.1') + if isoctave [observable_pos_requested_vars, index_subset, index_observables] = intersect_stable(ivar, options_.varobs_id); else [observable_pos_requested_vars, index_subset, index_observables] = intersect(ivar, options_.varobs_id, 'stable'); diff --git a/matlab/disp_th_moments.m b/matlab/disp_th_moments.m index 33fdb7100b..6fd28a0d65 100644 --- a/matlab/disp_th_moments.m +++ b/matlab/disp_th_moments.m @@ -2,7 +2,7 @@ function oo_ = disp_th_moments(dr, var_list, M_, options_, oo_) % Display theoretical moments of variables -% Copyright (C) 2001-2018 Dynare Team +% Copyright (C) 2001-2020 Dynare Team % % This file is part of Dynare. % @@ -55,7 +55,7 @@ oo_.var = oo_.gamma_y{1}; ME_present=0; if ~all(M_.H==0) - if isoctave || matlab_ver_less_than('8.1') + if isoctave [observable_pos_requested_vars,index_subset,index_observables]=intersect_stable(ivar,options_.varobs_id); else [observable_pos_requested_vars,index_subset,index_observables]=intersect(ivar,options_.varobs_id,'stable'); @@ -105,7 +105,7 @@ if size(stationary_vars, 1) > 0 lh = cellofchararraymaxlength(M_.endo_names(ivar(stationary_vars)))+2; dyntable(options_, title, headers, M_.endo_names(ivar(stationary_vars)), 100*oo_.gamma_y{options_.ar+2}(stationary_vars,:), lh, 8, 2); if ME_present - if isoctave || matlab_ver_less_than('8.1') + if isoctave [stationary_observables, pos_index_subset] = intersect_stable(index_subset, stationary_vars); else [stationary_observables, pos_index_subset] = intersect(index_subset, stationary_vars, 'stable'); diff --git a/matlab/distributions/lpdfgweibull.m b/matlab/distributions/lpdfgweibull.m index 7848b35469..5d31e23802 100644 --- a/matlab/distributions/lpdfgweibull.m +++ b/matlab/distributions/lpdfgweibull.m @@ -16,7 +16,7 @@ function [ldens,Dldens,D2ldens] = lpdfgweibull(x,a,b,c) % --*-- Unitary tests - % SPECIAL REQUIREMENTS % none -% Copyright (C) 2015-2017 Dynare Team +% Copyright (C) 2015-2020 Dynare Team % % This file is part of Dynare. % @@ -205,7 +205,7 @@ end %$ density = @(x) exp(lpdfgweibull(x,shape,scale)); %$ %$ try -%$ if isoctave || matlab_ver_less_than('7.14') +%$ if isoctave %$ s = quadl(density, .0000000001, 100000, 1e-10); %$ else %$ s = integral(density, 0, 100000); @@ -228,7 +228,7 @@ end %$ density = @(x) exp(lpdfgweibull(x,shape,scale)); %$ %$ try -%$ if isoctave || matlab_ver_less_than('7.14') +%$ if isoctave %$ s = quadl(density, .0000000001, 100000, 1e-10); %$ else %$ s = integral(density, 0, 100000); @@ -251,7 +251,7 @@ end %$ density = @(x) exp(lpdfgweibull(x,shape,scale)); %$ %$ try -%$ if isoctave || matlab_ver_less_than('7.14') +%$ if isoctave %$ s = quadl(density, .0000000001, 100000, 1e-10); %$ else %$ s = integral(density, 0, 100000); @@ -262,7 +262,7 @@ end %$ end %$ %$ if t(1) -%$ if isoctave || matlab_ver_less_than('7.14') +%$ if isoctave %$ t(2) = abs(s-1)<5e-5; %$ else %$ t(2) = abs(s-1)<1e-6; @@ -280,8 +280,6 @@ end %$ try %$ if isoctave %$ s = quadgk(xdens, .0000000001, 100000, 1e-10); -%$ elseif matlab_ver_less_than('7.14') -%$ s = quadgk(xdens, .0000000001, 100000, 'AbsTol', 1e-10); %$ else %$ s = integral(xdens, 0, 100000); %$ end @@ -303,7 +301,7 @@ end %$ xdens = @(x) x.*exp(lpdfgweibull(x,shape,scale)); %$ %$ try -%$ if isoctave || matlab_ver_less_than('7.14') +%$ if isoctave %$ s = quadl(xdens, .0000000001, 100000, 1e-10); %$ else %$ s = integral(xdens, 0, 100000); @@ -326,7 +324,7 @@ end %$ xdens = @(x) x.*exp(lpdfgweibull(x,shape,scale)); %$ %$ try -%$ if isoctave || matlab_ver_less_than('7.14') +%$ if isoctave %$ s = quadl(xdens, .0000000001, 100000, 1e-10); %$ else %$ s = integral(xdens, 0, 100000); @@ -352,7 +350,7 @@ end %$ try %$ s = NaN(n, 1); %$ for i=1:n -%$ if isoctave || matlab_ver_less_than('7.14') +%$ if isoctave %$ s(i) = quadl(density, .0000000001, .1*i, 1e-10); %$ else %$ s(i) = integral(density, 0, .1*i); @@ -383,7 +381,7 @@ end %$ try %$ s = NaN(n, 1); %$ for i=1:n -%$ if isoctave || matlab_ver_less_than('7.14') +%$ if isoctave %$ s(i) = quadl(density, .0000000001, .1*i, 1e-10); %$ else %$ s(i) = integral(density, 0, .1*i); @@ -414,7 +412,7 @@ end %$ try %$ s = NaN(n, 1); %$ for i=1:n -%$ if isoctave || matlab_ver_less_than('7.14') +%$ if isoctave %$ s(i) = quadl(density, .0000000001, .1*i, 1e-10); %$ else %$ s(i) = integral(density, 0, .1*i); @@ -429,7 +427,7 @@ end %$ for i=1:n %$ x = .1*i; %$ q = 1-exp(-(x/scale)^shape); -%$ if isoctave || matlab_ver_less_than('7.14') +%$ if isoctave %$ t(i+1) = abs(s(i)-q)<5e-5; %$ else %$ t(i+1) = abs(s(i)-q)<1e-6; diff --git a/matlab/dsge_simulated_theoretical_conditional_variance_decomposition.m b/matlab/dsge_simulated_theoretical_conditional_variance_decomposition.m index 540b2e2392..4195b58a91 100644 --- a/matlab/dsge_simulated_theoretical_conditional_variance_decomposition.m +++ b/matlab/dsge_simulated_theoretical_conditional_variance_decomposition.m @@ -83,7 +83,7 @@ MaXNumberOfConditionalDecompLines = ceil(options_.MaxNumberOfBytes/NumberOfSaved ME_present=0; if ~all(M_.H==0) - if isoctave || matlab_ver_less_than('8.1') + if isoctave [observable_pos_requested_vars,index_subset,index_observables]=intersect_stable(ivar,options_.varobs_id); else [observable_pos_requested_vars,index_subset,index_observables]=intersect(ivar,options_.varobs_id,'stable'); diff --git a/matlab/dsge_simulated_theoretical_variance_decomposition.m b/matlab/dsge_simulated_theoretical_variance_decomposition.m index 7e6942c194..71febcf473 100644 --- a/matlab/dsge_simulated_theoretical_variance_decomposition.m +++ b/matlab/dsge_simulated_theoretical_variance_decomposition.m @@ -86,7 +86,7 @@ MaXNumberOfDecompLines = ceil(options_.MaxNumberOfBytes/NumberOfSavedElementsPer ME_present=0; if ~all(M_.H==0) - if isoctave || matlab_ver_less_than('8.1') + if isoctave [observable_pos_requested_vars,index_subset,index_observables]=intersect_stable(ivar,options_.varobs_id); else [observable_pos_requested_vars,index_subset,index_observables]=intersect(ivar,options_.varobs_id,'stable'); diff --git a/matlab/dynare.m b/matlab/dynare.m index 32ea530d9a..27b027d675 100644 --- a/matlab/dynare.m +++ b/matlab/dynare.m @@ -82,10 +82,10 @@ if isoctave skipline() end else - if matlab_ver_less_than('7.9') % Should match the test in mex/build/matlab/configure.ac + if matlab_ver_less_than('8.3') % Should match the test in mex/build/matlab/configure.ac % and in m4/ax_mexopts.m4 skipline() - warning('This version of Dynare has only been tested on MATLAB 7.9 (R2009b) 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 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.'); skipline() end end diff --git a/matlab/dynare_config.m b/matlab/dynare_config.m index 8a08d72b79..ee74ebf11a 100644 --- a/matlab/dynare_config.m +++ b/matlab/dynare_config.m @@ -87,8 +87,8 @@ if isoctave && octave_ver_less_than('5') p{end+1} = '/missing/ordeig'; end -%% intersect(…, 'stable') doesn't exist in Octave and in MATLAB < R2013a -if isoctave || matlab_ver_less_than('8.1') +%% intersect(…, 'stable') doesn't exist in Octave +if isoctave p{end+1} = '/missing/intersect_stable'; end @@ -116,33 +116,12 @@ if (isoctave && octave_ver_less_than('5')) || (~isoctave && matlab_ver_less_than p{end+1} = '/missing/isfile'; end -% strsplit and strjoin are missing in MATLAB < R2013a -if ~isoctave && matlab_ver_less_than('8.1') - p{end+1} = '/missing/strsplit'; - p{end+1} = '/missing/strjoin'; -end - % contains and splitlines don't exist in Octave and in MATLAB < R2016b if isoctave || matlab_ver_less_than('9.1') p{end+1} = '/missing/contains'; p{end+1} = '/missing/splitlines'; end -% isrow, iscolumn and ismatrix are missing in Matlab<R2010b -if ~isoctave && matlab_ver_less_than('7.11') - p{end+1} = '/missing/is-row-column-matrix'; -end - -%% isdiag is missing in MATLAB < R2014a -if ~isoctave && matlab_ver_less_than('8.3') - p{end+1} = '/missing/isdiag'; -end - -%% narginchk is missing in MATLAB < R2011b -if ~isoctave && matlab_ver_less_than('7.13') - p{end+1} = '/missing/narginchk'; -end - P = cellfun(@(c)[dynareroot(1:end-1) c], p, 'uni',false); % Get mex files folder(s) diff --git a/matlab/get_dynare_random_generator_state.m b/matlab/get_dynare_random_generator_state.m index bf01db4a5f..9aef9a288e 100644 --- a/matlab/get_dynare_random_generator_state.m +++ b/matlab/get_dynare_random_generator_state.m @@ -6,7 +6,7 @@ function [state_u,state_n] = get_dynare_random_generator_state() % For backward compatibility, we return two vectors, but, in recent % versions of Matlab and in Octave, we return two identical vectors. -% Copyright (C) 2010-2017 Dynare Team +% Copyright (C) 2010-2020 Dynare Team % % This file is part of Dynare. % @@ -23,14 +23,8 @@ function [state_u,state_n] = get_dynare_random_generator_state() % You should have received a copy of the GNU General Public License % along with Dynare. If not, see <http://www.gnu.org/licenses/>. -matlab_random_streams = ~isoctave; - -if matlab_random_streams% Use new matlab interface. - if matlab_ver_less_than('7.12') - s = RandStream.getDefaultStream(); - else - s = RandStream.getGlobalStream(); - end +if ~isoctave + s = RandStream.getGlobalStream(); if isequal(s.Type,'legacy') state_u = rand('state'); state_n = randn('state'); @@ -38,7 +32,7 @@ if matlab_random_streams% Use new matlab interface. state_u = s.State; state_n = state_u; end -else% Use old matlab interface. +else state_u = rand('state'); state_n = randn('state'); -end \ No newline at end of file +end diff --git a/matlab/identification_analysis.m b/matlab/identification_analysis.m index 75d429182b..a8a9c7e174 100644 --- a/matlab/identification_analysis.m +++ b/matlab/identification_analysis.m @@ -327,7 +327,7 @@ if info(1) == 0 %no errors in solution cmm = simulated_moment_uncertainty(ind_dMOMENTS, periods, replic,options_,M_,oo_); %covariance matrix of moments sd = sqrt(diag(cmm)); cc = cmm./(sd*sd'); - if isoctave || matlab_ver_less_than('8.3') + if isoctave [VV,DD] = eig(cc); %fix for older Matlab versions that do not support computing left eigenvalues, see http://mathworks.com/help/releases/R2012b/matlab/ref/eig.html [WW,~] = eig(cc.'); @@ -536,4 +536,4 @@ if info(1) == 0 %no errors in solution identification_checks(tilda_dSPECTRUM, 3, tol_rank, tol_sv, totparam_nbr); end end -end \ No newline at end of file +end diff --git a/matlab/missing/is-row-column-matrix/iscolumn.m b/matlab/missing/is-row-column-matrix/iscolumn.m deleted file mode 100644 index 0264efe198..0000000000 --- a/matlab/missing/is-row-column-matrix/iscolumn.m +++ /dev/null @@ -1,20 +0,0 @@ -function r = iscolumn(V) -% Copyright (C) 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 <http://www.gnu.org/licenses/>. - -sz = size(V); -r = (length(sz) == 2) && (sz(2) == 1); diff --git a/matlab/missing/is-row-column-matrix/ismatrix.m b/matlab/missing/is-row-column-matrix/ismatrix.m deleted file mode 100644 index e9ed4ef2db..0000000000 --- a/matlab/missing/is-row-column-matrix/ismatrix.m +++ /dev/null @@ -1,19 +0,0 @@ -function r = ismatrix(V) -% Copyright (C) 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 <http://www.gnu.org/licenses/>. - -r = (ndims(V) == 2); diff --git a/matlab/missing/is-row-column-matrix/isrow.m b/matlab/missing/is-row-column-matrix/isrow.m deleted file mode 100644 index ef53534ede..0000000000 --- a/matlab/missing/is-row-column-matrix/isrow.m +++ /dev/null @@ -1,20 +0,0 @@ -function r = isrow(V) -% Copyright (C) 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 <http://www.gnu.org/licenses/>. - -sz = size(V); -r = (length(sz) == 2) && (sz(1) == 1); diff --git a/matlab/missing/isdiag/isdiag.m b/matlab/missing/isdiag/isdiag.m deleted file mode 100644 index 89dcec2f16..0000000000 --- a/matlab/missing/isdiag/isdiag.m +++ /dev/null @@ -1,62 +0,0 @@ -function b = isdiag(A) % --*-- Unitary tests --*-- - -% Copyright (C) 2014-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/>. - -if isnumeric(A) - if isquare(A) - % Find non zero elements in matrix A... - [ir, ic] = find(A); - % If the non zero elements are on the diagonal, the corresponding elements - % in ir and ic (row and column numbers) should be equal. - b = isequal(ir, ic); - else - error('isdiag: Input must be a square matrix!') - end -else - error('isdiag: Input must be numeric!') -end - -%@test:1 -%$ A = zeros(3,3); -%$ t = isdiag(A); -%$ T = all(t); -%@eof:1 - -%@test:2 -%$ A = zeros(3,3); A(1,3) = 1; -%$ t = ~isdiag(A); -%$ T = all(t); -%@eof:2 - -%@test:3 -%$ A = randn(3,3); -%$ t = ~isdiag(A); -%$ T = all(t); -%@eof:3 - -%@test:4 -%$ A = diag(randn(3,1)); -%$ t = isdiag(A); -%$ T = all(t); -%@eof:4 - -%@test:5 -%$ A = diag(randn(3,1)); A(1,1) = 0; -%$ t = isdiag(A); -%$ T = all(t); -%@eof:5 diff --git a/matlab/missing/narginchk/narginchk.m b/matlab/missing/narginchk/narginchk.m deleted file mode 100644 index 645f3afaa7..0000000000 --- a/matlab/missing/narginchk/narginchk.m +++ /dev/null @@ -1,28 +0,0 @@ -function narginchk(minArgs,maxArgs) - -% Copyright (C) 2019 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/>. - -n = evalin('caller', 'nargin;'); - -if n < minArgs - error('narginchk: not enough input arguments'); -end - -if n > maxArgs - error('narginchk: too many input arguments'); -end diff --git a/matlab/missing/stats/wblinv.m b/matlab/missing/stats/wblinv.m index 105a6cf7e8..af537a7c38 100644 --- a/matlab/missing/stats/wblinv.m +++ b/matlab/missing/stats/wblinv.m @@ -10,7 +10,7 @@ function t = wblinv(proba, scale, shape) % --*-- Unitary tests --*-- % OUTPUTS % - t [double] scalar such that P(X<=t)=proba -% Copyright (C) 2015-2017 Dynare Team +% Copyright (C) 2015-2020 Dynare Team % % This file is part of Dynare. % @@ -147,7 +147,7 @@ t = exp(log(scale)+log(-log(1-proba))/shape); %$ if debug %$ [shape, scale, x(k-1)] %$ end -%$ if isoctave || matlab_ver_less_than('7.14') +%$ if isoctave %$ s = quadv(density, 0, x(k-1),1e-10); %$ else %$ s = integral(density, 0, x(k-1)); @@ -155,7 +155,7 @@ t = exp(log(scale)+log(-log(1-proba))/shape); %$ if debug %$ [s, abs(p-s)] %$ end -%$ if isoctave || matlab_ver_less_than('7.14') +%$ if isoctave %$ t(k) = abs(p-s)<1e-9; %$ else %$ t(k) = abs(p-s)<1e-12; diff --git a/matlab/missing/strjoin/strjoin.m b/matlab/missing/strjoin/strjoin.m deleted file mode 100644 index 47f21287fc..0000000000 --- a/matlab/missing/strjoin/strjoin.m +++ /dev/null @@ -1,62 +0,0 @@ -function rval = strjoin (cstr, delimiter) - -% Adapted from Octave's implementation of strjoin -% -% Limitation: escaped characters (e.g. '\n') in delimiters will not be -% interpreted as the characters they represent. - -% Copyright (C) 2013-2019 Ben Abbott -% Copyright (C) 2007 Muthiah Annamalai -% Copyright (C) 2019 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/>. - -if nargin == 1 - delimiter = ' '; -elseif nargin < 1 || nargin > 2 - error('strjoin: must have either one or two arguments') -end -if ~(iscellstr(cstr) && (ischar(delimiter) || iscellstr(delimiter))) - error('strjoin: first argument must be a cell array, second array either a char array or a cell array') -end - -if numel(cstr) == 1 - rval = cstr{1}; - return; -end - -if ischar(delimiter) - % There is no equivalent to do_string_escapes in MATLAB - %delimiter = do_string_escapes(delimiter); - delimiter = {delimiter}; -end - -num = numel(cstr); -if numel(delimiter) == 1 && num > 1 - delimiter = repmat(delimiter, 1, num); - delimiter(end) = {''}; -elseif num > 0 && numel(delimiter) ~= num - 1 - error('strjoin: the number of delimiters does not match the number of strings'); -else - delimiter(end+1) = {''}; -end - -if num == 0 - rval = ''; -else - tmp = [cstr(:).'; delimiter(:).']; - rval = [tmp{:}]; -end diff --git a/matlab/missing/strsplit/private/ischarint.m b/matlab/missing/strsplit/private/ischarint.m deleted file mode 100644 index d325015d4d..0000000000 --- a/matlab/missing/strsplit/private/ischarint.m +++ /dev/null @@ -1,27 +0,0 @@ -function l = ischarint(x) - -% Returns true if and only if char x represents an integer. - -% Copyright © 2018 DynareTeam -% -% 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/>. - -s = warning; -warning off; - -l = isint(str2double(x)); - -warning(s); \ No newline at end of file diff --git a/matlab/missing/strsplit/private/ischarnum.m b/matlab/missing/strsplit/private/ischarnum.m deleted file mode 100644 index 57b7c7e8cd..0000000000 --- a/matlab/missing/strsplit/private/ischarnum.m +++ /dev/null @@ -1,35 +0,0 @@ -function l = ischarnum(x) - -% Returns true if and only if char x represents a real number. - -% Copyright © 2018 DynareTeam -% -% 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/>. - -l = false; - -s = warning; -warning off; - -number = str2double(x); - -warning(s); - -if ~isempty(number) - if isreal(number) - l = true; - end -end \ No newline at end of file diff --git a/matlab/missing/strsplit/strsplit.m b/matlab/missing/strsplit/strsplit.m deleted file mode 100644 index 926bb50f38..0000000000 --- a/matlab/missing/strsplit/strsplit.m +++ /dev/null @@ -1,90 +0,0 @@ -function tok = strsplit(str, delimiters) - -% Splits a string into multiple terms. -% -% INPUTS -% - str [char] String to be splitted. -% - delimiters [char, cell(char)] Delimiters. -% -% OUTPUTS -% - tok [cell(char)] Terms. - -% Copyright © 2018 DynareTeam -% -% 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/>. - -remove_empty = true; -remove_numbers = false; - -% Check first input arguments -assert(ischar(str) && ndims(str)==2 && size(str,1)<=1, 'The first arugment has to be a row char array!'); - -% Set default value for second input arguments -if nargin<2 - delimiters = {' '}; -end - -% If second input argument is a char transform it into a sigleton cell of char -if nargin>1 - if ischar(delimiters) - assert(ndims(delimiters)==2 && size(delimiters,1)==1, 'The second input argument has to be be a char string!'); - delimiters = {delimiters}; - end -end - -% Check that `delimiters` is a one dimensional cell -assert(ndim(delimiters)<=1, 'The second input argument has to be a one dimensional cell array!') - -% Check that `delimiters` is a cell of row char arrays -assert(all(cellfun(@ischar, delimiters)) && all(cellfun(@rows, delimiters)==1), 'The second input argument has to be a cell of row char arrays!') - -% If space is one of the delimiters obtain the index in `delimiters` -idspace = strmatch(' ', delimiters); - -% Get the number of delimiters -n = length(delimiters); - -% Remove unnecessary spaces -delimiters(setdiff(1:n, idspace)) = strtrim(delimiters(setdiff(1:n, idspace))); - -% Join all the delimiters (strjoin is not available with matlab version less than R2013a) -if n>1 - delimiter = ''; - for i=1:n - if isspace(delimiters{i}) - delimiter = horzcat(delimiter, '\s'); - else - delimiter = horzcat(delimiter, delimiters{i}); - end - delimiter = horzcat(delimiter,'|'); - end - delimiter = horzcat(delimiter, '\W'); -else - delimiter = delimiters{1}; -end - -% Get tokens -tok = regexp(str, delimiter, 'split'); - -if remove_empty - % Remove empty tokens - tok = tok(find(~cellfun(@isempty, tok))); -end - -if remove_numbers - % Remove numbers - tok = tok(find(~cellfun(@ischarnum, tok))); -end \ No newline at end of file diff --git a/matlab/modules/dseries b/matlab/modules/dseries index 59739c38d9..a4479b5cb5 160000 --- a/matlab/modules/dseries +++ b/matlab/modules/dseries @@ -1 +1 @@ -Subproject commit 59739c38d9253990dddf8f6a7c88a81f6a72d66b +Subproject commit a4479b5cb56b0f2b83d567652735c5410254f0fb diff --git a/matlab/modules/reporting b/matlab/modules/reporting index a25d3abdb6..13c98b256d 160000 --- a/matlab/modules/reporting +++ b/matlab/modules/reporting @@ -1 +1 @@ -Subproject commit a25d3abdb6312d619352a7b276c70ec98b3d5f00 +Subproject commit 13c98b256d8d42f62692aa9d48d379e897f2ca5e diff --git a/matlab/posterior_analysis.m b/matlab/posterior_analysis.m index 16088823d2..65735025c2 100644 --- a/matlab/posterior_analysis.m +++ b/matlab/posterior_analysis.m @@ -1,6 +1,6 @@ function oo_ = posterior_analysis(type,arg1,arg2,arg3,options_,M_,oo_) -% Copyright (C) 2008-2018 Dynare Team +% Copyright (C) 2008-2020 Dynare Team % % This file is part of Dynare. % @@ -66,7 +66,7 @@ switch type M_.exo_names,arg2,vartan,arg1,options_.mh_conf_sig,oo_,options_); if ~all(M_.H==0) if strmatch(arg1,options_.varobs,'exact') - if isoctave || matlab_ver_less_than('8.1') + if isoctave [observable_name_requested_vars,index_subset,index_observables]=intersect_stable(vartan,options_.varobs); else [observable_name_requested_vars,index_subset,index_observables]=intersect(vartan,options_.varobs,'stable'); diff --git a/matlab/set_dynare_random_generator_state.m b/matlab/set_dynare_random_generator_state.m index 8854576d9e..03df1cb51f 100644 --- a/matlab/set_dynare_random_generator_state.m +++ b/matlab/set_dynare_random_generator_state.m @@ -6,7 +6,7 @@ function [state_u,state_n] = set_dynare_random_generator_state(state_u,state_n) % For backward compatibility, we return two vectors, but, in recent % versions of Matlab and in Octave, we return two identical vectors. % -% Copyright (C) 2010-2017 Dynare Team +% Copyright (C) 2010-2020 Dynare Team % % This file is part of Dynare. % @@ -23,14 +23,8 @@ function [state_u,state_n] = set_dynare_random_generator_state(state_u,state_n) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see <http://www.gnu.org/licenses/>. -matlab_random_streams = ~isoctave; - -if matlab_random_streams% Use new matlab interface. - if matlab_ver_less_than('7.12') - s = RandStream.getDefaultStream(); - else - s = RandStream.getGlobalStream(); - end +if ~isoctave + s = RandStream.getGlobalStream(); if isequal(s.Type,'legacy') rand('state',state_u); randn('state',state_n); @@ -47,13 +41,9 @@ if matlab_random_streams% Use new matlab interface. 'please, contact Dynare''s development team.']) end s.State = state_u; - if matlab_ver_less_than('7.12') - RandStream.setDefaultStream(s); - else - RandStream.setGlobalStream(s); - end + RandStream.setGlobalStream(s); end -else% Use old matlab interface. +else rand('state',state_u); randn('state',state_n); -end \ No newline at end of file +end diff --git a/matlab/set_dynare_seed.m b/matlab/set_dynare_seed.m index 89feb1961f..dd6b117f2f 100644 --- a/matlab/set_dynare_seed.m +++ b/matlab/set_dynare_seed.m @@ -2,7 +2,7 @@ function set_dynare_seed(a,b) % Set seeds depending on matlab (octave) version. This routine is called in dynare_config and can be called by the % user in the mod file. % -% Copyright (C) 2010-2017 Dynare Team +% Copyright (C) 2010-2020 Dynare Team % % This file is part of Dynare. % @@ -32,20 +32,12 @@ if matlab_random_streams% Use new matlab interface. options_.DynareRandomStreams.algo = 'mt19937ar'; options_.DynareRandomStreams.seed = 0; s = RandStream(options_.DynareRandomStreams.algo,'Seed',options_.DynareRandomStreams.seed); - if matlab_ver_less_than('7.12') - reset(RandStream.setDefaultStream(s)); - else - reset(RandStream.setGlobalStream(s)); - end + reset(RandStream.setGlobalStream(s)); return end if ischar(a) && strcmpi(a,'reset') s = RandStream(options_.DynareRandomStreams.algo,'Seed',options_.DynareRandomStreams.seed); - if matlab_ver_less_than('7.12') - reset(RandStream.setDefaultStream(s)); - else - reset(RandStream.setGlobalStream(s)); - end + reset(RandStream.setGlobalStream(s)); return end if ~ischar(a) || (ischar(a) && strcmpi(a, 'clock')) @@ -56,11 +48,7 @@ if matlab_random_streams% Use new matlab interface. options_.DynareRandomStreams.seed = a; end s = RandStream(options_.DynareRandomStreams.algo,'Seed',options_.DynareRandomStreams.seed); - if matlab_ver_less_than('7.12') - reset(RandStream.setDefaultStream(s)); - else - reset(RandStream.setGlobalStream(s)); - end + reset(RandStream.setGlobalStream(s)); return end error('set_dynare_seed:: something is wrong in the calling sequence!') @@ -84,11 +72,7 @@ if matlab_random_streams% Use new matlab interface. options_.DynareRandomStreams.algo = a; options_.DynareRandomStreams.seed = b; s = RandStream(options_.DynareRandomStreams.algo,'Seed',options_.DynareRandomStreams.seed); - if matlab_ver_less_than('7.12') - reset(RandStream.setDefaultStream(s)); - else - reset(RandStream.setGlobalStream(s)); - end + reset(RandStream.setGlobalStream(s)); end else% Use old matlab interface. if nargin==1 @@ -122,4 +106,4 @@ else% Use old matlab interface. else error('set_dynare_seed:: Cannot use more than one input argument with your version of Matlab/Octave!') end -end \ No newline at end of file +end diff --git a/matlab/simulated_moments_estimation.m b/matlab/simulated_moments_estimation.m index 4a99ec77ea..459b6a0060 100644 --- a/matlab/simulated_moments_estimation.m +++ b/matlab/simulated_moments_estimation.m @@ -14,7 +14,7 @@ function [param,sigma] = simulated_moments_estimation(dataset,options,parallel) % SPECIAL REQUIREMENTS % The user has to provide a file where the moment conditions are defined. -% Copyright (C) 2010-2018 Dynare Team +% Copyright (C) 2010-2020 Dynare Team % % This file is part of Dynare. % @@ -269,11 +269,7 @@ fprintf(fid,['tmp([' num2str(variance_idx) ']) = xparams(1:' int2str(nv) ').^2; fprintf(fid,'M_.Sigma_e = diag(tmp);') fprintf(fid,['stream=RandStream(''mt19937ar'',''Seed'',' int2str(slave_number) ');\n']); -if matlab_ver_less_than('7.12') - fprintf(fid,['RandStream.setDefaultStream(stream);\n\n']); -else - fprintf(fid,['RandStream.setGlobalStream(stream);\n\n']); -end +fprintf(fid,['RandStream.setGlobalStream(stream);\n\n']); fprintf(fid,['maxNumCompThreads(' int2str(threads_per_job) ');\n\n']); @@ -299,4 +295,4 @@ if ((job_number>1) && strcmpi(hostname,remotename)) || ~strcmpi(hostname,remoten fprintf(fid,'exit'); end -fclose(fid); \ No newline at end of file +fclose(fid); diff --git a/matlab/smm_objective.m b/matlab/smm_objective.m index 9ff0e338a8..c355ec4199 100644 --- a/matlab/smm_objective.m +++ b/matlab/smm_objective.m @@ -15,7 +15,7 @@ function [r,flag] = smm_objective(xparams,sample_moments,weighting_matrix,option % SPECIAL REQUIREMENTS % The user has to provide a file where the moment conditions are defined. -% Copyright (C) 2010-2019 Dynare Team +% Copyright (C) 2010-2020 Dynare Team % % This file is part of Dynare. % @@ -40,11 +40,7 @@ flag = 1; if nargin<5 if isempty(mainStream) - if matlab_ver_less_than('7.12') - mainStream = RandStream.getDefaultStream; - else - mainStream = RandStream.getGlobalStream; - end + mainStream = RandStream.getGlobalStream; mainState = mainStream.State; else mainStream.State = mainState; @@ -156,4 +152,4 @@ if (options.optimization_routine>0) && exist('optimization_path.mat') new_state = [ r; xparams]; estimated_parameters_optimization_path = [ estimated_parameters_optimization_path , new_state ]; save('optimization_path.mat','estimated_parameters_optimization_path'); -end \ No newline at end of file +end diff --git a/matlab/user_has_matlab_license.m b/matlab/user_has_matlab_license.m index 6f8b3c2261..de5475ae06 100644 --- a/matlab/user_has_matlab_license.m +++ b/matlab/user_has_matlab_license.m @@ -11,7 +11,7 @@ function [hasLicense] = user_has_matlab_license(toolbox) % SPECIAL REQUIREMENTS % none -% Copyright (C) 2012-2017 Dynare Team +% Copyright (C) 2012-2020 Dynare Team % % This file is part of Dynare. % @@ -28,11 +28,8 @@ function [hasLicense] = user_has_matlab_license(toolbox) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see <http://www.gnu.org/licenses/>. -if matlab_ver_less_than('7.12') - hasLicense = license('test', toolbox); -else - [hasLicense, ~] = license('checkout',toolbox); -end +[hasLicense, ~] = license('checkout',toolbox); + if ~hasLicense return end @@ -68,4 +65,4 @@ else hasInstallation=1; end end -end \ No newline at end of file +end diff --git a/matlab/utilities/tests b/matlab/utilities/tests index 371f3f0e6e..bc4df1c1ec 160000 --- a/matlab/utilities/tests +++ b/matlab/utilities/tests @@ -1 +1 @@ -Subproject commit 371f3f0e6ec209b4277a2fd7911ccf80570d7473 +Subproject commit bc4df1c1ec89a338424b5eb617fa568a76f14b45 diff --git a/mex/build/matlab/configure.ac b/mex/build/matlab/configure.ac index bff1456e87..79115300b7 100644 --- a/mex/build/matlab/configure.ac +++ b/mex/build/matlab/configure.ac @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. -dnl Copyright © 2009-2019 Dynare Team +dnl Copyright © 2009-2020 Dynare Team dnl dnl This file is part of Dynare. dnl @@ -35,7 +35,7 @@ if test "$ax_enable_matlab" != yes -o "$ax_matlab_version_ok" != yes -o "$ax_mex AC_MSG_ERROR([MATLAB cannot be found]) fi -AX_COMPARE_VERSION([$MATLAB_VERSION], [lt], [7.9], [AC_MSG_ERROR([Your MATLAB is too old, please upgrade to version 7.9 (R2009b) at least (or disable MATLAB support with --disable-matlab).])]) +AX_COMPARE_VERSION([$MATLAB_VERSION], [lt], [8.3], [AC_MSG_ERROR([Your MATLAB is too old, please upgrade to version 8.3 (R2014a) at least (or disable MATLAB support with --disable-matlab).])]) case ${host_os} in *cygwin*) diff --git a/mex/sources/dynblas.h b/mex/sources/dynblas.h index 384b2e26fe..8215dd2ad3 100644 --- a/mex/sources/dynblas.h +++ b/mex/sources/dynblas.h @@ -8,7 +8,7 @@ * and MATLAB_VERSION (for version 7.4, define it to 0x0704). * * - * Copyright © 2009-2013 Dynare Team + * Copyright © 2009-2020 Dynare Team * * This file is part of Dynare. * @@ -29,8 +29,7 @@ #ifndef _DYNBLAS_H #define _DYNBLAS_H -/* Starting from version 7.8, MATLAB BLAS expects ptrdiff_t arguments for integers */ -#if defined(MATLAB_MEX_FILE) && MATLAB_VERSION >= 0x0708 +#if defined(MATLAB_MEX_FILE) # ifdef __cplusplus # include <cstddef> # else diff --git a/mex/sources/dynlapack.h b/mex/sources/dynlapack.h index 7e953e8637..c824570a7e 100644 --- a/mex/sources/dynlapack.h +++ b/mex/sources/dynlapack.h @@ -8,7 +8,7 @@ * and MATLAB_VERSION (for version 7.4, define it to 0x0704). * * - * Copyright © 2009-2011 Dynare Team + * Copyright © 2009-2020 Dynare Team * * This file is part of Dynare. * @@ -29,8 +29,7 @@ #ifndef _DYNLAPACK_H #define _DYNLAPACK_H -/* Starting from version 7.8, MATLAB LAPACK expects ptrdiff_t arguments for integers */ -#if defined(MATLAB_MEX_FILE) && MATLAB_VERSION >= 0x0708 +#if defined(MATLAB_MEX_FILE) # ifdef __cplusplus # include <cstddef> # else diff --git a/mex/sources/mjdgges/mjdgges.F08 b/mex/sources/mjdgges/mjdgges.F08 index 5209c01d1d..43996e5036 100644 --- a/mex/sources/mjdgges/mjdgges.F08 +++ b/mex/sources/mjdgges/mjdgges.F08 @@ -55,10 +55,6 @@ subroutine mexFunction(nlhs, plhs, nrhs, prhs) bind(c, name='mexFunction') #else real(real64), dimension(:), pointer :: gev_r, gev_i #endif -#if defined(MATLAB_MEX_FILE) && MATLAB_VERSION < 0x0904 - ! Workaround for MKL bug, see below - real(real64), dimension(:), allocatable, target :: vsl_target -#endif if (nrhs < 2 .or. nrhs > 4 .or. nlhs /= 6) then call mexErrMsgTxt("MJDGGES: takes 2, 3 or 4 input arguments and exactly 6 output arguments.") @@ -113,19 +109,7 @@ subroutine mexFunction(nlhs, plhs, nrhs, prhs) bind(c, name='mexFunction') #endif info => mxGetPr(plhs(6)) z => mxGetPr(plhs(3)) -#if defined(MATLAB_MEX_FILE) && MATLAB_VERSION < 0x0904 - ! The left Schur vectors (VSL) are normally not computed, since JOBVSL="N". - ! But old MKL versions (at least the one shipped with MATLAB R2009b/7.9, - ! which is MKL 10.1) are buggy, and passing nullptr for VSL leads to a crash. - ! Hence we need to allocate space for it. - ! The bug seems to be fixed in MATLAB R2010a/7.10 (MKL 10.2), but we use the - ! workaround for all versions < R2018a/9.4, since those share the same - ! ABI and hence the same executables. - allocate(vsl_target(n1*n1)) - vsl => vsl_target -#else vsl => null() -#endif ! Copy input matrices, since we can’t modify them associate (a => mxGetPr(prhs(1)), b => mxGetPr(prhs(2))) diff --git a/tests/Makefile.am b/tests/Makefile.am index 14baa19a1a..39caeb54d2 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -832,7 +832,6 @@ EXTRA_DIST = \ block_bytecode/run_ls2003.m \ bvar_a_la_sims/bvar_sample.m \ dates/fsdat_simul.m \ - dates/data_uav.xls \ dates/data_uav.xlsx \ external_function/extFunDeriv.m \ external_function/extFunNoDerivs.m \ @@ -842,7 +841,6 @@ EXTRA_DIST = \ expectations/expectation_ss_old_steadystate.m \ filter_step_ahead/trend_cycle_decomposition_data.m \ steady_state/walsh1_old_ss_steadystate.m \ - data/test.xls \ data/test.xlsx \ gsa/morris/nk_est_data.m \ gsa/data_ca1.m \ @@ -877,7 +875,6 @@ EXTRA_DIST = \ ms-sbvar/archive-files/specification_2v2c.dat \ recursive/data_ca1.m \ recursive/data_ca1_csv.csv \ - recursive/data_ca1_xls.xls \ recursive/data_ca1_xls.xlsx \ kalman_filter_smoother/fsdat_simul.m \ kalman/lik_init/fs2000_common.inc \ diff --git a/tests/analytic_derivatives/BrockMirman_PertParamsDerivs.mod b/tests/analytic_derivatives/BrockMirman_PertParamsDerivs.mod index e2b407c492..4d2809c678 100644 --- a/tests/analytic_derivatives/BrockMirman_PertParamsDerivs.mod +++ b/tests/analytic_derivatives/BrockMirman_PertParamsDerivs.mod @@ -125,10 +125,6 @@ end; calib_params = M_.params; calib_Sigma_e = M_.Sigma_e; -/* Skip test under MATLAB R2009b - MATLAB crashes, most likely due to an internal bug */ -if isoctave || ~matlab_ver_less_than('7.10') - stoch_simul(order=@{ORDER},nograph,irf=0,periods=0); identification(order=@{ORDER},nograph,no_identification_strength); @@ -475,5 +471,3 @@ for jj = 1:2 end end end - -end % Skip test under old MATLAB diff --git a/tests/bgp/nk-1/nk.mod b/tests/bgp/nk-1/nk.mod index aa0c3721a9..22e877532d 100644 --- a/tests/bgp/nk-1/nk.mod +++ b/tests/bgp/nk-1/nk.mod @@ -21,7 +21,7 @@ end; verbatim; bgp.write(M_); - if isoctave || matlab_ver_less_than('8.1') + if isoctave options = optimset('Display', 'iter', '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); diff --git a/tests/bgp/ramsey-1/ramsey.mod b/tests/bgp/ramsey-1/ramsey.mod index 54e71e5837..0a66aa14f1 100644 --- a/tests/bgp/ramsey-1/ramsey.mod +++ b/tests/bgp/ramsey-1/ramsey.mod @@ -16,7 +16,7 @@ end; verbatim; bgp.write(M_); - if isoctave || matlab_ver_less_than('8.1') + if isoctave options = optimset('Display', 'iter', '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); diff --git a/tests/bgp/solow-1/solow.mod b/tests/bgp/solow-1/solow.mod index 7ef45993fc..e4d9fa8be8 100644 --- a/tests/bgp/solow-1/solow.mod +++ b/tests/bgp/solow-1/solow.mod @@ -45,7 +45,7 @@ verbatim; GY = NaN(MC,1); GK = NaN(MC,1); EG = NaN(MC,1); - if isoctave || matlab_ver_less_than('8.1') + if isoctave options = optimset('Display', 'off', '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); diff --git a/tests/conditional_variance_decomposition/example1.mod b/tests/conditional_variance_decomposition/example1.mod index e53ea53824..039fa99ab4 100644 --- a/tests/conditional_variance_decomposition/example1.mod +++ b/tests/conditional_variance_decomposition/example1.mod @@ -76,7 +76,7 @@ for i=1:nvar SubsetOfVariables(i) = i_tmp; end -if isoctave || matlab_ver_less_than('8.1') +if isoctave [observable_pos,index_observables,index_subset]=intersect_stable(SubsetOfVariables,options_.varobs_id); else [observable_pos,index_observables,index_subset]=intersect(SubsetOfVariables,options_.varobs_id,'stable'); @@ -114,7 +114,7 @@ if max(abs(sum(oo_.variance_decomposition,2)-100))>2 error(['Variance decomposition at order ',num2str(options_.order),' does not work']) end -if isoctave || matlab_ver_less_than('8.1') +if isoctave [observable_pos,index_observables,index_subset]=intersect_stable(SubsetOfVariables,options_.varobs_id); else [observable_pos,index_observables,index_subset]=intersect(SubsetOfVariables,options_.varobs_id,'stable'); diff --git a/tests/data/mod1a.mod b/tests/data/mod1a.mod index f475bc52c0..a2f0ff9512 100644 --- a/tests/data/mod1a.mod +++ b/tests/data/mod1a.mod @@ -20,8 +20,4 @@ end; varobs dx dy; check; -if isoctave || ~matlab_ver_less_than('7.14') % xlsread is able to read XLSX without Excel installed since R2012a estimation(datafile='test.xlsx',nobs=1000,mh_replic=2000,mh_jscale=1.3); -else -estimation(datafile='test.xls',nobs=1000,mh_replic=2000,mh_jscale=1.3); -end diff --git a/tests/data/test.xls b/tests/data/test.xls deleted file mode 100644 index 0855a60d64b2efed348503f2e765c4378350ac7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62464 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 diff --git a/tests/dates/data_uav.xls b/tests/dates/data_uav.xls deleted file mode 100644 index d35bdc3ba9e5bc6932d3c5e3b5349f8471bfad41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9216 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 M%x(}(j2>kB0XMf5BLDyZ diff --git a/tests/dates/dseries_interact.mod b/tests/dates/dseries_interact.mod index 50cc5b51db..929b1b4894 100644 --- a/tests/dates/dseries_interact.mod +++ b/tests/dates/dseries_interact.mod @@ -41,17 +41,9 @@ varobs log_nn; %reading Excel sheet from column A on creates quarterly dseries starting in %1950 -if isoctave || ~matlab_ver_less_than('7.14') % xlsread is able to read XLSX without Excel installed since R2012a estimation(first_obs=2,datafile='data_uav.xlsx', xls_sheet=Tabelle1, xls_range=a1:b54, mh_replic=2, mh_nblocks=1, mh_jscale=1.1, mh_drop=0.8, plot_priors=0, smoother) log_nn nn hh ; -else -estimation(first_obs=2,datafile='data_uav.xls', xls_sheet=Tabelle1, xls_range=a1:b54, mh_replic=2, mh_nblocks=1, mh_jscale=1.1, mh_drop=0.8, plot_priors=0, smoother) log_nn nn hh ; -end shock_decomposition( parameter_set=posterior_median ) nn hh; %reading Excel sheet from column B on creates annual dseries starting with 1 -if isoctave || ~matlab_ver_less_than('7.14') % xlsread is able to read XLSX without Excel installed since R2012a estimation(first_obs=2,datafile='data_uav.xlsx', xls_sheet=Tabelle1, xls_range=b1:b54, mh_replic=2, mh_nblocks=1, mh_jscale=1.1, mh_drop=0.8, plot_priors=0, smoother) log_nn nn hh ; -else -estimation(first_obs=2,datafile='data_uav.xls', xls_sheet=Tabelle1, xls_range=b1:b54, mh_replic=2, mh_nblocks=1, mh_jscale=1.1, mh_drop=0.8, plot_priors=0, smoother) log_nn nn hh ; -end shock_decomposition( parameter_set=posterior_median ) nn hh; diff --git a/tests/identification/LindeTrabandt/LindeTrabandt2019_xfail.mod b/tests/identification/LindeTrabandt/LindeTrabandt2019_xfail.mod index 9494da438e..1dcf57b2de 100644 --- a/tests/identification/LindeTrabandt/LindeTrabandt2019_xfail.mod +++ b/tests/identification/LindeTrabandt/LindeTrabandt2019_xfail.mod @@ -370,10 +370,6 @@ steady; resid; check; -/* Skip test under MATLAB R2009b - MATLAB crashes, most likely due to an internal bug */ -if isoctave || ~matlab_ver_less_than('7.10') - identification(order=1,no_identification_strength,analytic_derivation_mode= 0,ar=5); %works %identification(no_identification_strength,analytic_derivation_mode= 1,ar=5); %works, this takes the longest due to Kronecker products options_.dynatol.x = 1e-9; @@ -382,7 +378,3 @@ identification(order=1,no_identification_strength,analytic_derivation_mode=-2,ar options_.dynatol.x = 1e-5; %this is the default value identification(order=1,no_identification_strength,analytic_derivation_mode=-1,ar=5); %works only if GBAR_o_YBAR is uncommented identification(order=1,no_identification_strength,analytic_derivation_mode=-2,ar=5); %works only if GBAR_o_YBAR is uncommented - -else % Skip test under old MATLAB - error('Test failed as expected') -end diff --git a/tests/identification/kim/kim2.mod b/tests/identification/kim/kim2.mod index 48697badd9..6322b8da44 100644 --- a/tests/identification/kim/kim2.mod +++ b/tests/identification/kim/kim2.mod @@ -81,10 +81,6 @@ end; varobs c i; -/* Skip test under MATLAB R2009b - MATLAB crashes, most likely due to an internal bug */ -if isoctave || ~matlab_ver_less_than('7.10') - identification(advanced=1,max_dim_cova_group=3); //varobs c i lam; //to check if observing lam identifies phi and theta //identification(ar=1,advanced=1,max_dim_cova_group=3,prior_mc=250); @@ -93,5 +89,3 @@ identification(advanced=1,max_dim_cova_group=3); estim_params_=[]; identification(advanced=1,max_dim_cova_group=3); - -end diff --git a/tests/optimizers/fs2000_3.mod b/tests/optimizers/fs2000_3.mod index 09d2c59a5e..5efc98d2a4 100644 --- a/tests/optimizers/fs2000_3.mod +++ b/tests/optimizers/fs2000_3.mod @@ -1,7 +1,5 @@ @#include "fs2000.common.inc" -% Skip the test under R2009b, because fminunc fails due to Inf value. -% It remains to be determined in which version it started to work. -if exist('fminunc','file') && (isoctave || ~matlab_ver_less_than('7.10')) +if exist('fminunc','file') estimation(mode_compute=3,order=1, datafile='../fs2000/fsdat_simul', nobs=192, mh_replic=0); end diff --git a/tests/recursive/data_ca1_xls.xls b/tests/recursive/data_ca1_xls.xls deleted file mode 100644 index 062baaeaa9512d5cc7755a6fa06df9aa30f4c27e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15872 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 diff --git a/tests/recursive/ls2003_bayesian_xls.mod b/tests/recursive/ls2003_bayesian_xls.mod index 0fb926123c..c2795e475e 100644 --- a/tests/recursive/ls2003_bayesian_xls.mod +++ b/tests/recursive/ls2003_bayesian_xls.mod @@ -61,8 +61,4 @@ stderr e_ys,inv_gamma_pdf,1.2533,0.6551; stderr e_pies,inv_gamma_pdf,1.88,0.9827; end; -if isoctave || ~matlab_ver_less_than('7.14') % xlsread is able to read XLSX without Excel installed since R2012a estimation(datafile='data_ca1_xls.xlsx',first_obs=8,nobs=[76 79],mh_nblocks=1,prefilter=1,mh_jscale=0.5,mh_replic=2000,forecast=8) y_obs R_obs pie_obs dq de; -else -estimation(datafile='data_ca1_xls.xls',first_obs=8,nobs=[76 79],mh_nblocks=1,prefilter=1,mh_jscale=0.5,mh_replic=2000,forecast=8) y_obs R_obs pie_obs dq de; -end diff --git a/tests/run_all_unitary_tests.m b/tests/run_all_unitary_tests.m index a2d21ba65d..e9722569f8 100644 --- a/tests/run_all_unitary_tests.m +++ b/tests/run_all_unitary_tests.m @@ -39,7 +39,7 @@ if isoctave end % Set random seed, for reproducibility -if isoctave || matlab_ver_less_than('7.12') +if isoctave randn('state',1); rand('state',1); else diff --git a/windows/README.txt b/windows/README.txt index f7608c602e..af24e921ba 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 requires MATLAB® version 7.9 (R2009b) or above. With older versions of +Dynare requires MATLAB® version 8.3 (R2014a) or above. With older versions of MATLAB®, it may fail or give unexpected results. 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 b402d1c2d1..a4f39ce002 100755 --- a/windows/build.sh +++ b/windows/build.sh @@ -108,7 +108,7 @@ cp dynare++/src/dynare++.exe dynare++/32-bit/ ## Note that we do out-of-tree compilation, since we want to do these in ## parallel -# Create Windows 32-bit DLL binaries for MATLAB ≥ R2009b +# Create Windows 32-bit DLL binaries for MATLAB ≥ R2014a build_windows_matlab_mex_32 () { mkdir -p "$TMP_DIRECTORY"/matlab-win32/ @@ -118,18 +118,18 @@ build_windows_matlab_mex_32 () --with-gsl="$LIB32_MSYS2" \ --with-matio="$LIB32_MSYS2" \ --with-slicot="$LIB32"/Slicot/without-underscore \ - --with-matlab="$ROOT_DIRECTORY"/deps/matlab32/R2009b \ - MATLAB_VERSION=R2009b \ + --with-matlab="$ROOT_DIRECTORY"/deps/matlab32/R2014a \ + MATLAB_VERSION=R2014a \ MEXEXT=mexw32 \ PACKAGE_VERSION="$VERSION" \ PACKAGE_STRING="dynare $VERSION" make -j"$NTHREADS" all i686-w64-mingw32-strip -- **/*.mexw32 - mkdir -p "$ROOT_DIRECTORY"/../mex/matlab/win32-7.9-8.6 - mv -- **/*.mexw32 "$ROOT_DIRECTORY"/../mex/matlab/win32-7.9-8.6 + mkdir -p "$ROOT_DIRECTORY"/../mex/matlab/win32-8.3-8.6 + mv -- **/*.mexw32 "$ROOT_DIRECTORY"/../mex/matlab/win32-8.3-8.6 } -# Create Windows 64-bit DLL binaries for MATLAB ≥ R2009b and ≤ R2017b +# Create Windows 64-bit DLL binaries for MATLAB ≥ R2014a and ≤ R2017b build_windows_matlab_mex_64_a () { mkdir -p "$TMP_DIRECTORY"/matlab-win64-a/ @@ -139,15 +139,15 @@ build_windows_matlab_mex_64_a () --with-gsl="$LIB64_MSYS2" \ --with-matio="$LIB64_MSYS2" \ --with-slicot="$LIB64"/Slicot/without-underscore \ - --with-matlab="$ROOT_DIRECTORY"/deps/matlab64/R2009b \ - MATLAB_VERSION=R2009b \ + --with-matlab="$ROOT_DIRECTORY"/deps/matlab64/R2014a \ + MATLAB_VERSION=R2014a \ MEXEXT=mexw64 \ PACKAGE_VERSION="$VERSION" \ PACKAGE_STRING="dynare $VERSION" make -j"$NTHREADS" all x86_64-w64-mingw32-strip -- **/*.mexw64 - mkdir -p "$ROOT_DIRECTORY"/../mex/matlab/win64-7.9-9.3 - mv -- **/*.mexw64 "$ROOT_DIRECTORY"/../mex/matlab/win64-7.9-9.3 + mkdir -p "$ROOT_DIRECTORY"/../mex/matlab/win64-8.3-9.3 + mv -- **/*.mexw64 "$ROOT_DIRECTORY"/../mex/matlab/win64-8.3-9.3 } # Create Windows 64-bit DLL binaries for MATLAB ≥ R2018a diff --git a/windows/deps/Makefile b/windows/deps/Makefile index e51b9b9fbb..82c3968d97 100644 --- a/windows/deps/Makefile +++ b/windows/deps/Makefile @@ -1,4 +1,4 @@ -# Copyright © 2017-2019 Dynare Team +# Copyright © 2017-2020 Dynare Team # # This file is part of Dynare. # @@ -195,13 +195,13 @@ tarballs/matlab%.tar.xz: matlab32: tarballs/matlab32-$(MATLAB32_VERSION).tar.xz rm -rf $@ mkdir -p $@ - tar xf $< --directory $@ --strip-components=1 + tar xf $< --directory $@ touch $@ matlab64: tarballs/matlab64-$(MATLAB64_VERSION).tar.xz rm -rf $@ mkdir -p $@ - tar xf $< --directory $@ --strip-components=1 + tar xf $< --directory $@ touch $@ matlab: matlab32 matlab64 diff --git a/windows/deps/versions.mk b/windows/deps/versions.mk index 811ee558fd..514d209a61 100644 --- a/windows/deps/versions.mk +++ b/windows/deps/versions.mk @@ -5,8 +5,8 @@ OCTAVE_VERSION = 5.2.0 OCTAVE_W32_BUILD = _1 OCTAVE_W64_BUILD = _1 -MATLAB32_VERSION = 20181204 -MATLAB64_VERSION = 20181204 +MATLAB32_VERSION = 20200407 +MATLAB64_VERSION = 20200407 ### MSYS2 packages diff --git a/windows/dynare.nsi b/windows/dynare.nsi index 04a4278b64..8e8bea563b 100644 --- a/windows/dynare.nsi +++ b/windows/dynare.nsi @@ -91,9 +91,9 @@ SectionEnd SectionGroup "Dynare support for 64-bit MATLAB and Octave" -Section "MEX files for MATLAB 64-bit, version 7.9 to 9.3 (R2009b to R2017b)" - SetOutPath $INSTDIR\mex\matlab\win64-7.9-9.3 - File ..\mex\matlab\win64-7.9-9.3\*.mexw64 +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 ..\mex\matlab\win64-8.3-9.3\*.mexw64 SectionEnd Section "MEX files for MATLAB 64-bit, version 9.4 to 9.8 (R2018a to R2020a)" @@ -116,9 +116,9 @@ SectionGroupEnd SectionGroup "Dynare support for 32-bit MATLAB and Octave" -Section "MEX files for MATLAB 32-bit, version 7.9 to 8.6 (R2009b to R2015b)" - SetOutPath $INSTDIR\mex\matlab\win32-7.9-8.6 - File ..\mex\matlab\win32-7.9-8.6\*.mexw32 +Section "MEX files for MATLAB 32-bit, version 8.3 to 8.6 (R2014a to R2015b)" + SetOutPath $INSTDIR\mex\matlab\win32-8.3-8.6 + File ..\mex\matlab\win32-8.3-8.6\*.mexw32 SectionEnd Section "MEX files for Octave 5.2.0 (32-bit)" -- GitLab