% from Chris Sims web site % http://eco-072399b.princeton.edu/yftp/gensys/mfiles/QZSWITCH.M % function [A,B,Q,Z] = qzswitch(i,A,B,Q,Z) %function [A,B,Q,Z] = qzswitch(i,A,B,Q,Z) % % Takes U.T. matrices A, B, orthonormal matrices Q,Z, interchanges % diagonal elements i and i+1 of both A and B, while maintaining % Q'AZ' and Q'BZ' unchanged. If diagonal elements of A and B % are zero at matching positions, the returned A will have zeros at both % positions on the diagonal. This is natural behavior if this routine is used % to drive all zeros on the diagonal of A to the lower right, but in this case % the qz transformation is not unique and it is not possible simply to switch % the positions of the diagonal elements of both A and B. realsmall=sqrt(eps)*10; %realsmall=1e-3; a = A(i,i); d = B(i,i); b = A(i,i+1); e = B(i,i+1); c = A(i+1,i+1); f = B(i+1,i+1); % A(i:i+1,i:i+1)=[a b; 0 c]; % B(i:i+1,i:i+1)=[d e; 0 f]; if (abs(c)