I need to write a func开发者_如何学Gotion(s) that completely expands noncommutative multiplication over addition?
For example: a ** (b + c^2) would expand to a ** b + a ** c^2 and similarly from the right.I am using ReplaceRepeated (.//). Since I am using NonCommutativeMultiply instead of Times, Expand does not work. I was using the NCAlgebra package which has NCExpand, however ReplaceRepeated does not work when using this package (as stated in the NCAlgebra documentation...argh).
To avoid breaking ReplaceRepeated , I need to code my own NCExpand that is not going to conflict.
All ideas are welcome, thanks...
Try this package which includes a noncommutative Expand as well as other functions rewritten for NC calculations.
From that package:
GExpand[a_, patt___] := Expand[a //. {x_NonCommutativeMultiply :> Distribute[x]}, patt];
In[1] := GExpand[a ** (b + c^2)]
Out[1] := a ** b + a ** c^2
In[2] := GExpand[a ** (b + c^2)] //. a -> foo
Out[2] := foo ** b + foo ** c^2
The newest version of NCAlgebra supports ReplaceRepeated
through NCReplaceRepeated
.
精彩评论