Description
Just an observation from utilizing sb030d in some models with extreme dynamic range (LIGO systems). There I had to resort to using Cholesky factored Grammians due to range issues in the output covariance matrix. In these models my A matrix is extremely non-normal and its Schur form has large off-diagonal elements even after balancing.
In this case, general orthogonal transformations are dangerous and the Schur form needs to be carefully preserved. So I noticed that the
python-control/control/statefbk.py
Line 1212 in f73e893
should actually use tra='T' for type='cf' and not transpose A. If you transpose A, then internally it becomes lower-triangular and the routine re-runs QR-algo to make Schur, which adds epsilon-errors all over and can smear out the response on sensitive systems. You can test this by keeping fact='F' and getting an error since it checks the triangularity.