我正在编写一个函数来解决任意数量的联立方程 . 方程的数量由函数的一个参数设置,每个方程由许多符号构成 - 与方程一样多的符号 . 这意味着我不能简单地对方程式进行硬编码,甚至不需要将方程组合在一起所需的符号;该函数需要能够处理任意数量的方程 . 所以,我的问题是,如何生成符号列表?
我有一个可能的解决方案,但我的直觉告诉我,它不会非常有效 . 如果有更好的方法,请告诉我 .
我是SymPy的新手,我仍然在摸索着 . 据我所知,符号需要用字符串定义 . 因此,我可以通过在字母上添加递增数字(例如't0','t1'等)来生成一系列字符串,将它们添加到列表中,然后使用这些字符串作为参数创建符号 . 这些符号本身将存储在列表中,并用于生成方程式 .
def solveEquations(numEquations):
symbolNameList = []
symbolList = []
equationList = []
for i in range(numEquations):
name = 't' + str(i)
symbolNameList.append(name)
symbolList.append(Symbol(name))
for i in range(numEquations):
equation = 0
for sym in symbolList:
equation += sym ** i # Or whatever structure the equation needs
equationList.append(equation)
#Then go on to solve the equations...
这是最好的方法吗,还是有更有效的方法?
5 回答
你的方法没问题,尽管
name
的名字来自name
.此外,您可以更简洁地表达符号创建(尽管不会更有效),例如:
但是,对于您的用例(临时变量),虚拟变量可能是要走的路:
这实际上并没有更高效,因为
Dummy
类内部也使用计数器生成唯一的名称,但它更清晰,更清晰 .你可以创建
dict
的子类,它自动返回Symbols
:numbered_symbols("t")
将返回生成t0
,t1
,t2
等的生成器 . 您可以使用start
参数选择不同的起始值 . 如果要使用虚拟变量,请使用numbered_symbols("t", cls=Dummy)
.symbols
函数可用于轻松生成符号列表使用
locals()
和字典理解,您可以迭代生成具有相似名称的符号和python局部变量 . 例如:检查它是否有效: