簡體   English   中英

在 SymPy 中的某個點評估 function

[英]Evaluating a function at a point in SymPy

我正在嘗試編寫各種優化方法,作為一種修改方式。 我希望能夠使用 SymPy 來評估 function 在給定點具有任意數量的變量,其中點的坐標存儲在數組中。

例如,我想評估f(x,y) = 3*x**2 - 2*x*y + y**2 + 4*x + 3*yb = [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和符號xy

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM