ArraySimplify[expr]
performs a sequence of array transformations on expr and returns the simplest form it finds.
ArraySimplify[expr,assum]
simplifies using assumptions assum.
ArraySimplify
ArraySimplify[expr]
performs a sequence of array transformations on expr and returns the simplest form it finds.
ArraySimplify[expr,assum]
simplifies using assumptions assum.
Details and Options
- ArraySimplify can be used for simplifying symbolic array expressions.
- ArraySimplify makes use of multilinearity of array operations, as well as of numerous array, matrix and vector operation identities.
- Dimensionality of symbolic arguments can be specified through assumptions or by using ArraySymbol, MatrixSymbol or VectorSymbol.
- Symbolic arguments of unspecified dimensionality are assumed to be arrays of dimensions appropriate for the functions they are used in. In multi-argument Listable functions, like Plus or Times, all arguments are assumed to have the same dimensions unless specified differently. »
- ArraySimplify has the option Assumptions, specifying default assumptions to be appended to assum.
- The default setting for the Assumptions option is $Assumptions.
- You can specify default assumptions for ArraySimplify using Assuming.
- Complexity of each form generated is assessed using a measure similar to LeafCount, except that ArraySymbol, MatrixSymbol, VectorSymbol, SymbolicZerosArray, SymbolicOnesArray, SymbolicIdentityArray and SymbolicDeltaProductArray subexpressions are treated as atoms.
Examples
open all close allBasic Examples (3)
Simplify symbolic array expressions:
ArraySimplify[a.b + 2a.c]Use assumptions to specify dimensionality of variables:
ArraySimplify[m.Inverse[m], Element[m, Matrices[{n, n}]]]ArraySimplify[D[(VectorSymbol["v", n] + x).(VectorSymbol["v", n] + x), x], Element[x, Complexes]]Simplify expressions involving MatrixSymbol and VectorSymbol:
a = MatrixSymbol["a", {n, n}];
v = VectorSymbol["v", n];ArraySimplify[v.Transpose[a]]ArraySimplify[Inverse[Inverse[a]]]ArraySimplify[Det[2a] / Det[a]]Scope (42)
Multilinear Operations (12)
Elementwise products of linear combinations:
ArraySimplify[(2 ArraySymbol["a", {p, q, r}] + 3 ArraySymbol["b", {p, q, r}]) (4 ArraySymbol["c", {p, q, r}] + 5 ArraySymbol["d", {p, q, r}]) - 10ArraySymbol["a", {p, q, r}] ArraySymbol["d", {p, q, r}] - 8 ArraySymbol["a", {p, q, r}] ArraySymbol["c", {p, q, r}]]Dot products of linear combinations:
ArraySimplify[2a.b + 3a.c]ArrayDot products of linear combinations:
ArraySimplify[ArrayDot[2a, 3b + 5c, 2] + ArrayDot[a, 7c, 2]]TensorProduct of linear combinations:
ArraySimplify[TensorProduct[2a, 3b, 5c] + 2TensorProduct[a, 5b, 7c]]KroneckerProduct of linear combinations:
ArraySimplify[KroneckerProduct[a + b, c + d] - KroneckerProduct[a + b, c - d]]TensorWedge of linear combinations:
ArraySimplify[TensorWedge[a, b, c] - TensorWedge[a, 2d, c]]Cross product of linear combinations:
ArraySimplify[Cross[2a + 3b, 5a + 7b]]Tr of linear combinations:
ArraySimplify[Tr[2a + 3b + 4c] - 2Tr[a + 2c]]TensorContract of linear combinations:
ArraySimplify[TensorContract[a + 2b, {{2, 3}}] + TensorContract[a - 3b, {{2, 3}}]]HodgeDual of linear combinations:
ArraySimplify[HodgeDual[s a + t b] - t HodgeDual[b], Element[s | t, Reals]]Transpose of linear combinations:
ArraySimplify[Transpose[a + b + c] + Transpose[2b - c]]ConjugateTranspose of linear combinations:
ArraySimplify[ConjugateTranspose[2 a + I b] + I ConjugateTranspose[b + c]]Array Operations (10)
Transpose, Conjugate and ConjugateTranspose:
ArraySimplify[Transpose[a, {1, 2, 3}]]ArraySimplify[Transpose[a, 1 <-> 2]]ArraySimplify[Transpose[a, Cycles[{{2, 1}}]]]ArraySimplify[ConjugateTranspose[a, {2, 1}]]ArraySimplify[Transpose[ConjugateTranspose[a]]]ArraySimplify[Conjugate[Conjugate[a]]]ArraySimplify[Conjugate[Transpose[a]]]ArraySimplify[Conjugate[ConjugateTranspose[a]]]ArraySimplify[ConjugateTranspose[Conjugate[a], 7]]ArraySimplify[ConjugateTranspose[Transpose[a, 3], 5]]ArraySimplify[Conjugate[a], Element[a, Arrays[{p, q, r}, Reals]]]ArraySimplify[ConjugateTranspose[a], Element[a, Arrays[{p, q, r}, Reals]]]Simplifications of TensorProduct:
ArraySimplify[TensorProduct[a, b, c, d] / a / c, Element[a | c, Reals]]ArraySimplify[TensorProduct[a, b, TensorContract[c, {{1, 3}, {2, 5}}], d], Element[a, Vectors[n]] && Element[b, Arrays[{p, q, r}]]]Simplifications of TensorWedge:
ArraySimplify[TensorWedge[Transpose[a], b, Transpose[c], d]]ArraySimplify[TensorWedge[a, b, ConjugateTranspose[c, 3 <-> 7], d]]Tr of Transpose, Conjugate and ConjugateTranspose:
ArraySimplify[Tr[Transpose[a]]]ArraySimplify[Tr[Conjugate[a]] == Conjugate[Tr[a]] == Tr[ConjugateTranspose[a]]]Conjugate of array operations:
ArraySimplify[Conjugate[a].Conjugate[b]]ArraySimplify[ArrayDot[Conjugate[a], Conjugate[b], 2]]ArraySimplify[Conjugate[TensorProduct[Conjugate[a], Conjugate[b]]]]ArraySimplify[KroneckerProduct[Conjugate[a], Conjugate[b]]]ArraySimplify[Conjugate[TensorWedge[a, Conjugate[b]]]]ArraySimplify[Cross[Conjugate[a], Conjugate[b]]]Conjugate and ConjugateTranspose of elementary functions:
ArraySimplify[Conjugate[Sin[VectorSymbol["v", n]]] - Sin[Conjugate[VectorSymbol["v", n]]]]ArraySimplify[ConjugateTranspose[ArcTan[Conjugate[a]]]]ArraySimplify[Conjugate[(MatrixSymbol["a", {n, n}])^k] - Conjugate[MatrixSymbol["a", {n, n}]]^k, k∈ℤ]ArraySimplify[ConjugateTranspose[t ^ Transpose[a]], t > 0]Transpose of Listable mathematical functions:
ArraySimplify[Transpose[a ^ b] == Transpose[a] ^ Transpose[b]]ArraySimplify[Transpose[Beta[a, b]] - Beta[Transpose[a], Transpose[b]], Element[a | b, Arrays[{k, m, n}]]]Dot product of TensorProduct:
ArraySimplify[TensorProduct[a, b, c].TensorProduct[d, e] / c.d, Element[c | d, Vectors[n]]]ArraySimplify[TensorProduct[a, b, c].TensorProduct[d, e], Element[c | d, Matrices[{n, n}]]]Commutativity of scalar-valued ArrayDot:
ArraySimplify[ArrayDot[a, b, 3] - ArrayDot[b, a, 3], Element[a | b, Arrays[{k, m, n}]]]Simplifications of SymbolicIdentityArray:
ArraySimplify[a.SymbolicIdentityArray[{n}]]ArraySimplify[ArrayDot[a, SymbolicIdentityArray[{m, n, k}], 3]]ArraySimplify[MatrixPower[SymbolicIdentityArray[{n}], k], Element[k, Integers]]Matrix Operations (16)
ArraySimplify[Inverse[Inverse[a]]]ArraySimplify[a.Inverse[a], Element[a, Matrices[{n, n}]]]ArraySimplify[Inverse[a].a.b]ArraySimplify[b.a.Inverse[a]]ArraySimplify[PseudoInverse[PseudoInverse[a]]]ArraySimplify[a.PseudoInverse[a].a]ArraySimplify[ConjugateTranspose[PseudoInverse[a].a]]ArraySimplify[ConjugateTranspose[a.PseudoInverse[a]]]ArraySimplify[ConjugateTranspose[a].a.PseudoInverse[a]]ArraySimplify[PseudoInverse[a].a.ConjugateTranspose[a]]ArraySimplify[ConjugateTranspose[a].ConjugateTranspose[PseudoInverse[a]].PseudoInverse[a]]ArraySimplify[Adjugate[Adjugate[a]]Det[a] ^ 2, Element[a, Matrices[{n, n}]]]ArraySimplify[Adjugate[Inverse[a]]Det[a]]ArraySimplify[Inverse[Adjugate[a]]Det[a]]ArraySimplify[a.Adjugate[a] / Det[a], Element[a, Matrices[{n, n}]]]ArraySimplify[Adjugate[a].a / Det[a], Element[a, Matrices[{n, n}]]]ArraySimplify[a.Adjugate[a].b]ArraySimplify[MatrixPower[a, 1]]ArraySimplify[MatrixPower[a, -1]]ArraySimplify[MatrixPower[a, 0], Element[a, Matrices[{n, n}]]]ArraySimplify[MatrixPower[MatrixPower[a, k], m], Element[k | m, Integers]]ArraySimplify[MatrixPower[Inverse[a], -k], Element[k, Integers]]ArraySimplify[Inverse[MatrixPower[a, -7]]]ArraySimplify[a.MatrixPower[b, k - 1].b]ArraySimplify[a.MatrixPower[b, k].MatrixPower[b, m].c]Inverse, MatrixPower, PseudoInverse and Adjugate of a scalar multiple:
ArraySimplify[9Inverse[3a]]ArraySimplify[MatrixPower[3a, k] / 3 ^ k]ArraySimplify[3PseudoInverse[3a]]ArraySimplify[Adjugate[3 a] / 3 ^ n, Element[a, Matrices[{n, n}]]]Inverse and Adjugate of Dot products:
ArraySimplify[Inverse[a].Inverse[b].Inverse[c]]ArraySimplify[Adjugate[a].Adjugate[b].Adjugate[c]]Transpose, Conjugate and ConjugateTranspose of Inverse, Adjugate and PseudoInverse:
ArraySimplify[Transpose[Inverse[a]] == Inverse[Transpose[a]]]ArraySimplify[Conjugate[Inverse[a]] == Inverse[Conjugate[a]]]ArraySimplify[ConjugateTranspose[Inverse[a]] == Inverse[ConjugateTranspose[a]]]ArraySimplify[Transpose[Adjugate[a]] == Adjugate[Transpose[a]]]ArraySimplify[Conjugate[Adjugate[a]] == Adjugate[Conjugate[a]]]ArraySimplify[ConjugateTranspose[Adjugate[a]] == Adjugate[ConjugateTranspose[a]]]ArraySimplify[Transpose[PseudoInverse[a]] == PseudoInverse[Transpose[a]]]ArraySimplify[Conjugate[PseudoInverse[a]] == PseudoInverse[Conjugate[a]]]ArraySimplify[ConjugateTranspose[PseudoInverse[a]] == PseudoInverse[ConjugateTranspose[a]]]Transpose, Conjugate and ConjugateTranspose of MatrixPower:
ArraySimplify[Transpose[MatrixPower[Transpose[a], -7]]]ArraySimplify[Conjugate[MatrixPower[ConjugateTranspose[a], 3]]]ArraySimplify[ConjugateTranspose[MatrixPower[Conjugate[a], 5]]]Transpose, Conjugate and ConjugateTranspose of MatrixExp:
ArraySimplify[Transpose[MatrixExp[Transpose[a]]]]ArraySimplify[Conjugate[MatrixExp[ConjugateTranspose[a]]]]Transpose and ConjugateTranspose of Dot products:
ArraySimplify[Transpose[a].Transpose[b].Transpose[c], Element[a | b | c, Matrices[{n, n}]]]ArraySimplify[ConjugateTranspose[a].ConjugateTranspose[b].ConjugateTranspose[c], Element[a | b | c, Matrices[{n, n}]]]Negative exponent MatrixPower of a Dot product:
ArraySimplify[MatrixPower[Inverse[a].Inverse[b], -3], Element[a | b, Matrices[{n, n}]]]ArraySimplify[Tr[b.a.Inverse[b]], Element[a | b, Matrices[{n, n}]]]ArraySimplify[Tr[Inverse[b].a.b], Element[a | b, Matrices[{n, n}]]]ArraySimplify[Tr[b.c.a] - Tr[a.b.c], Element[a | b | c, Matrices[{n, n}]]]ArraySimplify[Tr[a.(Transpose[b]c)], Element[a | b | c, Matrices[{n, n}]]]Det composed with matrix operations:
ArraySimplify[Det[3a] / Det[a], Element[a, Matrices[{n, n}]]]ArraySimplify[Det[Transpose[a]]]ArraySimplify[Conjugate[Det[Conjugate[a]]]]ArraySimplify[Conjugate[Det[ConjugateTranspose[a]]]]ArraySimplify[1 / Det[Inverse[a]]]ArraySimplify[Det[Adjugate[a]] Det[a], Element[a, Matrices[{n, n}]]]ArraySimplify[Det[MatrixPower[a, 7]]]ArraySimplify[Det[b.a.Inverse[b]]]ArraySimplify[Det[Inverse[b].a.b]]ArraySimplify[Det[a.b.c] / Det[a], Element[a | b | c, Matrices[{n, n}]]]Matrix operations with KroneckerProduct arguments:
ArraySimplify[KroneckerProduct[Transpose[a], Transpose[b], Transpose[c]], Element[a | b | c, Matrices[{m, n}]]]ArraySimplify[KroneckerProduct[ConjugateTranspose[a], ConjugateTranspose[b], ConjugateTranspose[c]], Element[a | b | c, Matrices[{m, n}]]]ArraySimplify[KroneckerProduct[Inverse[a], Inverse[b], Inverse[c]], Element[a | b | c, Matrices[{n, n}]]]ArraySimplify[KroneckerProduct[PseudoInverse[a], PseudoInverse[b], PseudoInverse[c]], Element[a | b | c, Matrices[{m, n}]]]ArraySimplify[Tr[KroneckerProduct[a, b, c]] / Tr[a], Element[a | b | c, Matrices[{n, n}]]]ArraySimplify[KroneckerProduct[a, b].KroneckerProduct[c, d].KroneckerProduct[e, f], Element[a | b | c | d | e | f, Matrices[{n, n}]]]ArraySimplify[Det[KroneckerProduct[a, b, c]] / (Det[a]^m n Det[b]^k n), Element[a, Matrices[{k, k}]] && Element[b, Matrices[{m, m}]] && Element[c, Matrices[{n, n}]]]ArraySimplify[KroneckerProduct[MatrixPower[a, k], MatrixPower[b, k], MatrixPower[c, k]], Element[a | b | c, Matrices[{n, n}]] && Element[k, Integers]]ArraySimplify[KroneckerProduct[a, b, KroneckerProduct[c, d], e], Element[a | b | c | d | e, Matrices[{m, n}]]]a = MatrixSymbol["a", {n, n}];ArraySimplify[a.MatrixExp[-b].Inverse[a].MatrixExp[a.b.Inverse[a]]]ArraySimplify[MatrixPower[MatrixExp[a], k].MatrixExp[k a], Element[k, Integers]]ArraySimplify[MatrixExp[s a].MatrixExp[t a], Element[s | t, Complexes]]ArraySimplify[Det[MatrixExp[a]] - Exp[Tr[a]]]Vector Operations (4)
Transpose of a vector:
ArraySimplify[Transpose[v], Element[v, Vectors[n]]]Dot products of vectors and matrices:
ArraySimplify[w.v - v.w, Element[v | w, Vectors[n]]]ArraySimplify[v.Transpose[a], Element[v, Vectors[n]] && Element[a, Matrices[{n, m}]]]ArraySimplify[v.Transpose[a].w, Element[v | w, Vectors[n]] && Element[a, Matrices[{n, n}]]]ArraySimplify[a.v.Transpose[b], Element[v, Vectors[n]] && Element[a, Matrices[{m, n}]] && Element[b, Matrices[{m, p}]]]Transpose of KroneckerProduct:
ArraySimplify[Transpose[KroneckerProduct[u, v]], Element[u, Vectors[m]] && Element[v, Vectors[n]]]Cross products:
ArraySimplify[Cross[a, a]]ArraySimplify[Cross[a + 2b, a + b, a - b]]ArraySimplify[Cross[a, d, c, b] + Cross[a, b, c, d]]Options (1)
Assumptions (1)
Specify assumptions using the assumptions argument:
ArraySimplify[Det[7 a] / Det[a], Element[a, Matrices[{n, n}]]]Use the Assumptions option:
ArraySimplify[Det[7a] / Det[a], Assumptions -> Element[a, Matrices[{n, n}]]]Use Assuming to specify default assumptions:
Assuming[Element[a, Matrices[{n, n}]], ArraySimplify[Det[7a] / Det[a]]]Applications (1)
Derive a formula for the gradient of the least-squares cost function:
X = MatrixSymbol["X", {m, n}];
y = VectorSymbol["y", m];
θ = VectorSymbol["θ", n];J = 1 / 2(X.θ - y).(X.θ - y)g = Grad[J, θ]ArraySimplify[g]Properties & Relations (2)
ArraySimplify performs only array transformations:
v = VectorSymbol["v", n / 2 + m / 2];ArraySimplify[v - Transpose[v]]Simplify performs other transformations as well:
Simplify[v - Transpose[v]]Use Assuming to propagate assumptions:
Assuming[Element[a, Matrices[{n, n}]], ArraySimplify[Transpose[Inverse[a]] - Inverse[Transpose[a]]]]Possible Issues (1)
Symbolic arguments of unspecified dimensionality are not assumed to be scalars:
ArraySimplify[Transpose[c MatrixSymbol["A", {m, n}]]]Use assumptions to specify that c is a scalar:
ArraySimplify[Transpose[c MatrixSymbol["A", {m, n}]], Element[c, Complexes]]See Also
Related Guides
History
Text
Wolfram Research (2025), ArraySimplify, Wolfram Language function, https://reference.wolfram.com/language/ref/ArraySimplify.html.
CMS
Wolfram Language. 2025. "ArraySimplify." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/ArraySimplify.html.
APA
Wolfram Language. (2025). ArraySimplify. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/ArraySimplify.html
BibTeX
@misc{reference.wolfram_2026_arraysimplify, author="Wolfram Research", title="{ArraySimplify}", year="2025", howpublished="\url{https://reference.wolfram.com/language/ref/ArraySimplify.html}", note=[Accessed: 15-June-2026]}
BibLaTeX
@online{reference.wolfram_2026_arraysimplify, organization={Wolfram Research}, title={ArraySimplify}, year={2025}, url={https://reference.wolfram.com/language/ref/ArraySimplify.html}, note=[Accessed: 15-June-2026]}