Computes a solution (X) to the Sylvester equation (AX + XB = Q).
Parameters :  a : array, shape (M, M)
b : array, shape (N, N)
q : array, shape (M, N)


Returns :  x : array, shape (M, N)

Raises :  LinAlgError :

Notes
Computes a solution to the Sylvester matrix equation via the Bartels Stewart algorithm. The A and B matrices first undergo Schur decompositions. The resulting matrices are used to construct an alternative Sylvester equation (RY + YS^T = F) where the R and S matrices are in quasitriangular form (or, when R, S or F are complex, triangular form). The simplified equation is then solved using *TRSYL from LAPACK directly.