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
Odpowiedz
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))
Wielkie dzięki - gdzie mogę znaleźć dokumentację tych poleceń? Wolę zrozumieć, co robią, niż tylko kopiować dosłownie bez zrozumienia! –
http://docs.sympy.org jako całość. Dokumentacja mogłaby być lepsza. – Krastanov
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)))
można po prostu użyć mapy()? http://docs.python.org/2/library/functions.html#map – Samizdis
http://Whathaveyoutried.com –
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