![](/img/trans.png)
[英]Loop through a list in Python, increasing the values whilst also moving through the list on each iteration
[英]Python: Increasing number of symbolic functions for each iteration of a loop
我一般是編程的初學者,但我對 ANSYS APDL 語言(Fortran 衍生語言)和 Python 有點熟悉。 本質上,我正在嘗試為循環中的每次迭代創建一個新的符號函數。 據我所知,Python(特別是 sympy)不能創建一個數組或符號函數列表。 例如,在 APDL 中,我可能會這樣寫:
*do,i,1,3
f%i% = i*x + 2*i*y
*enddo
這會給我 3 個函數: f1 = x + 2y, f2 = 2x + 6y, f3 = 3x + 9y
所以我想知道 %i% 功能是否有等價的 Python,或者是否有一個簡單的解決方法我可以利用的 Python。
我的最終目標是將所有這些功能結合在一起,以在仍處於循環中的情況下解決系統問題。 每次迭代都會增加系統中方程和變量的數量,直到滿足某些標准。 我可以用psi = sympy.Array(sympy.symbols('psi0:%d'%i))
增加變量的數量,但我還沒有找到一種方法來用符號函數來做到這一點。
如果函數的名稱對您來說無關緊要,您可以創建 lambda 表達式並將它們存儲在列表中:
funcs = []
for i in range(8):
new = lambda x,y : i*x + 2*i*y
funcs.append(new)
然后你可以打電話給他們
>>> x, y = 2, 3
>>> funcs[0](x, y)
56
使用 sympy,您可以執行以下操作(請注意,Python 列表中的索引從 0 開始):
from sympy import symbols
x, y = symbols('x y')
num = 3
f = [i*x + 2*i*y for i in range(1, num+1)]
print(f[0])
print(f[1])
print(f[2])
輸出:
x + 2*y
2*x + 4*y
3*x + 6*y
要“調用”這樣的 sympy 函數,請將其變量替換為值。 值可以是常量,也可以是可能包含(其他)變量的表達式。
a = symbols('a')
print(f[0].subs({x: 7, y: 8}))
print(f[1].subs({x: a, y: a + 4}))
print(f[2].subs({x: 2*a, y: 3*a + 5}))
輸出:
23
6*a + 16
24*a + 30
您可以創建一個函數列表並通過索引調用它們。
functionList = []
for i in range(10):
def func(x,y):
return i * x + 2 *i *y
functionList.append(func)
functionList[0](4,5)
functionList[1](1,5)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.