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 に答える