Some computer algebra programs have built-in functions for computing the Jordan normal form of a matrix. For example, MATHEMATICA has the function JordanDecompose, MATLAB has Jordan(). Most importantly, these functions can work on matrices given in a symbolic way (matrix entries represented by symbols, not concrete numbers). My question is: what kind of algorithms is implemented in these functions in the symbolic mode of operation? I would appreciate pointers to the relevant mathematical literature describing the algorithms.