#!/usr/local/other/Python-2.5.4/bin/python ################################################ # Numerical solution of the Laplace's equation. # # u + u = 0 # xx yy # # Second order finite difference Scheme # Jacobi's iteration ################################################ import numpy ######################### # Regular Python approach ######################### def slowTimeStep(u): """Takes a time step using straight forward Python loops.""" n, m = u.shape err = 0.0 for i in range(1, n-1): for j in range(1, m-1): tmp = u[i,j] u[i,j] = (u[i-1, j] + u[i+1, j] + u[i, j-1] + u[i, j+1])/4.0 diff = u[i,j] - tmp err += diff*diff return u,numpy.sqrt(err) # Use of Numpy Array #################### def numpyTimeStep(u): u_old=u.copy() # The actual iteration u[1:-1, 1:-1] = (u[0:-2, 1:-1] + u[2:, 1:-1] + u[1:-1,0:-2] + u[1:-1, 2:])/4.0 v = (u - u_old).flat return u,numpy.sqrt(numpy.dot(v,v))