2013-03-18 33 views
8

Ich versuche verschiedene Optimierungsmethoden zu kodieren, um sie zu überarbeiten. Ich möchte in der Lage sein, SymPy zu verwenden, um eine Funktion mit einer beliebigen Anzahl von Variablen an einem gegebenen Punkt auszuwerten, wobei die Koordinaten des Punktes in einem Array gespeichert werden.Auswerten einer Funktion an einem Punkt in SymPy

Zum Beispiel möchte ich f(x,y) = 3*x**2 - 2*x*y + y**2 + 4*x + 3*y an der Stelle b = [1,2] bewerten. Aber ich würde wirklich gerne eine allgemeine Art und Weise, es zu tun, die eine Funktion mit einer beliebigen Anzahl von Variablen und eine angemessene Länge Array als der Punkt, der als bewertet werden kann, so sympy.evalf(f, subs = {foo}) ist nicht wirklich sehr nützlich.

+0

Könnten Sie Karte() verwenden? http://docs.python.org/2/library/functions.html#map – Samizdis

+0

http://Whathaveyoutried.com –

+0

Willkommen bei SO! Es wird empfohlen, den Code und einige Details zu dem, was du versucht hast, hier zu lesen. Lies bitte die FAQ und hoffe, dass du bessere Antworten bekommst! – span

Antwort

4

Sie arbeiten mit SymPy Expression Trees, nicht mit Funktionen. Auf jedem Ausdruck können Sie tun:

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

Vielen Dank - wo finde ich die Dokumentation zu diesen Befehlen? Ich würde lieber verstehen, was sie tun, anstatt nur wörtlich zu kopieren, ohne zu verstehen! –

+1

http://docs.sympy.org als Ganzes. Die Dokumentation könnte besser sein. – Krastanov

1

würde ich auch erwarten, dass dies leichter sein, zu tun, aber hier ist eine gute Lösung:

Wenn Sie kennen die Symbolnamen ('x', 'y', zum Beispiel), Sie eine dict on the fly erstellen zip mit:

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'])' kann geschrieben werden als 'Symbole ('x, y')' – Krastanov

+0

Danke, @Krastanov, reparierte es. – askewchan

+0

Fehler ''Modul' Objekt ist nicht aufrufbar' – Abolfazl

Verwandte Themen