For instance, is there some way I can say "let A and B be arbitrary real $m\times n$ and $k\times m$ matrices, Simplify[Transpose[Transpose[A].Transpose[B]]]" and Mathematica would simplify it to B.A?

I know I can set A and B to be matrices containing symbols (e.g. A = Table[Subscript[a,i,j],{i,m},{j,n}]), but results can get quite messy if the problem is more complex than Transpose[Transpose[A].Transpose[B]]

EDIT: To answer @Searke and @Artes questions in the comments: I'm currently watching this Stanford online machine learning course. If you look at the lecture notes, pages 8-11, you see a some matrix calculations. I can follow these calculations with pen and paper, but I haven't found a way to derive e.g. this result from page 11 using Mathematica:

enter image description here

  • 2
    $\begingroup$ Nope. The issue is that for a given symbol there is no way to say "Oh this symbol is a symmetric, real matrix." To the best of my knowledge, there is no package for this. $\endgroup$
    – Searke
    Commented Mar 20, 2012 at 13:17
  • 1
    $\begingroup$ I would actually be very interested in hearing what people think such functionality should be able to do. Does some other software do this and how do they do it? $\endgroup$
    – Searke
    Commented Mar 20, 2012 at 13:18
  • $\begingroup$ See related question: mathematica.stackexchange.com/questions/8/… $\endgroup$
    – Eli Lansey
    Commented Oct 4, 2012 at 11:16
  • 1
    $\begingroup$ What about this answer? mathematica.stackexchange.com/a/16378/1089 $\endgroup$
    – chris
    Commented Apr 20, 2014 at 20:31
  • 2
    $\begingroup$ There's a MatrixD package that lets you differentiate matrix expressions -- mathematica.stackexchange.com/questions/138708/… $\endgroup$ Commented Apr 26, 2017 at 19:49

4 Answers 4


For the posted example, TensorReduce does the trick:

  Assumptions -> {A ∈ Matrices[{m, n}], B ∈ Matrices[{k, m}]}

Initially, Mathematica is not designed for such abstract calculations.

But, Mathematica is a powerful programming language, so that one can add such functionality easily.

See the following examples in related area of differential geometry:

  • $\begingroup$ Links are dead. $\endgroup$
    – jlh
    Commented Mar 26, 2020 at 8:58
  • $\begingroup$ @jlh, that vendor seems to be no more, but I've added links to the Wayback Machine. $\endgroup$ Commented May 12, 2020 at 11:46

Indeed this is a one liner in NCAlgebra:

<< NC`
<< NCAlgebra`
NCGrad[1/2 (x ** z - y)^T ** (x ** z - y), z]

which results in

-y^T ** x + z^T ** x^T ** x


I am not sure, but maybe this software for Mathematica http://www.math.ucsd.edu/~ncalg/ could somehow help. The software is for a package called NCAlgebra developed by UC San Diego. I am not familiar with the detailed usage, but it claims to implement capability to study noncommutative inequalities, linear controls, and semidefinite programming within Mathmeatica.

  • 4
    $\begingroup$ Hi Konstantin, welcome to Mathematica.SE. Can you add some information about the software here? When that link dies ("when", not "if") your answer becomes useless. $\endgroup$
    – stevenvh
    Commented Oct 3, 2012 at 17:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.