40 lines
972 B
Matlab
40 lines
972 B
Matlab
|
% [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}.
|
||
|
|
||
|
function [a,ia,js] = SPBuild_a(h,qcols,neq)
|
||
|
|
||
|
left = 1:qcols;
|
||
|
right = qcols+1:qcols+neq;
|
||
|
hs=SPSparse(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);
|