Според Саша, трябва да 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}
, но поне във v.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