From 2d4d93df137cb962a01da7125f3c7333fa28c0a0 Mon Sep 17 00:00:00 2001 From: sebastien Date: Mon, 7 Jul 2008 21:38:43 +0000 Subject: [PATCH] v4 my_ordeig.m: fixed bug with 2x2 blocks: the second complex eigenvalue was not the conjugate of the first! (bug caused by manual incrementation of the index of a for loop; a while loop solves the issue) git-svn-id: https://www.dynare.org/svn/dynare/dynare_v4@1937 ac1d8469-bf42-47a9-8791-bf33cf982152 --- matlab/my_ordeig.m | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/matlab/my_ordeig.m b/matlab/my_ordeig.m index 5bc93fd0c..5e6297696 100644 --- a/matlab/my_ordeig.m +++ b/matlab/my_ordeig.m @@ -1,5 +1,4 @@ -function eval = my_ordeig(t) - +function eigs = my_ordeig(t) % function eval = my_ordeig(t) % Computes the eigenvalues of a quasi-triangular matrix % @@ -7,7 +6,7 @@ function eval = my_ordeig(t) % t: quasi-triangular matrix % % OUTPUTS -% eval: eigenvalues +% eigs: eigenvalues % % SPECIAL REQUIREMENTS % none @@ -16,18 +15,18 @@ function eval = my_ordeig(t) % Gnu Public License. n = size(t,2); - eval = zeros(n,1); - for i=1:n-1 - if t(i+1,i) == 0 - eval(i) = t(i,i); - else - k = i:i+1; - eval(k) = eig(t(k,k)); + eigs = zeros(n,1); + i = 1; + while i <= n + if i == n + eigs(n) = t(n,n); + break; + elseif t(i+1,i) == 0 + eigs(i) = t(i,i); + else + k = i:i+1; + eigs(k) = eig(t(k,k)); + i = i+1; + end i = i+1; - end end - if i < n - eval(n) = t(n,n); - end - - \ No newline at end of file