Wolfram mathematica 计算出提升到幂的GCD
使用Mathematica(7节)基本上我想带一个这样的表达式Wolfram mathematica 计算出提升到幂的GCD,wolfram-mathematica,polynomial-math,greatest-common-divisor,factorization,Wolfram Mathematica,Polynomial Math,Greatest Common Divisor,Factorization,使用Mathematica(7节)基本上我想带一个这样的表达式 (x + x^2 + x^3)^4 到 将GCD这样的术语从一个被提升为幂的表达式中去掉的最佳方式是什么;然后将该术语放在括号外,并保留其提升到的指数值。在取出之前,它必须知道该值被提升到一个幂。这是我的尝试 In[28]:= example = (x + x^2 + x^3)^4 Out[28]= (x + x^2 + x^3)^4 In[37]:= gcdVar = PolynomialGCD[Sequence @@ Le
(x + x^2 + x^3)^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
Factor@Expand对于给定的示例,似乎可以执行所需的操作。你需要一张支票吗 更一般的解决方案
Factor@Expand[(x + x^2 + x^3)^4]
Out[8]= x^4 (1 + x + x^2)^4
(我使用的是Mathematica 7)这个答案提供了对评估的更多控制,以及我将来想做的其他事情的等式的每个元素,所以我将选择这个作为答案。TomD的答案也很好,也很有用。实际上,
Factor
在这种情况下可以单独完成。@rcollyer谢谢!我错过了
Factor@Expand[(x + x^2 + x^3)^4]
Out[8]= x^4 (1 + x + x^2)^4