2017-04-25 5 views
0

sympyで平方根法に問題があります。私はこの方法sympify(my_strに)を使用すると、私のプログラムは、SQRTで値を返します。sympyify後のSympy.sqrt(文字列)

>>> y = Symbol('y', positive=True) 
>>> a = 'y**2' 
>>> a = sympify(a) 
>>> a 
y**2 
>>> a = sympy.sqrt(a) 
>>> a 
sqrt(y**2) 

私は方法sympify(my_strに)を使用していない場合は私のプログラムが期待値を返します。

>>> y = Symbol('y', positive=True) 
>>> a = y**2 
>>> a 
y**2 
>>> a = sympy.sqrt(a) 
>>> a 
y 

文字列をシンプレッシングした後、希望する値(sqrt)を返すにはどうすればよいですか?

答えて

2

sympify機能はevalを使用するので、関数のデフォルトlocal引数は常にNoneに設定されています:この関数はevalをを使用していますので、unsanitized入力に を使用すべきではないことを

警告注意を。

すでに定義されたシンボルへのアクセスを得るためにsympifyしたい場合は、明示的locals()辞書を渡すことができます。

>>> a = 'y**2' 
>>> a = sympy.sympify(a, locals=locals()) 
>>> a 
y**2 
>>> sympy.sqrt(a) 
y 

それとも、必要なだけのシンボル(複数可)を含む、より安全な縮小さ辞書を使用します:

>>> a = 'y**2' 
>>> a = sympy.sympify(a, locals={'y': y}) 
>>> sympy.sqrt(a) 
y 
+0

ありがとう – Carlo

関連する問題