2017-05-27 5 views
0

Ich bin neu zu Sympy, und ich versuche, es zu verwenden, um einige Ausdrücke zu berechnen, aber manchmal mit der Funktion .subs() allein, oder gefolgt von .Evalf(), gibt keinen float oder ganzzahlige Werte.Sympy - kann Ausdruck nicht auswerten

##--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()) 

Und für diejenigen, die wissen wollen, ja muss ich eine Zeichenfolge analysieren, um die Funktion zu erhalten.

Antwort

0

Das Problem ist, dass sympy nicht e als exp(1) interpretiert, sondern als Symbol e, so wie es x als Symbol behandelt x. Wenn Sie möchten, dass Sie verstehen, was Sie wollen, können Sie exp(1) anstelle von e schreiben.

das Beispiel siehe unten wie sympy interpretiert string1 und 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)))) 

Also, was Sie tun können, entweder e in der Zeichenfolge mit exp(1) ersetzen ist oder es später ersetzen. Ihr Code könnte zum Beispiel wie folgt aussehen:

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

Sollte nicht die Definition von e, in der 'von mpath Import *' enthalten sein? – Luke84

+1

Es wird importiert, aber wie sollte man es wissen? Sympy kann sich nicht um alle anderen importierten Pakete kümmern, da es zu viele und sogar inkompatible Pakete gibt. Es verwendet also nur sich selbst und seine eigenen Definitionen. Verwenden Sie 'import *' immer mit Vorsicht. Stellen Sie sich vor, Sie hätten auch 'from numpy import *'. Dann würden Sie mit zwei unabhängigen (und von einem technischen Standpunktunterschiedlichen) Definitionen von "e" enden. – Hannebambel

Verwandte Themen