Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Dóra Kocsis
dynare
Commits
a22d1d41
Commit
a22d1d41
authored
Sep 10, 2012
by
MichelJuillard
Browse files
replaced rank() by rcond() in evaluating whether Z22 is full rank in
checking Blanchard and Kahn conditions with CHECK
parent
205b455a
Changes
3
Hide whitespace changes
Inline
Side-by-side
matlab/check.m
View file @
a22d1d41
...
...
@@ -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
!
'
)
...
...
matlab/dr_block.m
View file @
a22d1d41
...
...
@@ -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
...
...
matlab/dyn_first_order_solver.m
View file @
a22d1d41
...
...
@@ -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
'
)
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment