Wolfram mathematica 使用模式收集Mathematica中的术语

Wolfram mathematica 使用模式收集Mathematica中的术语,wolfram-mathematica,Wolfram Mathematica,使用Mathematica,我想根据x和y的指数从(1+a+x+y)^4中收集术语,因此 (1 + a + x + y)^4 = (...)x^0 y^0 + (...)x^1 y^0 + (...)x^0 y^1 + ... 有一个很好的例子,我试着模仿: D[f[Sqrt[ x^2 + 1 ]], {x, 3}] Collect[%, Derivative[ _ ][ f ][ _ ], Together] 它收集相同顺序的派生项(和f的相同参数) 有人能解释为什么下面的模仿不起作用吗

使用Mathematica,我想根据
x
y
的指数从(1+a+x+y)^4中收集术语
,因此

(1 + a + x + y)^4 = (...)x^0 y^0 + (...)x^1 y^0 + (...)x^0 y^1 + ...
有一个很好的例子,我试着模仿:

D[f[Sqrt[ x^2 + 1 ]], {x, 3}]
Collect[%, Derivative[ _ ][ f ][ _ ], Together]
它收集相同顺序的派生项(和f的相同参数)

有人能解释为什么下面的模仿不起作用吗

Collect[(1 + a + x + y)^4, x^_ y^_]
给予


对解决方案有什么建议吗?

Collect
是一个结构化操作,因此需要首先展开

