def evaluate_basis_derivative_all(self, x=None, k=0, argument=0): if x is None: x = self.mesh(False, False) V = self.vandermonde(x) M = V.shape[1] if k == 1: D = np.zeros((M, M)) D[:-1, :] = lag.lagder(np.eye(M), 1) W = np.dot(V, D) W -= 0.5*V V = W*np.exp(-x/2)[:, np.newaxis] elif k == 2: D = np.zeros((M, M)) D[:-2, :] = lag.lagder(np.eye(M), 2) D[:-1, :] -= lag.lagder(np.eye(M), 1) W = np.dot(V, D) W += 0.25*V V = W*np.exp(-x/2)[:, np.newaxis] elif k == 0: V *= np.exp(-x/2)[:, np.newaxis] else: raise NotImplementedError return self._composite_basis(V)
def evaluate_basis_derivative(self, x=None, i=0, k=0, output_array=None): if x is None: x = self.mesh(False, False) x = np.atleast_1d(x) v = eval_laguerre(i, x, out=output_array) X = x[:, np.newaxis] if k == 1: D = np.zeros((self.N, self.N)) D[:-1, :] = lag.lagder(np.eye(self.N), 1) V = np.dot(v, D) V -= 0.5 * v V *= np.exp(-X / 2) v[:] = V elif k == 2: D = np.zeros((self.N, self.N)) D[:-2, :] = lag.lagder(np.eye(self.N), 2) D[:-1, :] -= lag.lagder(np.eye(self.N), 1) V = np.dot(v, D) V += 0.25 * v V *= np.exp(-X / 2) v[:] = V elif k == 0: v *= np.exp(-X / 2) else: raise NotImplementedError return v
def test_lagder_axis(self): # check that axis keyword works c2d = np.random.random((3, 4)) tgt = np.vstack([lag.lagder(c) for c in c2d.T]).T res = lag.lagder(c2d, axis=0) assert_almost_equal(res, tgt) tgt = np.vstack([lag.lagder(c) for c in c2d]) res = lag.lagder(c2d, axis=1) assert_almost_equal(res, tgt)
def test_lagder(self) : # check exceptions assert_raises(ValueError, lag.lagder, [0], .5) assert_raises(ValueError, lag.lagder, [0], -1) # check that zeroth deriviative does nothing for i in range(5) : tgt = [0]*i + [1] res = lag.lagder(tgt, m=0) assert_equal(trim(res), trim(tgt)) # check that derivation is the inverse of integration for i in range(5) : for j in range(2, 5) : tgt = [0]*i + [1] res = lag.lagder(lag.lagint(tgt, m=j), m=j) assert_almost_equal(trim(res), trim(tgt)) # check derivation with scaling for i in range(5) : for j in range(2, 5) : tgt = [0]*i + [1] res = lag.lagder(lag.lagint(tgt, m=j, scl=2), m=j, scl=.5) assert_almost_equal(trim(res), trim(tgt))
def test_lagder(self): # check exceptions assert_raises(ValueError, lag.lagder, [0], .5) assert_raises(ValueError, lag.lagder, [0], -1) # check that zeroth deriviative does nothing for i in range(5): tgt = [0] * i + [1] res = lag.lagder(tgt, m=0) assert_equal(trim(res), trim(tgt)) # check that derivation is the inverse of integration for i in range(5): for j in range(2, 5): tgt = [0] * i + [1] res = lag.lagder(lag.lagint(tgt, m=j), m=j) assert_almost_equal(trim(res), trim(tgt)) # check derivation with scaling for i in range(5): for j in range(2, 5): tgt = [0] * i + [1] res = lag.lagder(lag.lagint(tgt, m=j, scl=2), m=j, scl=.5) assert_almost_equal(trim(res), trim(tgt))