2013-03-18 10 views
8

私は、さまざまな最適化メソッドをコーディングして、改訂の方法を試みています。私はSymPyを使って、ポイントの座標が配列に格納されている任意の点で任意の数の変数を持つ関数を評価できるようにしたいと考えています。SymPyのポイントで関数を評価する

たとえばb = [1,2]f(x,y) = 3*x**2 - 2*x*y + y**2 + 4*x + 3*yを評価したいと思います。しかし、私は実際にそれを行う一般的な方法が好きです。それは、任意の数の変数と適切な長さの配列を評価するポイントとして扱うことができるので、sympy.evalf(f, subs = {foo})はあまり役に立ちません。

+0

マップ()を使用するだけでいいですか? http://docs.python.org/2/library/functions.html#map – Samizdis

+0

http://Whathaveyoutried.com –

+0

ようこそ!あなたが試したことについてのコードといくつかの詳細はこちらをお勧めします。FAQを読んでください。うまくいけば、より良い答えを得ることができます! – span

答えて

4

あなたは、関数ではなく、SymPy式ツリーで作業しています。あなたが行うことができます任意の式で:

>>> vars = sorted(expression.free_symbols) 
>>> evaluated = expression.subs(*zip(vars, your_values)) 
+0

ありがとうございます - これらのコマンドに関するドキュメントはどこにありますか?私はむしろ、彼らが理解することなく逐語的にコピーするのではなく、何をするのかを理解したいと思っています –

+1

http://docs.sympy.org全体として。ドキュメンテーションはより良いかもしれません。 – Krastanov

1

私もこれを行うことが容易になることを期待するが、ここでは良い回避策があります:

あなたはシンボル名('x''y'、例えばを)知っている場合は、あなたをzip

fvars = sympy.symbols('x, y') #these probably already exist, use: fvars = [x,y] 

b = [1,2] 
sympy.evalf(f, subs = dict(zip(fvars,b))) 
+2

'map(sympy.Symbol、['x'、 'y'])は' symbols( 'x、y') 'と書くことができます' – Krastanov

+0

ありがとう、@Krastanov、それを修正しました。 – askewchan

+0

エラー 'module 'オブジェクトは呼び出し可能ではありません' – Abolfazl