diff --git a/matlab/dynare_config.m b/matlab/dynare_config.m index 4eaae0435..bcf97de2e 100644 --- a/matlab/dynare_config.m +++ b/matlab/dynare_config.m @@ -103,11 +103,6 @@ if isoctave && ~compare_versions(version(), supported_octave_version(),'>=') skipline() end -% ilu is missing in Octave < 4.0 -if isoctave && octave_ver_less_than('4.0') - p{end+1} = '/missing/ilu'; -end - % corrcoef with two outputs is missing in Octave (ticket #796) if isoctave && ~user_has_octave_forge_package('nan') p{end+1} = '/missing/corrcoef'; diff --git a/matlab/missing/ilu/ilu.m b/matlab/missing/ilu/ilu.m deleted file mode 100644 index 6e53e59df..000000000 --- a/matlab/missing/ilu/ilu.m +++ /dev/null @@ -1,37 +0,0 @@ -function [L, U, P] = ilu(A, setup) -% Partially implement function ilu using the (now deprecated) luinc - -% Copyright (C) 2013-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 . - -if nargout ~= 2 - error('Only two output arguments supported') -end -if nargin ~= 2 - error('Only two input arguments supported') -end - -if isfield(setup, 'milu') - if setup.milu == 'off' - setup.milu = 0; - else - error(['Unsupported milu: ' setup.milu ]) - end -end - -[L, U] = luinc(A, setup); -end diff --git a/mex/build/octave/Makefile.am b/mex/build/octave/Makefile.am index c83e295ec..9544e0e52 100644 --- a/mex/build/octave/Makefile.am +++ b/mex/build/octave/Makefile.am @@ -4,14 +4,6 @@ ACLOCAL_AMFLAGS = -I ../../../m4 if DO_SOMETHING SUBDIRS = mjdgges kronecker bytecode libdynare++ gensylv qzcomplex block_kalman_filter sobol local_state_space_iterations -if COMPILE_LINSOLVE -SUBDIRS += linsolve -endif - -if COMPILE_ORDSCHUR -SUBDIRS += ordschur -endif - if HAVE_MATIO SUBDIRS += k_order_perturbation dynare_simul_ endif diff --git a/mex/build/octave/configure.ac b/mex/build/octave/configure.ac index 5b0075f0f..2b98fa81d 100755 --- a/mex/build/octave/configure.ac +++ b/mex/build/octave/configure.ac @@ -33,13 +33,8 @@ if test "x$MKOCTFILE" != "x"; then LDFLAGS="`$MKOCTFILE -p LFLAGS` `$MKOCTFILE -p LDFLAGS`" OCTAVE_VERSION=`$MKOCTFILE -v 2>&1 | sed 's/mkoctfile, version //'` AX_COMPARE_VERSION([$OCTAVE_VERSION], [lt], [3.6], [AC_MSG_ERROR([Your Octave is too old, please upgrade to version 3.6 at least.])]) - AX_COMPARE_VERSION([$OCTAVE_VERSION], [ge], [3.8], [OCTAVE38=yes]) - AX_COMPARE_VERSION([$OCTAVE_VERSION], [ge], [4.0], [OCTAVE40=yes]) fi -AM_CONDITIONAL([COMPILE_LINSOLVE], [test "$OCTAVE38" != "yes"]) -AM_CONDITIONAL([COMPILE_ORDSCHUR], [test "$OCTAVE40" != "yes"]) - CFLAGS="$CFLAGS -Wall -Wno-parentheses" FFLAGS="$FFLAGS -Wall" CXXFLAGS="$CXXFLAGS -Wall -Wno-parentheses" @@ -109,18 +104,6 @@ else BUILD_MS_SBVAR_MEX_OCTAVE="no (missing GSL or MatIO library)" fi -if test -n "$MKOCTFILE" -a "$OCTAVE38" != "yes"; then - BUILD_LINSOLVE_OCTAVE="yes" -else - BUILD_LINSOLVE_OCTAVE="no (Octave >= 3.8)" -fi - -if test -n "$MKOCTFILE" -a "$OCTAVE40" != "yes"; then - BUILD_ORDSCHUR_OCTAVE="yes" -else - BUILD_ORDSCHUR_OCTAVE="no (Octave >= 4.0)" -fi - AC_ARG_ENABLE([openmp], AS_HELP_STRING([--enable-openmp], [use OpenMP for parallelization of some MEX files]), [ if test "x$enable_openmp" = "xyes"; then CPPFLAGS="$CPPFLAGS -DUSE_OMP" @@ -138,8 +121,6 @@ Binaries (with "make"): MS-SBVAR MEX files for Octave: $BUILD_MS_SBVAR_MEX_OCTAVE Kalman Steady State MEX file for Octave: $BUILD_KALMAN_STEADY_STATE_OCTAVE K-order and dynare_simul MEX for Octave: $BUILD_KORDER_DYNSIMUL_MEX_OCTAVE - Linsolve for Octave: $BUILD_LINSOLVE_OCTAVE - Ordschur for Octave: $BUILD_ORDSCHUR_OCTAVE ]) @@ -152,12 +133,10 @@ AC_CONFIG_FILES([Makefile k_order_perturbation/Makefile dynare_simul_/Makefile qzcomplex/Makefile - ordschur/Makefile kalman_steady_state/Makefile ms_sbvar/Makefile block_kalman_filter/Makefile sobol/Makefile - local_state_space_iterations/Makefile - linsolve/Makefile]) + local_state_space_iterations/Makefile]) AC_OUTPUT diff --git a/mex/build/octave/linsolve/Makefile.am b/mex/build/octave/linsolve/Makefile.am deleted file mode 100644 index 9ed25f8a2..000000000 --- a/mex/build/octave/linsolve/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -EXEEXT = .oct -include ../mex.am - -mex_PROGRAMS = linsolve - -nodist_linsolve_SOURCES = $(top_srcdir)/../../sources/linsolve/linsolve.cc diff --git a/mex/build/octave/ordschur/Makefile.am b/mex/build/octave/ordschur/Makefile.am deleted file mode 100644 index 0c121306c..000000000 --- a/mex/build/octave/ordschur/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -EXEEXT = .oct -include ../mex.am - -mex_PROGRAMS = ordschur - -nodist_ordschur_SOURCES = $(top_srcdir)/../../sources/ordschur/ordschur.cc diff --git a/mex/sources/Makefile.am b/mex/sources/Makefile.am index bcf4bedc0..6f201c506 100644 --- a/mex/sources/Makefile.am +++ b/mex/sources/Makefile.am @@ -8,13 +8,11 @@ EXTRA_DIST = \ bytecode \ qzcomplex \ k_order_perturbation \ - ordschur \ kalman_steady_state \ ms-sbvar \ block_kalman_filter \ sobol \ - local_state_space_iterations \ - linsolve + local_state_space_iterations clean-local: rm -rf `find mex/sources -name *.o` diff --git a/mex/sources/linsolve/linsolve.cc b/mex/sources/linsolve/linsolve.cc deleted file mode 100644 index c8e55eecb..000000000 --- a/mex/sources/linsolve/linsolve.cc +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Oct-file for bringing MATLAB's linsolve function to Octave. - * - * The implementation is incomplete: - * - it only knows about the TRANSA, LT, UT and SYM options - * - it only works with square matrices - * - it only works on double matrices (no single precision or complex) - * - * Written by Sébastien Villemot . - */ - -/* - * Copyright (C) 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 . - */ - -#include -#include - -DEFUN_DLD(linsolve, args, nargout, "-*- texinfo -*-\n\ -@deftypefn {Loadable Function} @var{x} = linsolve (@var{a}, @var{b})\n\ -@deftypefnx {Loadable Function} [ @var{x}, @var{r} ] = linsolve (@var{a}, @var{b})\n\ -@deftypefnx {Loadable Function} @var{x} = linsolve (@var{a}, @var{b}, @var{options})\n\ -@deftypefnx {Loadable Function} [ @var{x}, @var{r} ] = linsolve (@var{a}, @var{b}, @var{options})\n\ -\n\ -Solves the linear system @math{A*X = B} and returns @var{X}.\n\ -\n\ -Alternatively, if @var{options} is provided and has a field @code{TRANSA} equal \ -to @code{true}, then it solves the system @math{A'*X = B}.\n\ -\n\ -Also, the @code{LT} field of @var{options} (resp. the @code{UT} field) can be set \ -to @code{true} to indicate that the matrix @var{a} is lower (resp. upper) \ -triangular; similarly, the @code{SYM} field can be set to @code{true} to \ -indicate that the matrix is symmetric.\n\ -\n\ -If requested, @var{r} will contain the reciprocal condition number.\n\ -@end deftypefn\n\ -") -{ - int nargin = args.length(); - octave_value_list retval; - - if (nargin > 3 || nargin < 2 || nargout > 2) - { - print_usage(); - return retval; - } - - Matrix A = args(0).matrix_value(); - Matrix B = args(1).matrix_value(); - if (error_state) - return retval; - - dim_vector dimA = A.dims(); - dim_vector dimB = B.dims(); - - if (dimA(0) != dimB(0)) - { - error("linsolve: must have same number of lines in A and B"); - return retval; - } - - if (dimA(0) != dimA(1)) - { - error("linsolve: rectangular A not yet supported"); - return retval; - } - - MatrixType typA; - typA.mark_as_full(); - - bool transa = false; - if (nargin == 3) - { - octave_scalar_map opts = args(2).scalar_map_value(); - if (error_state) - return retval; - - octave_value tmp = opts.contents("TRANSA"); - transa = tmp.is_defined() && tmp.bool_matrix_value().elem(0); - - tmp = opts.contents("UT"); - if (tmp.is_defined() && tmp.bool_matrix_value().elem(0)) - typA.mark_as_upper_triangular(); - - tmp = opts.contents("LT"); - if (tmp.is_defined() && tmp.bool_matrix_value().elem(0)) - typA.mark_as_lower_triangular(); - - tmp = opts.contents("SYM"); - if (tmp.is_defined() && tmp.bool_matrix_value().elem(0)) - typA.mark_as_symmetric(); - } - - double rcond; - octave_idx_type info; - - retval(0) = A.solve(typA, B, info, rcond, NULL, true, transa ? blas_trans : blas_no_trans); - - if (nargout == 2) - { - if (dimB(1) > 0) - retval(1) = rcond; - else // If B has zero columns, A.solve() apparently does not compute A's rcond - retval(1) = A.rcond(); - } - - return retval; -} diff --git a/mex/sources/ordschur/ordschur.cc b/mex/sources/ordschur/ordschur.cc deleted file mode 100644 index 8289bba56..000000000 --- a/mex/sources/ordschur/ordschur.cc +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Oct-file for bringing MATLAB's ordschur function to Octave. - * Simple wrapper around LAPACK's dtrsen. - * Only supports real (double precision) decomposition. - * Only selection of eigenvalues with a boolean vector is supported. - * - * Written by Sébastien Villemot . - */ - -/* - * Copyright (C) 2010-2012 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 . - */ - -#include -#include - -extern "C" -{ - F77_RET_T - F77_FUNC(dtrsen, DTRSEN) (F77_CONST_CHAR_ARG_DECL, F77_CONST_CHAR_ARG_DECL, - const octave_idx_type *, const octave_idx_type &, - double *, const octave_idx_type &, double *, const octave_idx_type &, - double *, double *, octave_idx_type &, double &, double &, double *, - const octave_idx_type &, octave_idx_type *, - const octave_idx_type &, octave_idx_type &); -} - -DEFUN_DLD(ordschur, args, nargout, "-*- texinfo -*-\n\ -@deftypefn {Loadable Function} [ @var{us}, @var{ts} ] = ordschur (@var{u}, @var{t}, @var{select})\n\ -\n\ -Reorders the real Schur factorization @math{X = U*T*U'} so that selected\n\ -eigenvalues appear in the upper left diagonal blocks of the quasi triangular\n\ -Schur matrix @math{T}. The logical vector @var{select} specifies the selected\n\ -eigenvalues as they appear along @math{T}'s diagonal.\n\ -@end deftypefn\n\ -") -{ - int nargin = args.length(); - octave_value_list retval; - - if (nargin != 3 || nargout != 2) - { - print_usage(); - return retval; - } - - Matrix U = args(0).matrix_value(); - Matrix T = args(1).matrix_value(); - boolNDArray S = args(2).bool_array_value(); - if (error_state) - return retval; - - dim_vector dimU = U.dims(); - dim_vector dimT = T.dims(); - octave_idx_type n = dimU(0); - if (n != dimU(1) || n != dimT(0) || n != dimT(1)) - { - error("ordschur: input matrices must be square and of same size"); - return retval; - } - if (S.nelem() != n) - { - error("ordschur: selection vector has wrong size"); - return retval; - } - - octave_idx_type lwork = n, liwork = n; - OCTAVE_LOCAL_BUFFER(double, wr, n); - OCTAVE_LOCAL_BUFFER(double, wi, n); - OCTAVE_LOCAL_BUFFER(double, work, lwork); - OCTAVE_LOCAL_BUFFER(octave_idx_type, iwork, liwork); - octave_idx_type m, info; - double cond1, cond2; - OCTAVE_LOCAL_BUFFER(octave_idx_type, S2, n); - for (int i = 0; i < n; i++) - S2[i] = S(i); - - F77_XFCN(dtrsen, dtrsen, (F77_CONST_CHAR_ARG("N"), F77_CONST_CHAR_ARG("V"), - S2, n, T.fortran_vec(), n, U.fortran_vec(), n, - wr, wi, m, cond1, cond2, work, lwork, - iwork, liwork, info)); - - if (info != 0) - { - error("ordschur: dtrsen failed"); - return retval; - } - - retval(0) = octave_value(U); - retval(1) = octave_value(T); - return retval; -} - -/* - - %!test - %! A = [1 2 3 -2; 4 5 6 -5 ; 7 8 9 -5; 10 11 12 4 ]; - %! [U, T] = schur(A); - %! [US, TS] = ordschur(U, T, [ 0 0 1 1 ]); - %! assert(US*TS*US', A, sqrt(eps)) - -*/