From e8d6dd1ef3393abe2c9179ec25def1a7bd7dc783 Mon Sep 17 00:00:00 2001 From: sebastien Date: Mon, 7 Jul 2008 21:48:12 +0000 Subject: [PATCH] v4 matlab: use my_ordeig instead of ordeig for Octave and for Matlab < 7.0.1 git-svn-id: https://www.dynare.org/svn/dynare/dynare_v4@1938 ac1d8469-bf42-47a9-8791-bf33cf982152 --- matlab/DsgeLikelihood.m | 12 ++++++++++-- matlab/DsgeSmoother.m | 12 ++++++++++-- matlab/lyapunov_symm.m | 8 ++++---- matlab/my_ordeig.m | 4 ++-- 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/matlab/DsgeLikelihood.m b/matlab/DsgeLikelihood.m index 0c35e80d9..b0f54756b 100644 --- a/matlab/DsgeLikelihood.m +++ b/matlab/DsgeLikelihood.m @@ -163,9 +163,17 @@ function [fval,cost_flag,ys,trend_coeff,info] = DsgeLikelihood(xparam1,gend,data elseif options_.lik_init == 3 % Diffuse Kalman filter kalman_algo = 3; [QT,ST] = schur(T); - e1 = abs(ordeig(ST)) > 2-options_.qz_criterium; + if exist('OCTAVE_VERSION') || matlab_ver_less_than('7.0.1') + e1 = abs(my_ordeig(ST)) > 2-options_.qz_criterium; + else + e1 = abs(ordeig(ST)) > 2-options_.qz_criterium; + end [QT,ST] = ordschur(QT,ST,e1); - k = find(abs(ordeig(ST)) > 2-options_.qz_criterium); + if exist('OCTAVE_VERSION') || matlab_ver_less_than('7.0.1') + k = find(abs(my_ordeig(ST)) > 2-options_.qz_criterium); + else + k = find(abs(ordeig(ST)) > 2-options_.qz_criterium); + end nk = length(k); nk1 = nk+1; Pinf = zeros(np,np); diff --git a/matlab/DsgeSmoother.m b/matlab/DsgeSmoother.m index 8faafe7ea..bd18ae796 100644 --- a/matlab/DsgeSmoother.m +++ b/matlab/DsgeSmoother.m @@ -104,9 +104,17 @@ function [alphahat,etahat,epsilonhat,ahat,SteadyState,trend_coeff,aK,T,R,P,PK,d, elseif options_.lik_init == 3 % Diffuse Kalman filter kalman_algo = 3; [QT,ST] = schur(T); - e1 = abs(ordeig(ST)) > 2-options_.qz_criterium; + if exist('OCTAVE_VERSION') || matlab_ver_less_than('7.0.1') + e1 = abs(my_ordeig(ST)) > 2-options_.qz_criterium; + else + e1 = abs(ordeig(ST)) > 2-options_.qz_criterium; + end [QT,ST] = ordschur(QT,ST,e1); - k = find(abs(ordeig(ST)) > 2-options_.qz_criterium); + if exist('OCTAVE_VERSION') || matlab_ver_less_than('7.0.1') + k = find(abs(my_ordeig(ST)) > 2-options_.qz_criterium); + else + k = find(abs(ordeig(ST)) > 2-options_.qz_criterium); + end nk = length(k); nk1 = nk+1; Pinf = zeros(np,np); diff --git a/matlab/lyapunov_symm.m b/matlab/lyapunov_symm.m index 8227a22cd..1728518d9 100644 --- a/matlab/lyapunov_symm.m +++ b/matlab/lyapunov_symm.m @@ -16,7 +16,7 @@ function [x,u]=lyapunov_symm(a,b,qz_criterium) % uses reordered Schur decomposition % % SPECIAL REQUIREMENTS -% needs Matlab version with ordeig function +% needs Matlab >= 7.0.1 for ordeig function (otherwise uses my_ordeig) % % part of DYNARE, copyright Dynare Team (2006-2008) % Gnu Public License @@ -30,10 +30,10 @@ function [x,u]=lyapunov_symm(a,b,qz_criterium) return end [u,t] = schur(a); - if exist('ordeig','builtin') - e1 = abs(ordeig(t)) > 2-qz_criterium; - else + if exist('OCTAVE_VERSION') || matlab_ver_less_than('7.0.1') e1 = abs(my_ordeig(t)) > 2-qz_criterium; + else + e1 = abs(ordeig(t)) > 2-qz_criterium; end k = sum(e1); if exist('ordschur','builtin') diff --git a/matlab/my_ordeig.m b/matlab/my_ordeig.m index 5e6297696..fe8cddc70 100644 --- a/matlab/my_ordeig.m +++ b/matlab/my_ordeig.m @@ -23,10 +23,10 @@ function eigs = my_ordeig(t) break; elseif t(i+1,i) == 0 eigs(i) = t(i,i); + i = i+1; else k = i:i+1; eigs(k) = eig(t(k,k)); - i = i+1; + i = i+2; end - i = i+1; end