2016-05-14 12 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 

パラメータとして表現してオブジェクトを構築することが可能であり、自明な解です。しかし、その考え方はこの表現を生成することです。 数学演算を表すオブジェクトで関数を構築することもできますが、通常の(ラムダ)関数で行うことが考えられます。

私は本当にこれが起こる方法はありませんが、私は興味があります。任意のヘルプや提案を おかげ

+5

はない、しかし、あなたはあなたの機能を制限した場合、あなたはあなた[Sympy](http://docs.sympy.org/latest/modules/functions/index.html)に – L3viathan

+0

を使用してのようなものになるかもしれない、例えばのみ多項式を許したら、自分でそれを行うのはかなり簡単です。 –

+0

私はこの機能に何ら制限はありませんが、Sympyライブラリは私のニーズに適しているようです。どうやら、私は自分の関数を構築し、数学的表現を得て、私のプログラムを実行するのに必要なラムダ関数を生成することができます。ご助力ありがとうございます ! – 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」と呼ばれる変数、およびパラメータを1つだけ使用して)ですが、それはすることができ、もちろん、拡大しました。

直接そのような
+0

私はこの正確な解決法が本当に好きではありませんが、SymPyライブラリは問題ありません!どうもありがとうございました。 – MPikkle