Wolfram mathematica Mathematica中的非对易加展开

Wolfram mathematica Mathematica中的非对易加展开,wolfram-mathematica,Wolfram Mathematica,我需要编写一个函数,将非对易乘法完全扩展到加法? 例如: a**(b+c^2) 将扩展到 a**b+a**c^2 同样地,从右边开始 我正在使用ReplaceRepeated(.//)。因为我使用的是非对易乘法而不是乘法,所以Expand不起作用。我使用的是带有NCExpand的NCAlgebra软件包,但是使用该软件包时,该软件包不起作用(如NCAlgebra文档…argh中所述) 为了避免重复,我需要编写自己的NCExpand代码,这不会产生冲突 欢迎所有想法,谢谢 Try软件包,其中包括一

我需要编写一个函数,将非对易乘法完全扩展到加法?
例如:
a**(b+c^2) 将扩展到
a**b+a**c^2
同样地,从右边开始

我正在使用ReplaceRepeated(.//)。因为我使用的是非对易乘法而不是乘法,所以Expand不起作用。我使用的是带有NCExpand的NCAlgebra软件包,但是使用该软件包时,该软件包不起作用(如NCAlgebra文档…argh中所述)

为了避免重复,我需要编写自己的NCExpand代码,这不会产生冲突

欢迎所有想法,谢谢

Try软件包,其中包括一个非交换扩展以及为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

最新版本的supports
ReplaceRepeated
通过
NCReplaceRepeated

尝试修改/使用中给出的规则。如果您想在规则中使用它们而不是
UpValues
,基本上只需将
:=
s替换为
:>
s。请注意,您可以将上一个问题中的排序打包为与Timo的答案类似的排序:
NCSort[a_]:=a//。规则
@Timo里面也有一些不错的软件包。谢谢你的链接!。你想用这个链接编辑Mathematica工具包问题吗?@belisarius,完成。我之前没有将它添加到列表中,因为坦白地说,Mathematica存在一些固有的问题,使得包不完美(对于这样的东西,应该使用表单)。但是你说得对,里面有很多好吃的东西。@Timo,谢谢,这似乎很管用。我会测试并发回。@Timo:你用过表单吗?去年早些时候我试过——但无法证明花在学习上的时间是为了得到我在数学中可以得到的结果(计算速度较慢)…@西蒙:很久以前有一次。和你一样,我只是接受mma的缓慢而不是花时间切换语言。这并不难学,尤其是当现有的软件包适用于您的问题,并且您不必花费时间编写所有代数规则时。