将GCD提升为幂

时间:2011-01-02 16:26:06

标签: wolfram-mathematica polynomial-math greatest-common-divisor factorization

使用Mathematica(第7版)基本上我想带一个像这样的表达式

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

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

将GCD这样的术语从一个被提升为权力并且是一个因子形式的表达中取出的最佳方法是什么?然后将该术语放在括号之外并保留它所引用的指数值。它必须知道在取出之前将值提升到一个幂。这是我的尝试。

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 个答案:

答案 0 :(得分:4)

因子@展开似乎可以为您给出的示例执行所需操作。你需要一个吗? 更一般的解决方案

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

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

(我正在使用Mathematica 7)

答案 1 :(得分:3)

这就是你做的快速'n'脏样式,但是在一行中:

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