我最近是一名进行科学计算的学生,通常,我使用odeint函数来求解微分方程,现在我需要求解具有100个变量的微分方程组。如果我遵循以前的python编程风格,我会表现得很像这个:
def XFunction(X,t,sets):
x1,x2,x3,x4,,,,,,x100=X
lambd=sets
return np.array([equation1,equation2,equation3,,,,,equation100])
但是这种方法花费的时间太长,有没有更有效的方法呢?
答案 0 :(得分:0)
是的,使用这样的整数后缀表示您可能想要使用序列(如列表或数组),但映射(如字典)也可以使用。因此,您可以在需要时编写x1,x2,x3...
而不是X[0], X[1], X[2]...
,而无需先将它们拉出本地。 X可能已经是程序中的数组。
如果只是可迭代的而不是序列,则可以先将其保存在列表中,
X = [*X]
您可以使用下标运算符X[i]
。
您通常不会在Python中“声明”变量,这是赋值所隐含的,尽管您可以通过给它(类型)注解来进行赋值来声明。
[equation1, ...]
部分也许可以通过列表理解完成,这类似于数学集合理解,但是是有序的。
这是一个带有单个映射和过滤步骤的愚蠢示例。 (您可以有多个过滤器,也可以没有过滤器,但是必须至少使用一个循环。)
[x**2 for x in X if x % 2 == 0]
此列表理解将生成X
元素在其中偶数的所有正方形的列表。
我不知道您的应用程序需要什么公式集,但是如果可以用X
对其进行参数化,则可以通过这种方式来完成。