[英]Evaluating a function at a point in SymPy
我正在嘗試編寫各種優化方法,作為一種修改方式。 我希望能夠使用 SymPy 來評估 function 在給定點具有任意數量的變量,其中點的坐標存儲在數組中。
例如,我想評估f(x,y) = 3*x**2 - 2*x*y + y**2 + 4*x + 3*y
在b = [1,2]
. 但我真的很喜歡一種通用的方法,它可以處理帶有任意數量變量和適當長度數組的 function 作為要評估的點,所以sympy.evalf(f, subs = {foo})
是'真的不是很有用。
您正在使用SymPy表達式樹,而不是函數。 在任何表達式上,您都可以執行以下操作:
>>> vars = sorted(expression.free_symbols)
>>> evaluated = expression.subs(*zip(vars, your_values))
我也希望這樣做會更容易,但是這里有一個很好的解決方法:
如果您知道符號名稱(例如'x'
, 'y'
),則可以使用zip
即時創建dict
:
fvars = sympy.symbols('x, y') #these probably already exist, use: fvars = [x,y]
b = [1,2]
sympy.evalf(f, subs = dict(zip(fvars,b)))
lambdify
是生成 Python 可調用 function 的好選擇,然后您可以使用 numpy arrays。 例如,假設您有 function f
和符號x
和y
:
f2 = lambdify((x, y), f)
import numpy as np
xn = np.arage(0, 2, 0.1)
yn = 3
print(f2(xn, yn))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.