Ich möchte Gleichungen symbolisch erzeugen, dann sub in Werte mit Typen aus Bibliotheken wie uncertainties
(aber könnte jede Bibliothek mit benutzerdefinierten Typen sein), aber es scheint, dass mit .evalf(subs={...})
Methode mit einem eher ungerade Fehlermeldung:evaluate sympy Ausdruck mit Python-äquivalenten Operationen
>>> from uncertainties import ufloat
>>> from sympy.abc import x
>>> (x**2).evalf(subs={x: ufloat(5,1)})
Traceback (most recent call last):
...
File "<string>", line 1
Float ('5.0')+/-Float ('1.0')
^
SyntaxError: invalid syntax
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<pyshell#116>", line 1, in <module>
(x**2).evalf(subs={x: ufloat(5,1)})
...
sympy.core.sympify.SympifyError: Sympify of expression 'could not parse '5.0+/-1.0'' failed, because of exception being raised:
SyntaxError: invalid syntax (<string>, line 1)
- ich weiß sympy mein Wert seit
str(ufloat(5,1))
mit einem String konvertiert gibt'5.0+/-1.0'
so ist es offensichtlich die String-Darstellung meines Ersatzwert will wie ein symbolischer Ausdruck aussehen wird.
Ich weiß, dass viele sympy Operationen (wie Differenzierung) dies nicht möglich sein würde, zu unterstützen, und es wäre nur möglich, wenn alle freien Symbole, da die beiden Arten schön spielen nicht ersetzt wurden:
>>> x + ufloat(5,1)
Traceback (most recent call last):
File "<pyshell#117>", line 1, in <module>
x + ufloat(5,1)
TypeError: unsupported operand type(s) for +: 'Symbol' and 'Variable'
Aber angenommen, ich lasse keine symbolischen Operationen/Variablen, ist es möglich, einfach einen Sympy-Ausdruck mit den Python-äquivalenten Operationen zu evaluieren?
gut, die sowohl einfacher und Kreisverkehr war dann, erwartete ich dies (mit mehr als einem Argument) ist genau das, was ich brauchte, also werde ich den Code verwenden, der 'lambdify (subs.keys(), expr) zurückgibt (* subsvalues ()) 'vielen Dank! –