def check_solve_sparse_rhs(self): """Solve with UMFPACK: double precision, sparse rhs""" linsolve.use_solver( useUmfpack = True ) a = self.a.astype('d') b = csc_matrix( self.b ) x = linsolve.spsolve(a, b) #print x #print "Error: ", a*x-b assert_array_almost_equal(a*x, self.b)
def check_solve_without_umfpack(self): """Solve: single precision""" linsolve.use_solver( useUmfpack = False ) a = self.a.astype('f') b = self.b x = linsolve.spsolve(a, b.astype('f')) #print x #print "Error: ", a*x-b assert_array_almost_equal(a*x, b)
def check_solve_umfpack(self): """Solve with UMFPACK: double precision""" linsolve.use_solver( useUmfpack = True ) a = self.a.astype('d') b = self.b x = linsolve.spsolve(a, b) #print x #print "Error: ", a*x-b assert_array_almost_equal(a*x, b)
def check_factorized_without_umfpack(self): """Prefactorize matrix for solving with multiple rhs""" linsolve.use_solver( useUmfpack = False ) a = self.a.astype('d') solve = linsolve.factorized( a ) x1 = solve( self.b ) assert_array_almost_equal(a*x1, self.b) x2 = solve( self.b2 ) assert_array_almost_equal(a*x2, self.b2)
def _testme(): from scipy.sparse import csc_matrix from numpy import array from scipy.linsolve import spdiags, spsolve, use_solver print "Inverting a sparse linear system:" print "The sparse matrix (constructed from diagonals):" a = spdiags([[1, 2, 3, 4, 5], [6, 5, 8, 9, 10]], [0, 1], 5, 5) b = array([1, 2, 3, 4, 5]) print "Solve: single precision complex:" use_solver( useUmfpack = False ) a = a.astype('F') x = spsolve(a, b) print x print "Error: ", a*x-b print "Solve: double precision complex:" use_solver( useUmfpack = True ) a = a.astype('D') x = spsolve(a, b) print x print "Error: ", a*x-b print "Solve: double precision:" a = a.astype('d') x = spsolve(a, b) print x print "Error: ", a*x-b print "Solve: single precision:" use_solver( useUmfpack = False ) a = a.astype('f') x = spsolve(a, b.astype('f')) print x print "Error: ", a*x-b