当我编写我的方程以numpy数组形式求解时,python计算得更快。 例如,这个程序是纯Python的,需要 560秒才能运行:
from numpy import zeros
from scipy import weave
dx = 0.1
dy = 0.1
dx2 = dx*dx
dy2 = dy*dy
def py_update(u):
nx, ny = u.shape
for i in xrange(1,nx-1):
for j in xrange(1, ny-1):
u[i,j] = ((u[i+1, j] + u[i-1, j]) * dy2 +
(u[i, j+1] + u[i, j-1]) * dx2) / (2*(dx2+dy2))
def calc(N, Niter=100, func=py_update, args=()):
u = zeros([N, N])
u[0] = 1
for i in range(Niter):
func(u,*args)
return u
但在numpy模式下,只需 2.24秒
def num_update(u):
u[1:-1,1:-1] = ((u[2:,1:-1]+u[:-2,1:-1])*dy2 +
(u[1:-1,2:] + u[1:-1,:-2])*dx2) / (2*(dx2+dy2))
现在我想将此应用于FDTD问题,我有两个方程式:
Ey[j+1,i]=Ey[j,i]-Alpha(Hz[j+1/2,i+1/2]-Hz[j+1/2,i-1/2])
Hz[j+1/2,i+1/2]=Hz[j-1/2]-Beta[Ey[j,i+1]-Ey[j,i]]
Ey& Hz是1D空间中的电场和磁场分量。 我想用像上面那样的numpy数组形式写它。