2016-10-19 7 views
1
私はsympyを使用し、この時点で多項式

sympy.count_roots:で作業型の不一致実多項式

from sympy.abc import x 
from sympy import Poly 
p = Poly(x**4+0.1,x) 

の根の数を計算しようとしています

、pはドメイン「RR」と多項式である:Poly(1.0*x**4 + 0.1, x, domain='RR')

私は間隔で根の数を計算しようとすると、私が手:しかし

p.count_roots(0,2) 
TypeError: unsupported operand type(s) for *=: 'RealElement' and 'PythonRational' 

、私は

を定義した場合

同様

p.count_roots() 
ans: 1 
の作品同様
q = Poly(x**3-1, x) 
ans: Poly(x**3 - 1, x, domain='ZZ') 

q.count_roots(0,2) 
ans: 1 

、私はドメイン全体にpの根の数を求めるならば、私はcount_rootsへの正しい種類を供給するために何をすべき?

答えて

2

可能であれば、シンボリック式の正確な(浮動小数点数の代わりに)数字を使用します(この原理はsympyだけでなく、すべてのシンボリック数学ソフトウェアに当てはまります)。

この場合、定数項0.1は、pの定義で(正確な)比率表現1/10に置き換えることができます。 SimpyはRationalを使用して数値の比を表します(入力1/10はPythonによって浮動小数点除算として解釈され、自動的に0.1に変換されるため)。

次のコードが機能します。

from sympy.abc import x 
from sympy import Poly, Rational 
p = Poly(x**4 + Rational(1,10), x) 
p.count_roots(0,2) 

0

も参照sympy.nsimplify(ほぼ等しい)有理数に、そのような12.21525、例えば、などの任意の浮動小数点数に変換します。