FDTD与numpy

时间:2016-04-16 10:55:32

标签: python numpy

当我编写我的方程以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数组形式写它。

0 个答案:

没有答案