# Possible Method for MatrixExp

Well, probably a hard question, but I think it's better to cry out loud :).

I noticed that MatrixExp has a Method option when writing this answer, which is undocumented. Since this tutorial claims that MatrixExp uses variable-order Padé approximation, evaluating rational matrix functions using Paterson–Stockmeyer methods or Krylov subspace approximations, I guess there might exist non-Automatic Method(s), but I can't find it out. Sadly, techniques in this post seem not to help. Does anyone know? Or is Automatic really the only available option?

• I never found an answer to my own question of a similar nature. I wonder if the Method option is simply added for future extensibility. May 18, 2015 at 9:18
• This seems as good an opportunity as any to leave these two links. May 18, 2015 at 10:02

Experimentation based on the documentation you quoted led to two valid Method options:

MatrixExp[{{1.2, 5.6}, {3, 4}}, Method -> "Pade"]

{{346.557, 661.735}, {354.501, 677.425}}

MatrixExp[{{1.2, 5.6}, {3, 4}}, {1, 2}, Method -> "Krylov"]

{1670.03, 1709.35}


If "Krylov" is used for the single parameter syntax it complains:

MatrixExp[{{1.2, 5.6}, {3, 4}}, Method -> "Krylov"]


MatrixExp::novec: The method Krylov requires the specification of a vector. >>

"Pade" fails on exact or symbolic input:

MatrixExp[{{1, 2}, {3, 4}}, Method -> "Pade"]


MatrixExp::invmtd: Invalid method Pade for input with precision ∞. >>

Thanks to ilian we now have the last(?) piece of the puzzle:

MatrixExp[{{2, 0, 0}, {0, 1, -1}, {0, 1, 1}}, Method -> "BlockDecomposition"]

{{E^2, 0, 0}, {0, E Cos[1], -E Sin[1]}, {0, E Sin[1], E Cos[1]}}

• From the OP's quote, that would seem to be the only two settings. In particular, the "Krylov" setting is valuable for exponentiating sparse matrices, and is quite useful for the action of the exponential of a sparse matrix on a vector (that is, MatrixExp[A, v, Method -> "Krylov"] for computing $\exp(\mathbf A)\mathbf v$). May 18, 2015 at 9:34
• I'm guessing MatrixExp[] is smart enough not to try to compute the eigenvalues of a symbolic matrix (imagine how many Root[] objects will that yield!), and will just use Putzer exclusively in that case. For matrices with exact entries, prolly a toss-up, and the precise details are known only to WRI devs. May 18, 2015 at 10:06
• On that note, I'm surprised that there is no option to use the Schur decomposition for computing MatrixExp[] for inexact matrices, but a little bird told me MatrixFunction[] does use Schur. I guess one can use that if one suspects that Padé is returning something weird. May 18, 2015 at 10:28
• The third valid setting can be accessed with Method -> "BlockDecomposition". May 18, 2015 at 12:52
• More along the lines of splitting the matrix into blocks and applying the Putzer or Jordan decomposition to each. May 18, 2015 at 13:39