控制表达式中变量的顺序

kir*_*gum 3 wolfram-mathematica

在Mathematica中,您如何更改变量的重要性顺序?例如:如果我输入b + c + a + d,我得到一个+ b + c + d但我希望b和d先于其他变量.所以我得到b + d + a + c

请注意,我想在+非交换的地方使用它

Sim*_*mon 5

首先,您需要定义一个排序函数,如:

In[1]:= CPOrdering[a]=3;
CPOrdering[b]=1;
CPOrdering[d]=2;
CPOrdering[c]=4;
Run Code Online (Sandbox Code Playgroud)

虽然,对于更复杂的例子,你应该比这更聪明 - 即使用模式匹配.

然后你可以使用

In[5]:= CirclePlus[a,b,c,d]
SortBy[%,CPOrdering]
Out[5]= a\[CirclePlus]b\[CirclePlus]c\[CirclePlus]d
Out[6]= b\[CirclePlus]d\[CirclePlus]a\[CirclePlus]c
Run Code Online (Sandbox Code Playgroud)

然后可以使用类似的东西自动化

CPOrdering[a_, b_] := CPOrdering[a] < CPOrdering[b]
CirclePlus[a__] /; (!OrderedQ[{a}, CPOrdering]) := CirclePlus@@SortBy[{a}, CPOrdering]
Run Code Online (Sandbox Code Playgroud)