dynare/matlab/AIM/SPReduced_form.m

27 lines
780 B
Matlab
Raw Normal View History

% [nonsing,b] = SPReduced_form(q,qrows,qcols,bcols,neq,b,condn);
%
% Compute reduced-form coefficient matrix, b.
function [nonsing,b] = SPReduced_form(q,qrows,qcols,bcols,neq,condn);
b=[];
qs=SPSparse(q);
left = 1:qcols-qrows;
right = qcols-qrows+1:qcols;
nonsing = rcond(full(qs(:,right))) > condn;
if(nonsing)
qs(:,left) = -qs(:,right)\qs(:,left);
b = qs(1:neq,1:bcols);
b = full(b);
else %rescale by dividing row by maximal qr element
%'inverse condition number small, rescaling '
themax=max(abs(qs(:,right)),[],2);
oneover = diag(1 ./ themax);
nonsing = rcond(full(oneover *qs(:,right))) > condn;
if(nonsing)
qs(:,left) = -(oneover*qs(:,right))\(oneover*(qs(:,left)));
b = qs(1:neq,1:bcols);
b = full(b);
end
end