a**b**c
is a general associative, but non‐commutative, form of multiplication.
NonCommutativeMultiply 
a**b**c
is a general associative, but non‐commutative, form of multiplication.
Details
- NonCommutativeMultiply has attribute Flat.
- Instances of NonCommutativeMultiply are automatically flattened, but no other simplification is performed.
- You can use NonCommutativeMultiply as a generalization of ordinary multiplication for special mathematical objects.
- NonCommutativeMultiply is the default operator used by NonCommutativeAlgebra. »
Examples
open all close allBasic Examples (1)
Applications (2)
Use NonCommutativeMultiply to represent composition in an algebra of differential operators.
The base case, where
is a function, simply multiplies by
:
DOperator[A_, expr_] /; FreeQ[A, D] := AexprThe next two properties express linearity:
DOperator[L1_ + L2_, expr_] := DOperator[L1, expr] + DOperator[L2, expr]DOperator[A_L_, expr_] /; FreeQ[A, D] := ADOperator[L, expr]Here the operator is D. HoldPattern stops the derivative from acting on the double blank:
DOperator[A : HoldPattern[D[__]&], expr_] := A[expr]Composition of operators applied to an expression:
DOperator[L1__**L2_, expr_] := Expand[DOperator[L1, DOperator[L2, expr]]]Power of an operator applied to an expression:
DOperator[L1_^n_Integer, expr_] /; n > 1 := Nest[Expand[DOperator[L1, #1]]&, expr, n]Apply these rules to derive the KdV equation for the Lax pair:
Dx = Subscript[∂, x]#1&;L = Dx**Dx + u[t, x];
A = 4Dx ^ 3 + 6u[t, x]**Dx + 3Dx[u[t, x]];D[DOperator[L, f[x]], t] == DOperator[L**A - A**L, f[x]]//FullSimplifyBuild a function to expand non-commutative products. Distributivity with respect to Plus:
ExpandNCM[(h : NonCommutativeMultiply)[a___, b_Plus, c___]] := Distribute[h[a, b, c], Plus, h, Plus, ExpandNCM[h[##]]&]Handling the commutative product inside the non-commutative one:
ExpandNCM[(h : NonCommutativeMultiply)[a___, b_Times, c___]] := Most[b]ExpandNCM[h[a, Last[b], c]]Fall-back operation applied to everything else:
ExpandNCM[a_] := ExpandAll[a]ExpandNCM[(a - b)**(a + b)]ExpandNCM[(a + b)**(a + b)**(a + b)]Properties & Relations (3)
No automatic simplification rules exist for NonCommutativeMultiply:
{0**a, 1**a}Expand and Simplify do not operate on expressions with NonCommutativeMultiply:
(a + b)**c - a * cExpand[%]Simplify[%]FullSimplify[%]NonCommutativeMultiply is the default operator used by NonCommutativeAlgebra:
NonCommutativeAlgebra[]["Multiplication"]Possible Issues (1)
NonCommutativeMultiply of one argument, unlike Times, stays unevaluated:
NonCommutativeMultiply[a]Related Guides
History
Introduced in 1988 (1.0) | Updated in 2025 (14.3)
Text
Wolfram Research (1988), NonCommutativeMultiply, Wolfram Language function, https://reference.wolfram.com/language/ref/NonCommutativeMultiply.html (updated 2025).
CMS
Wolfram Language. 1988. "NonCommutativeMultiply." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2025. https://reference.wolfram.com/language/ref/NonCommutativeMultiply.html.
APA
Wolfram Language. (1988). NonCommutativeMultiply. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/NonCommutativeMultiply.html
BibTeX
@misc{reference.wolfram_2026_noncommutativemultiply, author="Wolfram Research", title="{NonCommutativeMultiply}", year="2025", howpublished="\url{https://reference.wolfram.com/language/ref/NonCommutativeMultiply.html}", note=[Accessed: 12-June-2026]}
BibLaTeX
@online{reference.wolfram_2026_noncommutativemultiply, organization={Wolfram Research}, title={NonCommutativeMultiply}, year={2025}, url={https://reference.wolfram.com/language/ref/NonCommutativeMultiply.html}, note=[Accessed: 12-June-2026]}