Commit a22d1d41 authored by MichelJuillard's avatar MichelJuillard
Browse files

replaced rank() by rcond() in evaluating whether Z22 is full rank in

checking Blanchard and Kahn conditions with CHECK
parent 205b455a
......@@ -86,7 +86,7 @@ end;
n_explod = nnz(abs(eigenvalues_) > options.qz_criterium);
result = 0;
if (nyf== n_explod) && (dr.rank == nyf)
if (nyf== n_explod) && (dr.full_rank)
result = 1;
end
......@@ -99,7 +99,7 @@ if options.noprint == 0
disp(sprintf('\nThere are %d eigenvalue(s) larger than 1 in modulus ', n_explod));
disp(sprintf('for %d forward-looking variable(s)',nyf));
disp(' ')
if dr.rank == nyf && nyf == n_explod
if result
disp('The rank condition is verified.')
else
disp('The rank conditions ISN''T verified!')
......
......@@ -72,7 +72,7 @@ else
chck = 0;
end;
mexErrCheck('bytecode', chck);
dr.rank = 0;
dr.full_rank = 1;
dr.eigval = [];
dr.nstatic = 0;
dr.nfwrd = 0;
......@@ -151,7 +151,6 @@ for i = 1:Size;
data(i).rank = 0;
end
dr.eigval = [dr.eigval ; data(i).eigval];
dr.rank = dr.rank + data(i).rank;
%First order approximation
if task ~= 1
[tmp1, tmp2, indx_c] = find(M_.block_structure.block(i).lead_lag_incidence(2,:));
......@@ -221,12 +220,14 @@ for i = 1:Size;
indx_c = M_.block_structure.block(i).lead_lag_incidence(3,indx_r);
data(i).eigval = 1 ./ diag(jacob(indx_r, indx_c));
data(i).rank = sum(abs(data(i).eigval) > 0);
full_rank = (rcond(jacob(indx_r, indx_c)) > 1e-9);
else
data(i).eigval = [];
data(i).rank = 0;
full_rank = 1;
end
dr.eigval = [dr.eigval ; data(i).eigval];
dr.rank = dr.rank + data(i).rank;
dr.full_rank = dr.full_rank && full_rank;
%First order approximation
if task ~= 1
if (maximum_lag > 0)
......@@ -310,11 +311,13 @@ for i = 1:Size;
if maximum_lead > 0 && n_fwrd > 0
data(i).eigval = - jacob(1 , n_pred + n - n_fwrd + 1 : n_pred + n) / jacob(1 , n_pred + n + 1 : n_pred + n + n_fwrd) ;
data(i).rank = sum(abs(data(i).eigval) > 0);
full_rank = (abs(jacob(1,n_pred+n+1: n_pred_n+n_fwrd)) > 1e-9);
else
data(i).eigval = [];
data(i).rank = 0;
full_rank = 1;
end;
dr.rank = dr.rank + data(i).rank;
dr.full_rank = dr.full_rank && full_rank;
dr.eigval = [dr.eigval ; data(i).eigval];
case 6
%% ------------------------------------------------------------------
......@@ -323,11 +326,15 @@ for i = 1:Size;
data(i).eigval = eig(- jacob(: , 1 : n_pred) / ...
jacob(: , (n_pred + n_static + 1 : n_pred + n_static + n_pred )));
data(i).rank = 0;
full_rank = (rcond(jacob(: , (n_pred + n_static + 1 : n_pred ...
+ n_static + n_pred ))) > 1e-9);
else
data(i).eigval = [];
data(i).rank = 0;
full_rank = 1;
end;
dr.eigval = [dr.eigval ; data(i).eigval];
dr.full_rank = dr.full_rank && full_rank;
if task ~= 1
if (maximum_lag > 0)
ghx = - jacob(: , 1 : n_pred) / jacob(: , n_pred + n_static + 1 : n_pred + n_static + n_pred + n_both);
......@@ -390,11 +397,14 @@ for i = 1:Size;
data(i).eigval = eig(- jacob(: , n_pred + n - n_fwrd + 1: n_pred + n))/ ...
jacob(: , n_pred + n + 1 : n_pred + n + n_fwrd);
data(i).rank = sum(abs(data(i).eigval) > 0);
full_rank = (rcond(jacob(: , n_pred + n + 1 : n_pred + n + ...
n_fwrd)) > 1e-9);
else
data(i).eigval = [];
data(i).rank = 0;
full_rank = 1;
end;
dr.rank = dr.rank + data(i).rank;
dr.full_rank = dr.full_rank && full_rank;
dr.eigval = [dr.eigval ; data(i).eigval];
case {5,8}
%% ------------------------------------------------------------------
......@@ -450,7 +460,8 @@ for i = 1:Size;
nba = nd-sdim;
if task == 1
data(i).rank = rank(w(nd-nyf+1:end,nd-nyf+1:end));
dr.rank = dr.rank + data(i).rank;
dr.full_rank = dr.full_rank && (rcond(w(nd-nyf+1:end,nd- ...
nyf+1:end)) > 1e-9);
if ~exist('OCTAVE_VERSION','builtin')
data(i).eigval = eig(E,D);
end
......
......@@ -233,7 +233,11 @@ else
nba = nd-sdim;
if task == 1
dr.rank = rank(w(npred+nboth+1:end,npred+nboth+1:end));
if rcond(w(npred+nboth+1:end,npred+nboth+1:end)) < 1e-9
dr.full_rank = 0;
else
dr.full_rank = 1;
end
% Under Octave, eig(A,B) doesn't exist, and
% lambda = qz(A,B) won't return infinite eigenvalues
if ~exist('OCTAVE_VERSION')
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment