Python:为循环的每次迭代增加符号函数的数量

2024-09-28 17:03:43 发布

您现在位置:Python中文网/ 问答频道 /正文

一般来说,我是编程初学者,但我对ansysapdl语言(Fortran的一种派生语言)和Python有点熟悉。 本质上,我正在尝试为循环中的每个迭代创建一个新的符号函数。就我所见,Python(特别是Symphy)无法创建数组或符号函数列表。例如,在APDL中,我可以写:

*do,i,1,3
        f%i% = i*x + 2*i*y
*enddo

这将给我3个函数:f1 = x + 2y, f2 = 2x + 6y, f3 = 3x + 9y 因此,我想知道是否有一个与Python相当的%I%功能,或者Python中是否有一个我可以利用的简单解决方法

我的最终目标是将所有这些函数结合在一起,在循环中解决系统问题。每次迭代都会增加系统中方程和变量的数量,直到满足某些标准。我可以用psi = sympy.Array(sympy.symbols('psi0:%d'%i))增加变量的数量,但是我还没有找到用符号函数来增加变量数量的方法


Tags: 方法函数语言列表数量系统编程符号
3条回答

您只需创建一个函数列表并按索引调用它们

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)

使用Symphy,您可以执行以下操作(请注意,在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

若要“调用”这样一个symphy函数,请将其变量替换为值。值可以是常量,也可以是包含(其他)变量的表达式

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

如果函数名称对您不重要,您可以创建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

相关问题 更多 >