Согласно Саша, вам нужно Expand
полином для использования Collect
. Однако даже тогда это не так просто проблемы. Используя 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^_ y^_
вместо {x,y}
, но, по крайней мере, в версии 7 это ничего не собирает. Проблема в том, что шаблон x^_ y^_
требует присутствия показателя степени, но в терминах, подобных x y^2
и x^2 y
, показатель степени подразумевается по крайней мере в одной из переменных. Вместо этого нам нужно указать, что значение по умолчанию приемлемо, т.е. используйте 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
Но это собирает только термины, в которых присутствуют обе переменные. По правде говоря, я не могу придумать шаблон, который заставит Collect
функционировать так, как вы хотите, но я нашел альтернативу.
Вместо этого я бы использовал CoefficientRules
, хотя это действительно так. требуется небольшая постобработка, чтобы вернуть результат в полиномиальную форму. Используя свой многочлен, вы получаете
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
, их можно факторизовать. Итак, вместо того, чтобы напрямую использовать то, что дает CoefficientRules
, мы используем Factor
для упрощения:
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
Как видно, коэффициенты значительно упрощаются при использовании Factor
, и этого результата можно было бы ожидать, рассматривая (1 + a + x + y)^4
как простой трехчлен с переменными (1 + a)
, x
и y
. Имея это в виду и заменив 1+a
на z
, CoefficientRules
дает:
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]
.
person
rcollyer
schedule
08.07.2011