2017-05-27 14 views
0

sympyには新しく、式を計算するのに使用しようとしていますが、時には.subs()関数だけを使用するか、.evalf()整数値。Sympy - 式が評価されない

##--IMPORT 
from mpmath import * 
from sympy import * 
from sympy.parsing.sympy_parser import parse_expr 

x = symbols("x") 

_fOfX = "e**x + x + 1" 

if __name__== "__main__": 
    #Function to sympy expression 
    _sympyFunction = sympify(_fOfX) 
    #Calcolo la derivata prima 
    _dPrima = diff(_sympyFunction,x,1) 
    _dPrima = _dPrima.subs(x,5) 

    print(_dPrima.evalf()) 

知りたい人は、はい、文字列を解析して関数を取得する必要があります。

答えて

0

問題はsympyは、それが象徴xとしてxを扱うと同じように、exp(1)として、しかしシンボルeとしてeを解釈することはありませんということです。あなたがsympyにあなたが欲しいものを理解したければ、exp(1)のintsteadをeと書くことができます。

はsympyだから何を行うことができますがexp(1)であなたの文字列でeを交換するか、後でそれを置き換えるのいずれかであるがstring1とstring2の

import sympy as sym 

string1 = "e" 
string2 = "exp(1)" 

sym_string1 = sym.sympify(string1) 
sym_string2 = sym.sympify(string2) 

print(type(sym_string1)) 
print(type(sym_string2)) 

e = sym.symbols('e') 
print(type(sym_string1.subs(e, sym.exp(1)))) 

を解釈する方法については、以下の例を参照してください。あなたのコードは、例えば次のようになります。

from mpmath import * 
from sympy import * 
from sympy.parsing.sympy_parser import parse_expr 

x = symbols("x") 

_fOfX = "e**x + x + 1" 

if __name__== "__main__": 
    #Function to sympy expression 
    _sympyFunction = sympify(_fOfX) 
    #Calcolo la derivata prima 
    _dPrima = diff(_sympyFunction,x,1) 
    _dPrima = _dPrima.subs(x,5) 
    #Replace e with exp(1) 
    e = symbols('e') 
    _dPrima = _dPrima.subs(e, exp(1)) 

    print(_dPrima.evalf()) 
+0

「mpath import *」には、eの定義は含まれていませんか? – Luke84

+1

それはインポートされますが、sympyはそれについてどのように知っていますか? Sympyはあなたがインポートした他のすべてのパッケージを扱うことができません。あまりにも多くの、そして互換性のないパッケージでさえあります。だからそれは自分自身を使うだけで、それは自分の定義です。常に 'import *'を注意して使用してください。あなたが 'numpyからのインポート* 'を持っていると想像してください。そして、あなたは 'e'の二つの独立した(そして技術的な点では異なる)定義に終わるでしょう。 – Hannebambel

関連する問題