簡體   English   中英

Python:增加循環每次迭代的符號函數數量

[英]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.

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