使用 Mathematica (v.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

我一直在研究与该领域相关的所有不同功能,例如;收集、分解、扩展、简化、解决。我认为他们中的任何一个都不能产生我想要的输出。
是否有一种内置的、更高效、可扩展和更短的方法可以使用模式/表单匹配来做到这一点?

最佳答案

这做你做的快速 '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

关于wolfram-mathematica - 分解为幂的 GCD,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4579273/

10-11 06:46