Merge branch 'master' into ecb-master

time-shift
Houtan Bastani 2018-05-17 17:07:49 +02:00
commit 689a9880f4
8 changed files with 5 additions and 139 deletions

View File

@ -386,7 +386,7 @@ Adjemian (Université du Maine, Gains and Cepremap), Houtan Bastani
(Université du Maine, Gains and Cepremap), Junior Maih (Norges Bank),
Ferhat Mihoubi (Université Paris-Est Créteil, Epee and Cepremap), George
Perendia, Johannes Pfeifer (University of Cologne), Marco Ratto (European Commission, Joint Research Centre - JRC)
and Sébastien Villemot (CEPREMAP).
and Sébastien Villemot (Cepremap).
Increasingly, the developer base is expanding, as tools developed by
researchers outside of Cepremap are integrated into Dynare. Financial
support is provided by Cepremap, Banque de France and DSGE-net (an

View File

@ -176,13 +176,9 @@ end
G0pi=eye(n+FL_RANK+NX);
try
% In Matlab: [aa bb q z v w] = qz(a,b) s.t. qaz = aa, qbz = bb %
% In Octave: [aa bb q z v w] = qz(a,b) s.t. q'az = aa, q'bz=bb %
% and qzcomplex() extension based on lapack zgges produces same
% qz output for Octave as Matlab qz() does for Matlab thus:
if isoctave
[a b q z]=qzcomplex(G0pi,G1pi);
q=q';
% Need to force QZ complex on Octave (otherwise it returns the real one)
[a b q z]=qz(complex(G0pi),complex(G1pi));
else
[a b q z]=qz(G0pi,G1pi);
end

View File

@ -2,7 +2,7 @@ ACLOCAL_AMFLAGS = -I ../../../m4
# libdynare++ must come before gensylv, k_order_perturbation, dynare_simul_
if DO_SOMETHING
SUBDIRS = mjdgges kronecker bytecode libdynare++ gensylv qzcomplex block_kalman_filter sobol local_state_space_iterations
SUBDIRS = mjdgges kronecker bytecode libdynare++ gensylv block_kalman_filter sobol local_state_space_iterations
if HAVE_MATIO
SUBDIRS += k_order_perturbation dynare_simul_

View File

@ -132,7 +132,6 @@ AC_CONFIG_FILES([Makefile
gensylv/Makefile
k_order_perturbation/Makefile
dynare_simul_/Makefile
qzcomplex/Makefile
kalman_steady_state/Makefile
ms_sbvar/Makefile
block_kalman_filter/Makefile

View File

@ -1,6 +0,0 @@
EXEEXT = .oct
include ../mex.am
mex_PROGRAMS = qzcomplex
nodist_qzcomplex_SOURCES = $(top_srcdir)/../../sources/qzcomplex/qzcomplex.cc

View File

@ -6,7 +6,6 @@ EXTRA_DIST = \
mjdgges \
kronecker \
bytecode \
qzcomplex \
k_order_perturbation \
kalman_steady_state \
ms-sbvar \

View File

@ -1,122 +0,0 @@
/*
* Oct-file for bringing the complex QZ decomposition to Octave.
* Simple wrapper around LAPACK's zgges.
*
* Written by Sébastien Villemot <sebastien@dynare.org>.
*/
/*
* Copyright (C) 2010-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/>.
*/
#ifdef __MINGW32__
# define __CROSS_COMPILATION__
#endif
#ifdef __MINGW64__
# define __CROSS_COMPILATION__
#endif
#ifdef __CROSS_COMPILATION__
# define M_PI 3.14159265358979323846
#endif
#include <octave/oct.h>
#include <octave/f77-fcn.h>
extern "C"
{
F77_RET_T
F77_FUNC(zgges, ZGGES) (F77_CONST_CHAR_ARG_DECL, F77_CONST_CHAR_ARG_DECL, F77_CONST_CHAR_ARG_DECL,
octave_idx_type (*)(Complex *, Complex *), const octave_idx_type &,
Complex *, const octave_idx_type &, Complex *, const octave_idx_type &,
octave_idx_type &, Complex *, Complex *, Complex *, const octave_idx_type &,
Complex *, const octave_idx_type &, Complex *, const octave_idx_type &,
double *, octave_idx_type *, octave_idx_type &);
}
DEFUN_DLD(qzcomplex, args, nargout, "-*- texinfo -*-\n\
@deftypefn {Loadable Function} [ @var{aa}, @var{bb}, @var{q}, @var{z} ] = qzcomplex (@var{a}, @var{b})\n\
\n\
Computes the complex QZ decomposition of @math{(A, B)}, satisfying:\n\
@example\n\
AA = Q'*A*Z, BB = Q'*B*Z\n\
@end example\n\
@end deftypefn\n\
")
{
int nargin = args.length();
octave_value_list retval;
if (nargin != 2 || nargout != 4)
{
print_usage();
return retval;
}
ComplexMatrix A = args(0).complex_matrix_value();
ComplexMatrix B = args(1).complex_matrix_value();
if (error_state)
return retval;
dim_vector dimA = A.dims();
dim_vector dimB = B.dims();
octave_idx_type n = dimA(0);
if (n != dimA(1) || n != dimB(0) || n != dimB(1))
{
error("qzcomplex: input matrices must be square and of same size");
return retval;
}
octave_idx_type lwork = 2*n;
OCTAVE_LOCAL_BUFFER(Complex, alpha, n);
OCTAVE_LOCAL_BUFFER(Complex, beta, n);
OCTAVE_LOCAL_BUFFER(Complex, work, lwork);
OCTAVE_LOCAL_BUFFER(double, rwork, 8*n);
ComplexMatrix vsl(n, n), vsr(n, n);
octave_idx_type sdim, info;
F77_XFCN(zgges, ZGGES, (F77_CONST_CHAR_ARG("V"), F77_CONST_CHAR_ARG("V"),
F77_CONST_CHAR_ARG("N"), NULL,
n, A.fortran_vec(), n, B.fortran_vec(), n, sdim,
alpha, beta, vsl.fortran_vec(), n, vsr.fortran_vec(), n,
work, lwork, rwork, NULL, info));
if (info != 0)
{
error("qzcomplex: zgges failed");
return retval;
}
retval(0) = octave_value(A);
retval(1) = octave_value(B);
retval(2) = octave_value(vsl);
retval(3) = octave_value(vsr);
return retval;
}
/*
%!test
%! A = [ 1 2 3+1i; 4 5-1i 0; -1 -5 3];
%! B = [ -2 -8i 4; 1 5+3i 5; 7 -10 -2];
%! [AA,BB,Q,Z] = qzcomplex(A,B);
%! assert(Q'*A*Z, AA, sqrt(eps))
%! assert(Q'*B*Z, BB, sqrt(eps))
*/

@ -1 +1 @@
Subproject commit 1ba023e37d6ee7fc8d393840e42a4542274efbb7
Subproject commit dd8b05e2f00bb8ad3ef88d28c922760676f760b0