2016-05-14 83 views
3

是否可以直接從函數實現中輸出數學函數?用數學函數表示函數

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 

當然,以表示作爲參數構造對象是可能的,並且是一個簡單的解決方案。但是這個想法是生成這種表示。 我也可以用代表數學運算的對象來構建函數,但想法是在常規(lambda)函數上進行。

我真的沒有看到這種情況發生,但我很好奇。 感謝您的幫助和建議

+5

並非如此,但是您可能會使用[Sympy](http://docs.sympy.org/latest/modules/functions/index.html) – L3viathan

+0

如果您限制了您的功能,例如僅限於允許多項式,那麼你自己做這件事相當容易。 –

+0

我對這個函數沒有任何限制,但是Sympy庫似乎對我的需求很好。顯然,我可以構造函數並獲得數學表示,然後生成我需要運行程序的lambda函數。非常感謝您的幫助 ! – MPikkle

回答

5

就像我說的,你可以使用SymPy,如果你想這是比較複雜的,但對於簡單的功能(和值得信賴的輸入),你可以做這樣的事情:

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 

您可以使用它像這樣:

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

這是一個有點限制,當然(僅使用一個名爲「X」的變量,只有一個參數),但它可以,當然,擴大。

+0

我不太喜歡這個確切的解決方案,但SymPy庫很好!非常感謝你。 – MPikkle