Gauss-Seidel算法,就地修改数组

时间:2014-10-23 11:16:13

标签: numpy in-place

我想实现Gauss-Seidel算法。 下面的代码不正确,因为U [i,j]的计算必须使用当前迭代中已经计算的U [h,k]。

for k in xrange(s):
    U[1:nx, 1:ny] = (1 - 4*gamma)*U[1:nx, 1:ny] + gamma*(
                                            U[:nx-1, 1:ny]
                                          + U[2:, 1:ny]
                                          + U[1:nx, :ny-1]
                                          + U[1:nx, 2:])

是否可以修改就地U [1:nx,1:ny]? 例如,假设我们有ufunc: f = lambda u, a, b, c, d: (1 - 4*gamma)*u + gamma*(a+b+c+d) 然后,可能会写出类似的东西:

for k in xrange(1):
    f(U[1:nx, 1:ny], U[:nx-1, 1:ny], U[2:, 1:ny], U[1:nx, :ny-1], U[1:nx, 2:],
        out=U[1:nx, 1:ny])

0 个答案:

没有答案