2011-02-15 42 views
1

我需要編寫一個函數來完全擴展非交換乘法加法?
例如:
一個**(B + C^2) 將擴展爲
一個** B + A ** C^2
並且類似地從右側。Noncommutative在Mathematica中擴展加法

我正在使用ReplaceRepeated(.//)。由於我使用的是NonCommutativeMultiply而不是Times,因此Expand不起作用。我使用的是具有NCExpand的NCAlgebra包,但是當使用此包時,ReplaceRepeated不起作用(如NC代數文檔中所述...... argh)。

爲了避免打破ReplaceRepeated,我需要編寫我自己的NCExpand,這是不會衝突。

所有的想法,歡迎,感謝...

+0

嘗試修改/使用[丹尼爾的回答您的最後一個問題]中給出的規則(http://stackoverflow.com/questions/4988323/mathematica-subscript-simplification-under-noncommunative-multiplication/4998375#4998375)。如果你想在規則中使用它們而不是`UpValues`,你基本上只需要用`:>來代替`:=`s。 – Simon 2011-02-15 09:52:50

+0

請注意,您可以將您上一個問題的排序與Timo的回答相似地排序:`NCSort [a_]:= a //。規則` – Simon 2011-02-16 00:33:49

回答

2

嘗試this包,其中包括一個非交換展開以及改寫爲NC計算等功能。

從該包:

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 
0

NCAlgebra最新版本支持ReplaceRepeated通過NCReplaceRepeated