我有一段代码,它为所谓Lorenz95 model(由Ed Lorenz于1995年发明)增加了一个时间步长。它通常作为40-变量模型实现,并显示混沌行为。我已经编写了时间步的算法如下:如何优化python中的时间步进算法?
class Lorenz:
'''Lorenz-95 equation'''
global F, dt, SIZE
F = 8
dt = 0.01
SIZE = 40
def __init__(self):
self.x = [random.random() for i in range(SIZE)]
def euler(self):
'''Euler time stepping'''
newvals = [0]*SIZE
for i in range(SIZE-1):
newvals[i] = self.x[i] + dt * (self.x[i-1] * (self.x[i+1] - self.x[i-2]) - self.x[i] + F)
newvals[SIZE-1] = self.x[SIZE-1] + dt * (self.x[SIZE-2] * (self.x[0] - self.x[SIZE-3]) - self.x[SIZE-1] + F)
self.x = newvals
此功能欧拉不慢,但不幸的是,我的代码需要做出一个非常大量的调用它。有没有一种方法可以编写时间步进以使其运行更快?
非常感谢。
到底是在做什么'global'? – 2013-05-08 15:44:30
你可以展开'for'循环并且明确它所做的一系列计算 - 但是没有得到解决它们每个都必须完成的事实。可能要考虑写一个C扩展来完成实际的数字处理。 – martineau 2013-05-08 16:14:02
正如我们都知道'global'的使用是懒惰编程的标志。 ;-)我想确保类“Lorenz”的所有实例的数据数组大小相同。因此,迫使SIZE成为这个课程的全球化是确保这一点的最简单方法。 – 2013-05-09 08:20:45