Вынести НОД, возведенный в степень

Используя Mathematica (v.7), в основном я хочу привести такое выражение

(x + x^2 + x^3)^4

to

x^4 (1 + x + x^2)^4

Как лучше всего взять такой термин, как НОД, из выражения, которое возведено в степень и находится в факторизованной форме; затем поместите этот термин за скобки и сохраните значение показателя степени, до которого оно было возведено. Он должен был бы знать, что значение возводится в степень, прежде чем вынимать его. Вот моя попытка.

In[28]:= example = (x + x^2 + x^3)^4

Out[28]= (x + x^2 + x^3)^4

In[37]:= gcdVar = PolynomialGCD[Sequence @@ Level[example, {2}]]

Out[37]= x

In[40]:= step1 = Map[Divide[#, gcdVar] &, example, {2}]

Out[40]= (1 + x + x^2)^4

In[55]:= step2 = Times[step1, Power[gcdVar, Last[Level[example, {1}]]]]

Out[55]= x^4 (1 + x + x^2)^4

Я рассматривал все различные функции, связанные с этой областью, например; Собирайте, Факторируйте, Расширяйте, Упрощайте, Решайте. Я не думаю, что любой из них может произвести результат, который я хотел. Есть ли встроенный, более эффективный, масштабируемый и более короткий способ сделать это, возможно, используя сопоставление шаблона/формы?




Ответы (2)


Это делает то, что вы делаете быстро и грязно, но в одной строке:

example /. Power_[Plus_[f__], k_] :> 
           (PolynomialGCD@f)^k Simplify@(Plus@f/PolynomialGCD@f)^k

Это не очень надежно, и вам лучше создать свой собственный небольшой модуль, который проверяет такие вещи, как наличие наибольшего общего делителя.

РЕДАКТИРОВАТЬ: вы можете добавить некоторую встроенную проверку следующим образом:

example /. Power_[Plus_[f__], k_] /; !(PolynomialGCD@f === 1) :> 
           (PolynomialGCD@f)^k Simplify@(Plus@f/PolynomialGCD@f)^k
person Timo    schedule 02.01.2011
comment
Этот ответ обеспечивает больший контроль над оценкой и каждым элементом уравнения для других вещей, которые я хотел бы сделать в будущем, поэтому я выберу это в качестве ответа. Ответ TomD также хорош и полезен. - person dbjohn; 04.01.2011

Factor@Expand делает то, что вы хотите для данного примера. Вам нужно более общее решение?

 Factor@Expand[(x + x^2 + x^3)^4]

    Out[8]= x^4 (1 + x + x^2)^4

(Я использую Mathematica 7)

person tomd    schedule 02.01.2011
comment
На самом деле, в этом случае Factor сделает это один. - person rcollyer; 16.02.2011
comment
@ rcollyer Спасибо! я пропустил это - person tomd; 17.02.2011