Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带numpy的FDTD_Python_Numpy - Fatal编程技术网

Python 带numpy的FDTD

Python 带numpy的FDTD,python,numpy,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 xran

当我编写要以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是一维空间中的电场和磁场分量。
我想用上面的numpy数组形式写它

您可以使用Numba来JIT计算函数。虽然它是为有限元问题而设计的,但是有很多有效的方法来进行微分。问题是什么?最后一部分是问题!如何用numpy写出这两个方程?