4

使用 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

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

4

2 回答 2

4

对于给出的示例,Factor@Expand 似乎可以执行您想要的操作。您需要更通用的解决方案吗?

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

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

(我正在使用 Mathematica 7)

于 2011-01-02T21:12:21.650 回答
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
于 2011-01-02T18:14:15.927 回答