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]); (%i3) ratsimp(determinant(P)); Pa is our P matrix changed using change of basis T

 (%i4) Pa : ratsimp(T.P.invert(T)); (%i5) ratsimp(transpose(Pa).Pa); (%i6) load(functs)\$ /* needed for tracematrix */ SIGMA : factor(tracematrix(transpose(Pa).Pa)); 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)); So PI = det(P)^2

 (%i9) is(PI = ratsimp(determinant(P))^2); 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 ); 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.