# (Efficient) computation of symmetric powers of square matrices

I'm looking for software that can compute symmetric powers of medium-size square (say rational, 100 by 100) matrices, and ideally can do so efficiently if the matrix is sparse enough. I haven't found any function for symmetric power in Sage or sympy, and a google search hasn't turned up anything. (An aside: Do people studying matrix algorithms have a different name for symmetric power, or they just aren't interested?) Any suggestions?

Edit: Macaulay2 only does symmetric powers of one-rowed matrices, it seems. Singular seems hopelessly inefficient on medium-sized sparse matrices (20 by 20).

• you could try Macaulay – Carlo Beenakker May 23 '17 at 16:42
• Thanks, but that seems to work only for matrices with one row. I need (at least) square matrices. I've also tried Singular, but that seems rather inefficient on medium-sized matrices. – Plethy May 23 '17 at 16:48
• symmetric powers are not interesting for people doing matrix algorithms. And group theorists normally can do all they need on the level of characters, although yes, they take powers to build new irreducible representations. – Dima Pasechnik May 23 '17 at 19:51
• It also makes a difference whether you only need characteristic 0, or not, or even more general matrix entries. Generic code would be much slower, as it would work with a quotient of the tensor power rather than directly. – Dima Pasechnik May 24 '17 at 14:28
• @Dima Pasechnik By directly do you mean symmetric tensors rather than symmetric powers, with the identification in characteristic zero? I'd be happy for faster code over Q. But it seems the problem is memory, even if you try to compute medium sized triple tensor products in numpy. – Plethy May 24 '17 at 15:25

Macaulay2 can compute symmetric powers of matrices with more than one row! This functionality is provided by the SchurFunctors package by Stillman, Leykin, and Velasko. Below is an example computation.

loadPackage("SchurFunctors");
schur({3},matrix{{1,2,3},{4,5,6},{7,8,9}})


This gives the symmetric cube:

  | 1   2   3   4   6   9    8   12   18   27   |
| 12  21  30  36  51  72   60  84   117  162  |
| 21  36  51  60  84  117  96  132  180  243  |
| 48  72  96  105 138 180  150 195  252  324  |
| 168 246 324 348 450 576  480 612  774  972  |
| 147 210 273 288 366 459  384 480  594  729  |
| 64  80  96  100 120 144  125 150  180  216  |
| 336 408 480 495 582 684  600 705  828  972  |
| 588 693 798 816 939 1080 960 1104 1269 1458 |
| 343 392 441 448 504 567  512 576  648  729  |


Of course, if you change the first argument to some other nonincreasing list of integers, you can get other Schur functors besides $\mathrm{Sym}^3$.

• Very cool! And that seems to be sufficiently efficient too. – Plethy May 24 '17 at 7:28

Sage can compute symmetric powers of matrices via a Singular function, we just discussed this here the other day. Or, indeed, you can use Singular directly.

Posted from mobile, sorry for lack of details.

PS. GAP has an undocumented function SymmetricPower, which computes symmetric powers of square matrices, but it is unfortunately quite slow.

• Thanks. I looked at the link, but it seems Macaulay2 is more efficient for me than Singular. If only I can get this working through Sage, where I have a bunch of other code. You don't by chance know how to load M2 packages into Sage? Ideally I'd like to define a function in Sage which takes as input a Sage matrix and a partition and returns the Schur functor applied to that matrix as a Sage matrix. But I couldn't find in the documentation how to load M2 packages in Sage. – Plethy May 24 '17 at 7:33
• yes, I do know how to load M2 packages into Sage. As well, it might actually be that what you need is actually implemented in Sage, in some obscure corner of its symmetric functions functionality. – Dima Pasechnik May 24 '17 at 8:07
• Could you edit your answer with a definition of a function in Sage that computes Schur functors? That seems like the best thing I could hope for at this point. – Plethy May 24 '17 at 8:31
• I am not 100% sure if doc.sagemath.org/html/en/reference/combinat/sage/combinat/sf/… is useful for you. – Dima Pasechnik May 24 '17 at 8:36
• Thanks. It seems that the Schur function package is useful for telling you what to expect qualitatively (if you apply the Schur functor to all matrices, then you get a representation with such-and-such a decomposition). But I don't think it is useful for computing the Schur functor on individual matrices. – Plethy May 24 '17 at 8:55