2016-05-14 11 views
3

Kann eine mathematische Funktion direkt aus der Funktionsimplementierung ausgegeben werden?Darstellen einer Funktion durch eine mathematische Funktion

class MyFunction: 
    def __init__(self, func): 
     self.func = func 
    def math_representation(self): 
     # returns a string representation of self.func 

f = lambda x: 3*x**2 
myFunc = MyFunction(f) 
print(myFunc.math_reprentation()) #prints something like 3*x**2 

Natürlich ist die Konstruktion des Objekts mit der Darstellung als Parameter möglich, und ist eine triviale Lösung. Aber die Idee ist, diese Repräsentation zu generieren. Ich könnte auch die Funktion mit Objekten erstellen, die die mathematischen Operationen darstellen, aber die Idee ist, dies mit einer regulären (Lambda) Funktion zu tun.

Ich sehe wirklich keinen Weg dafür, aber ich bin neugierig. Vielen Dank für jede Hilfe und Anregung

+5

Nicht direkt so, aber Sie könnten zu etwas, das Sie gerne verwenden [Sympy] (http://docs.sympy.org/latest/modules/functions/index.html) – L3viathan

+0

Wenn Sie Ihre Funktionen, z erlauben Polynome, dann ist es ziemlich einfach, es selbst zu tun. –

+0

Ich habe keine Einschränkungen für die Funktion, aber die Sympy-Bibliothek scheint für meine Bedürfnisse in Ordnung zu sein. Anscheinend kann ich meine Funktion konstruieren und die mathematische Darstellung erhalten und dann die Lambda-Funktion erzeugen, die ich brauche, um mein Programm auszuführen. Vielen Dank für Ihre Hilfe ! – MPikkle

Antwort

5

Wie gesagt, können Sie SymPy verwenden, wenn Sie diesen komplexer sein wollen, aber für einfache Funktionen (und vertrauenswürdige Eingaben), könnten Sie so etwas tun:

class MathFunction(object): 
    def __init__(self, code): 
     self.code = code 
     self._func = eval("lambda x: " + code) 
    def __call__(self, arg): 
     return self._func(arg) 
    def __repr__(self): 
     return "f(x) = " + self.code 

Sie können es wie folgt verwenden:

>>> sq = MathFunction("x**2") 
>>> sq 
f(x) = x**2 
>>> sq(7) 
49 

das ist ein bisschen eingeschränkt, natürlich (nur die Variable „x“ genannt, und nur ein Parameter), aber es kann natürlich erweitert werden.

+0

Ich mag diese genaue Lösung nicht wirklich, aber die SymPy-Bibliothek ist in Ordnung! Vielen Dank. – MPikkle

Verwandte Themen