sympy var und diff mit math.log verwenden?
Verfasst: Dienstag 18. Dezember 2018, 12:47
Hallo allerseits,
Ich habe eine kurze funktion geschrieben, die mir aus zwei inputs (Variable und Formel) die partielle ableitung nach der Variablen zurück geben soll:
Über folgenden Aufruf läuft das dann:
wobei ich auch das erhalte, das ich will. Einen Error bekomme ich allerdings, wenn ich mit math. Operatoren wie math.log() arbeite:
Habt ihr eine Idee, wie ich das Lösen kann?
Der Punkt ist, dass der "eval()" aufruf mit "math.log(x)" arbeiten kann, wenn man x als float oder integer definiert. Kann sympy.diff einfach kein log() ableiten?
Danke für jede Hilfe!
Und ja ich weiß, eval() wird nicht gerne gesehen... allerdings sind glaube ich 'Sicherheitslücken' in meinem kleinen mathe progrämmchen nicht so tragisch
Ich habe eine kurze funktion geschrieben, die mir aus zwei inputs (Variable und Formel) die partielle ableitung nach der Variablen zurück geben soll:
Code: Alles auswählen
from math import log
from sympy import var, diff
def erzeuge_var(name, value):
globals()[name] = value
def part_abl(va, formel):
part_abl = []
for i in va:
erzeuge_var(i, var(i))
for i in va:
f = eval(formel)
part_abl.append(f.diff(i))
return part_abl
Code: Alles auswählen
v = ['a', 'b']
f = 'a**3+b
part_abl(v, f)
>>> [3*a**2, 1]
Code: Alles auswählen
v = ['a', 'b']
f = 'log(a)'
part_abl(v, f)
>>> Traceback (most recent call last):
File "<ipython-input-41-e5b07169c79e>", line 18, in <module>
part_abl(v, f)
File "<ipython-input-41-e5b07169c79e>", line 12, in part_abl
f = eval(formel)
File "<string>", line 1, in <module>
File "/home/leonfrcom/.local/lib/python3.6/site-packages/sympy/core/expr.py", line 256, in __float__
raise TypeError("can't convert expression to float")
TypeError: can't convert expression to float
Der Punkt ist, dass der "eval()" aufruf mit "math.log(x)" arbeiten kann, wenn man x als float oder integer definiert. Kann sympy.diff einfach kein log() ableiten?
Danke für jede Hilfe!
Und ja ich weiß, eval() wird nicht gerne gesehen... allerdings sind glaube ich 'Sicherheitslücken' in meinem kleinen mathe progrämmchen nicht so tragisch