Collect[(1 + a + x + y)^4 // Expand, x^_ y^_]
根据,您必须使用多项式。然而,即便如此,这也不是一个简单的问题。使用
Collect
您可以按两个变量分组,但这取决于您对它们的排序方式:

In[1]:= Collect[ (1 + a + x + y)^4 // Expand, {x, y}]
Out[1]:= 1 + 4 a + 6 a^2 + 4 a^3 + a^4 + x^4 + 
         (4 + 12 a + 12 a^2 + 4 a^3) y + (6 + 12 a + 6 a^2) y^2 + 
         (4 + 4 a) y^3 + y^4 + x^3 (4 + 4 a + 4 y) + 
         x^2 (6 + 12 a + 6 a^2 + (12 + 12 a) y + 6 y^2) + 
         x (4 + 12 a + 12 a^2 + 4 a^3 + (12 + 24 a + 12 a^2) y + 
         (12 + 12 a) y^2 + 4 y^3)
它提取出
x
的任何公因子,从而得到
y
中的多项式系数。如果改用
{y,x}
Collect
将提取
y
的公因子,并且在
x
中有多项式

或者,您可以提供一个模式,
x^uy^
,而不是
{x,y}
,但至少在v.7中,这不会收集任何内容。问题是模式
x^y^
要求存在指数,但在
xy^2
x^2y
等术语中,指数至少隐含在一个变量中。相反,我们需要指定一个值是可接受的,即使用
x^\。y^.
其中

Out[2]:= 1 + 4 a + 6 a^2 + 4 a^3 + a^4 + 4 x + 12 a x + 12 a^2 x + 4 a^3 x + 
         6 x^2 + 12 a x^2 + 6 a^2 x^2 + 4 x^3 + 4 a x^3 + x^4 + 4 y + 
         12 a y + 12 a^2 y + 4 a^3 y + (12 + 24 a + 12 a^2) x y + 
         (12 + 12 a) x^2 y + 4 x^3 y + 6 y^2 + 12 a y^2 + 6 a^2 y^2 + 
         (12 + 12 a) x y^2 + 6 x^2 y^2 + 4 y^3 + 4 a y^3 + 4 x y^3 + y^4
但是,这只收集两个变量都存在的术语。老实说,我似乎无法想出一种模式,使
收集
功能如您所愿,但我找到了另一种选择

我会改为使用,尽管它确实需要一些后处理来将结果恢复为多项式形式。用你的多项式,你得到

In[3]:= CoefficientRules[(1 + a + x + y)^4, {x, y}]
Out[3]:= {{4, 0} -> 1, {3, 1} -> 4, {3, 0} -> 4 + 4 a, {2, 2} -> 6, 
          {2, 1} -> 12 + 12 a, {2, 0} -> 6 + 12 a + 6 a^2, {1, 3} -> 4, 
          {1, 2} -> 12 + 12 a, {1, 1} -> 12 + 24 a + 12 a^2, 
          {1, 0} -> 4 + 12 a + 12 a^2 + 4 a^3, {0, 4} -> 1, {0, 3} -> 4 + 4 a, 
          {0, 2} -> 6 + 12 a + 6 a^2, {0, 1} -> 4 + 12 a + 12 a^2 + 4 a^3, 
          {0, 0} -> 1 + 4 a + 6 a^2 + 4 a^3 + a^4}
现在,如果你只对系数本身感兴趣,那么你就完成了。但是,要将其转换回多项式,我会使用

In[4]:= Plus @@ (Out[3] /. Rule[{a_, b_}, c_] :> x^a y^b c)
Out[4]:= 1 + 4 a + 6 a^2 + 4 a^3 + a^4 + 
         (4 + 12 a + 12 a^2 + 4 a^3) x + 
         (6 + 12 a + 6 a^2) x^2 + (4 + 4 a) x^3 + x^4 + 
         (4 + 12 a + 12 a^2 + 4 a^3) y + (12 + 24 a + 12 a^2) x y + 
         (12 + 12 a) x^2 y + 4 x^3 y + (6 + 12 a + 6 a^2) y^2 + 
         (12 + 12 a) x y^2 + 6 x^2 y^2 + (4 + 4 a) y^3 + 
         4 x y^3 + y^4
编辑:仔细考虑后,可以再做一个简化。由于系数是
a
中的多项式,因此它们可能是可分解的。因此,我们不是直接使用
系数规则
给出的,而是使用
系数
来简化:

In[5]:=  Plus @@ (Out[3] /. Rule[{a_, b_}, c_] :> x^a y^b Factor[c])
Out[5]:= (1 + a)^4 + 4 (1 + a)^3 x + 6 (1 + a)^2 x^2 + 4 (1 + a) x^3 + x^4 + 
         4 (1 + a)^3 y + 12 (1 + a)^2 x y + 12 (1 + a) x^2 y + 4 x^3 y + 
         6 (1 + a)^2 y^2 + 12 (1 + a) x y^2 + 6 x^2 y^2 + 4 (1 + a) y^3 + 
         4 x y^3 + y^4
可以看出,通过使用
因子
,系数大大简化,如果将
(1+a+x+y)^4
视为一个简单的三项式,其中包含变量
(1+a)
x
y
,则可以预期这一结果。考虑到这一点,将
1+a
替换为
z
系数规则
给出:

In[6]:= CoefficientRules[(z + x + y)^4, {x, y, z}]
Out[6]:= {{4, 0, 0} -> 1, {3, 1, 0} -> 4, {3, 0, 1} -> 4, 
          {2, 2, 0} -> 6, {2, 1, 1} -> 12, {2, 0, 2} -> 6, 
          {1, 3, 0} -> 4, {1, 2, 1} -> 12, {1, 1, 2} -> 12, 
          {1, 0, 3} -> 4, {0, 4, 0} -> 1, {0, 3, 1} -> 4, 
          {0, 2, 2} -> 6, {0, 1, 3} -> 4, {0, 0, 4} -> 1}
或者,多项式形式

Out[7]:= x^4 + 4 x^3 y + 6 x^2 y^2 + 4 x y^3 + y^4 + 4 x^3 z + 
         12 x^2 y z + 12 x y^2 z + 4 y^3 z + 6 x^2 z^2 + 12 x y z^2 + 
         6 y^2 z^2 + 4 x z^3 + 4 y z^3 + z^4
当您将
z
替换为
(1+a)
时,它会给出与
Out[5]
中所示相同的结果,这是有效的:

In[1]:= Collect[(1 + a + x + y)^4 // Expand, {x^_ y^_, x^_ y, x y^_, x y, x, y}]

Out[1]= 1 + 4 a + 6 a^2 + 
 4 a^3 + a^4 + (4 + 12 a + 12 a^2 + 4 a^3) x + (6 + 12 a + 6 a^2) x^2 + (4 + 
    4 a) x^3 + x^4 + (4 + 12 a + 12 a^2 + 4 a^3) y + (12 + 24 a + 
    12 a^2) x y + (12 + 12 a) x^2 y + 
 4 x^3 y + (6 + 12 a + 6 a^2) y^2 + (12 + 12 a) x y^2 + 
 6 x^2 y^2 + (4 + 4 a) y^3 + 4 x y^3 + y^4
或者,您可以按照以下建议使用
默认值


这可能就是你要找的

In[1]:= TraditionalForm[Collect[(1 + a + x + y)^4 // Expand, {x, y}], 
         ParameterVariables :> {a}]

Out[1]:= x^4+x^3 (4 y+4 a+4)+x^2 (6 y^2+(12 a+12) y+6 a^2+12 a+6)+
         x (4 y^3+(12 a+12) y^2+ (12 a^2+24 a+12) y+4 a^3+12 a^2+12 a+4)+
         y^4+(4 a+4) y^3+(6 a^2+12 a+6) y^2+(4 a^3+12 a^2+12 a+4) y+
         a^4+4 a^3+6 a^2+4 a+1
Plus@@MonomialList[(1+a+x+y)^4,{x,y}]

In[2]:= Collect[(1 + a + x + y)^4 // Expand, {x^_. y^_., x, y}]

Out[2]= 1 + 4 a + 6 a^2 + 
 4 a^3 + a^4 + (4 + 12 a + 12 a^2 + 4 a^3) x + (6 + 12 a + 6 a^2) x^2 + (4 + 
    4 a) x^3 + x^4 + (4 + 12 a + 12 a^2 + 4 a^3) y + (12 + 24 a + 
    12 a^2) x y + (12 + 12 a) x^2 y + 
 4 x^3 y + (6 + 12 a + 6 a^2) y^2 + (12 + 12 a) x y^2 + 
 6 x^2 y^2 + (4 + 4 a) y^3 + 4 x y^3 + y^4
In[1]:= TraditionalForm[Collect[(1 + a + x + y)^4 // Expand, {x, y}], 
         ParameterVariables :> {a}]

Out[1]:= x^4+x^3 (4 y+4 a+4)+x^2 (6 y^2+(12 a+12) y+6 a^2+12 a+6)+
         x (4 y^3+(12 a+12) y^2+ (12 a^2+24 a+12) y+4 a^3+12 a^2+12 a+4)+
         y^4+(4 a+4) y^3+(6 a^2+12 a+6) y^2+(4 a^3+12 a^2+12 a+4) y+
         a^4+4 a^3+6 a^2+4 a+1