![](/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.