2013-03-18 6 views
8

Próbuję kodować różne metody optymalizacji, jako sposób weryfikacji. Chcę móc używać SymPy do oceny funkcji z dowolną liczbą zmiennych w danym punkcie, gdzie współrzędne punktu są przechowywane w tablicy. Na przykład, chciałbym ocenić f(x,y) = 3*x**2 - 2*x*y + y**2 + 4*x + 3*y w punkcie b = [1,2]. Ale bardzo bym chciał, żeby to był ogólny sposób, który może obsłużyć funkcję z dowolną liczbą zmiennych i odpowiednią tablicą długości jako punktem do oceny, więc sympy.evalf(f, subs = {foo}) nie jest zbyt użyteczny.Ocena funkcji w punkcie w SymPy

+0

można po prostu użyć mapy()? http://docs.python.org/2/library/functions.html#map – Samizdis

+0

http://Whathaveyoutried.com –

+0

Witaj w SO! Kod publikacji i niektóre informacje o tym, co wypróbowałeś, są zalecane tutaj. Przeczytaj FAQ i miej nadzieję, że możesz uzyskać lepsze odpowiedzi! – span

Odpowiedz

4

Pracujesz z drzewkami wyrażeń SymPy, a nie funkcjami. Na każdej wypowiedzi można zrobić:

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

Wielkie dzięki - gdzie mogę znaleźć dokumentację tych poleceń? Wolę zrozumieć, co robią, niż tylko kopiować dosłownie bez zrozumienia! –

+1

http://docs.sympy.org jako całość. Dokumentacja mogłaby być lepsza. – Krastanov

1

Chciałbym również spodziewać się, że jest to łatwiejsze do zrobienia, ale tutaj jest to dobre obejście:

Jeśli znasz nazwy symboli ('x', 'y' np), ty można utworzyć dict w locie przy użyciu 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'])' może być zapisany jako 'symbole ('x, y')' – Krastanov

+0

Dzięki, @Krastanov, poprawione. – askewchan

+0

błąd '' moduł 'obiekt nie jest wywoływalny' – Abolfazl