2016-10-25 15 views
2

私はアルゴリズムを実装しています。その中で、pとqを互いに素で、多項式f(x)= p(x)q(x)を得る必要があります。もちろん、sympy.factorを使用することもできますが、おそらくsympy.factorの結果の要素のリストを返す関数を作成したいと考えています。例えば、sympy.factorの因子リストを取得する

x = sympy.Symbol('x') 
y = sympy.Symbol('y') 
g = sympy.Poly(y**4 + x*y**3 + y**2 + x*y, y) 
sympy.factor(g) 

ので、おそらく、私は、文字列を解釈し、リスト[Y、X + Yをレンダリング括弧の間に分割するパーサを構築できる

y*(x + y)*(y**2 + 1) 

をスローy * * 2 + 1]、私は知りたいです:は簡単な方法はありますか?

+2

'g.factor()。args'についてはどうですか? – Stelios

+0

それについて知らなかった!、ありがとう。それは問題を解決します。 – Miguelgondu

答えて

3

factor_listを探していますが、要因の構造化リストが返されます。 Pythonの2でのPython 3のこの特定のpolynomailとbugがありますように残念なことに、それは見えます、私は最初の要素は定数係数である

In [1]: factor_list(y**4 + x*y**3 + y**2 + x*y, y) 
Out[1]: 
⎛ ⎡     ⎛ 2  ⎞⎤⎞ 
⎝1, ⎣(y, 1), (x + y, 1), ⎝y + 1, 1⎠⎦⎠ 

を取得します。 2番目は(factor, power)のペア(最終式はconstant * factor**power * ... * factor**power)です。

+0

さらに、多項式g(x)= x + yを渡すと、g.factor()。args reutrns(y、x)が返されます。それはどういう意味ですか?g.factor()をより一般的に解釈するにはどうすればよいですか?私は別の簡単な質問があります:多項式が分解を持つかどうかをどうやって速やかにsympyに伝えることができますか?、ありがとう、すべての迷惑をおかけして申し訳ありません。 – Miguelgondu

+0

'.args'は式をそのコンポーネントに分割します。 'x + y'は' Add'なので、argsは '(x、y)'です。 http://docs.sympy.org/latest/tutorial/manipulation.htmlを参照してください。式を常に製品として分割するには、 'Mul.make_args'を使います。 – asmeurer

+0

あなたの他の質問に答えるために、 'factor'は常に既約要因を返します。したがって、 'factor'が因子を返さない場合、多項式は既約です。 'Poly.is_irredubicle'を使うこともできます。これは完全分解を試みる前にいくつかの単純還元不能性テストを行います。 – asmeurer

関連する問題