Show that we can cook up a change of basis matrix T that achieves our desired stability criteria.

(%i1) /*P : matrix([a,b],[c,d]);*/
P : matrix([-(g*k+g^2-1)/(g*k+g^2+1),-(2*g)/(g*k+g^2+1)],[(2*g)/(g*k+g^2+1),(g*k-g^2+1)/(g*k+g^2+1)]);
T : matrix([1,f],[0,1]);

Result

(%i3) ratsimp(determinant(P));

Result

Pa is our P matrix changed using change of basis T

(%i4) Pa : ratsimp(T.P.invert(T));

Result

(%i5) ratsimp(transpose(Pa).Pa);

Result

(%i6) load(functs)$ /* needed for tracematrix */
SIGMA : factor(tracematrix(transpose(Pa).Pa));

Result

SIGMA >= 0
True
[[ (2*(2*f^2*g^2*k^2+g^2*k^2-4*f^3*g^2*k-8*f*g^2*k+g^4+2*f^4*g^2+8*f^2*g^2+2*g^2+1))/(g*k+g^2+1)^2 >= 0 ]]

(%i8) PI:factor(determinant(transpose(Pa).Pa));

Result

So PI = det(P)^2

(%i9) is(PI = ratsimp(determinant(P))^2);

Result

Our ||TPT^-1|| < 1 requirement is achieved by:

|PI| < 1 and |SIGMA| < 1 + |PI|

For 2x2 case:

Since PI = det(P)^2 we know it is non-negative, and SIGMA was shown non-negative above. So we have:

PI < 1 and SIGMA < 1 + PI

PI < 1
True.
[[ (g*k-g^2-1)^2/(g*k+g^2+1)^2 < 1; g>0, k>0 ]]

SIGMA < 1 + PI
=> SIGMA - 1 - PI < 0

(%i10) factor( SIGMA - 1 - PI );

Result

Want : SIGMA - 1 - PI < 0

[[ (4*f*g^2*(k-f)*(f*k-f^2-4))/(g*k+g^2+1)^2 < 0; 0 < k <= 2, 0
Wolfram Alpha gives solution:

0 < f < 2, g > 0, f < k <= 2


Created with wxMaxima.