function cosA = cosm (A) if !(ismatrix(A) & issquare(A)) error("cosm: expecting square matrix argument"); endif; %dimention of A n=rows(A); %normA - the norm_inf of A normA=norm(A,inf); %shift A <- A-pi*q*eye normzero = normA; normceil = norm(A-pi*ceil(trace(A)/(pi*n))*eye(n),inf); normfloor = norm(A-pi*floor(trace(A)/(pi*n))*eye(n),inf); switch min([normzero,normceil,normfloor]) case normzero q_shift=0; case normceil q_shift=ceil(trace(A)/(pi*n)); A=A-pi*q_shift*eye(n); normA=normceil; case normfloor q_shift=floor(trace(A)/(pi*n)); A=A-pi*q_shift*eye(n); normA=normfloor; endswitch % %end shift A q_shift %balancing %B=D^-1*A*D balancing_performed=0; [D,B]=balance(A); if (norm(B,inf)