非交换扩展Mathematica中的添加

时间:2011-02-15 08:36:17

标签: wolfram-mathematica

我需要编写一个函数来完全扩展非交换乘法而不是加法?
例如:
a **(b + c ^ 2) 会扩大到 a ** b + a ** c ^ 2
同样来自右边。

我正在使用ReplaceRepeated(.//)。由于我使用NonCommutativeMultiply而不是Times,因此Expand不起作用。我正在使用具有NCExpand的NCAlgebra包,但是当使用此包时,ReplaceRepeated不起作用(如NCAlgebra文档中所述...... argh)。

为了避免破坏ReplaceRepeated,我需要编写自己的NCExpand,它不会发生冲突。

欢迎所有想法,谢谢......

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

最新版本的NCAlgebra支持ReplaceRepeatedNCReplaceRepeated