File: SPBuild_a.m

package info (click to toggle)
dynare 4.3.0-2
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 40,640 kB
  • sloc: fortran: 82,231; cpp: 72,734; ansic: 28,874; pascal: 13,241; sh: 4,300; objc: 3,281; yacc: 2,833; makefile: 1,288; lex: 1,162; python: 162; lisp: 54; xml: 8
file content (64 lines) | stat: -rw-r--r-- 1,821 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
function [a,ia,js] = SPBuild_a(h,qcols,neq)
%  [a,ia,js] = SPBuild_a(h,qcols,neq)
%
%  Build the companion matrix, deleting inessential lags.
%  Solve for x_{t+nlead} in terms of x_{t+nlag},...,x_{t+nlead-1}.

% Original author: Gary Anderson
% Original file downloaded from:
% http://www.federalreserve.gov/Pubs/oss/oss4/code.html
% Adapted for Dynare by Dynare Team.
%
% This code in the public domain and may be used freely.
% However the authors would appreciate acknowledgement of the source by
% citation of any of the following papers:
%
% Anderson, G. and Moore, G.
% "A Linear Algebraic Procedure for Solving Linear Perfect Foresight
% Models."
% Economics Letters, 17, 1985.
%
% Anderson, G.
% "Solving Linear Rational Expectations Models: A Horse Race"
% Computational Economics, 2008, vol. 31, issue 2, pages 95-113
%
% Anderson, G.
% "A Reliable and Computationally Efficient Algorithm for Imposing the
% Saddle Point Property in Dynamic Models"
% Journal of Economic Dynamics and Control, 2010, vol. 34, issue 3,
% pages 472-489


left  = 1:qcols;
right = qcols+1:qcols+neq;
%hs=SPSparse(h);
hs=sparse(h);

hs(:,left) = -hs(:,right)\hs(:,left);

%  Build the big transition matrix.

a = zeros(qcols,qcols);

if(qcols > neq)
  eyerows = 1:qcols-neq;
  eyecols = neq+1:qcols;
  a(eyerows,eyecols) = eye(qcols-neq);
end
hrows      = qcols-neq+1:qcols;
a(hrows,:) = hs(:,left);

%  Delete inessential lags and build index array js.  js indexes the
%  columns in the big transition matrix that correspond to the
%  essential lags in the model.  They are the columns of q that will
%  get the unstable left eigenvectors. 

js       = 1:qcols;
zerocols = sum(abs(a)) == 0;
while( any(zerocols) )
  a(:,zerocols) = [];
  a(zerocols,:) = [];
  js(zerocols)  = [];
  zerocols = sum(abs(a)) == 0;
end
ia = length(js);