load("diag");

m : matrix([a,b],[c,d]);

v : transpose(matrix(
        [ (a-d)/2 + sqrt( ((a-d)/2)^2 + b*c ), c ],
        [ (a-d)/2 - sqrt( ((a-d)/2)^2 + b*c ), c ]
    ));

invert(v)$
ratsimp(%)$
vInv : %;

vInv * sqrt( ((a-d)/2)^2 + b * c)$ ratsimp(%);

L : diag([ (a+d)/2 + sqrt( ((a-d)/2)^2 + b*c ), 
        (a+d)/2 - sqrt( ((a-d)/2)^2 + b*c )  ]);

v . L . vInv$
ratsimp(%);

m : matrix([a,b],[0,a]);
result : eigenvectors(m);
L : diag([a, a]);
v : transpose(matrix([1,0],[1,0]));
vInv : matrix([1,0],[0,1]);
ratsimp(v . L . vInv);
"defective matrix";

m : matrix([0, b], [0, 0]);
result : eigenvectors(m);
"defective matrix";

m : matrix([a,b],[0,d]);
result : eigenvectors(m);
L : diag([a, d]);
v : transpose(matrix([1, 0], [b, d-a]));
invert(v)$ ratsimp(%)$ vInv : %;
v . L . vInv$ ratsimp(%);

m : matrix([a,0],[c,d]);
result : eigenvectors(m);
L : diag([a, d]);
v : transpose(matrix([a-d, c], [0,1]));
invert(v)$ ratsimp(%)$ vInv : %;
v . L . vInv$ ratsimp(%);

m : matrix([0,0],[0,0]);
result : eigenvectors(m);

m : matrix([a,0],[0,0]);
result : eigenvectors(m);

m : matrix([0,0],[0,d]);
result : eigenvectors(m);

m : matrix([a,0],[0,d]);
result : eigenvectors(m);

m : matrix([0,b],[c,0]);
result : eigenvectors(m);

m : matrix([a,b],[c,a]);
result : eigenvectors(m);
v : transpose(matrix([1,sqrt(c/b)],[1,-sqrt(c/b)]));
vInv : ratsimp(invert(v));
L : diag([a+sqrt(b*c), a-sqrt(b*c)]);
v . L . vInv$ ratsimp(%);

result : eigenvectors(m);
v : transpose(matrix([-%i*sqrt(-b/c),1],[%i*sqrt(-b/c),1]));
vInv : ratsimp(invert(v));
L : diag([a+%i*sqrt(-b*c), a-%i*sqrt(-b*c)]);
v . L . vInv$ ratsimp(%);

expL : diag([exp(L[1,1]), exp(L[2,2])]);

assume(b>0, c<0);

v . expL . vInv$ ratsimp(%);
trigsimp(%);