def do_test_arpack_classic(self, dtype): if not pyublasext.has_arpack(): return size = 10 #A = make_random_matrix(size, dtype) A = tmd.aclassmat[dtype] Aop = pyublasext.MatrixOperator.make(A) results = pyublasext.operator_eigenvectors(Aop, 3) for value,vector in results: err = numpy.dot(A, vector) - value*vector self.assert_(la.norm(err) < 1e-7)
def do_test_arpack_shift_invert(self, dtype): if not pyublasext.has_arpack(): return size = 100 sigma = 1 #A = make_random_matrix(size, dtype) #M = make_random_spd_matrix(size, dtype) A = tmd.arpsi_a[dtype] M = tmd.arpsi_m[dtype] Mop = pyublasext.MatrixOperator.make(M) shifted_mat_invop = pyublasext.LUInverseOperator.make(A - sigma * M) results = pyublasext.operator_eigenvectors( shifted_mat_invop * Mop, 5, Mop, spectral_shift=sigma) for value,vector in results: self.assert_(la.norm(numpy.dot(A,vector) - value*numpy.dot(M, vector)) < 1e-10)
def do_test_arpack_generalized(self, dtype): if not pyublasext.has_arpack(): return size = 100 A = tmd.agen_a[dtype] Aop = pyublasext.MatrixOperator.make(A) M = tmd.agen_m[dtype] Mop = pyublasext.MatrixOperator.make(M) Minvop = pyublasext.LUInverseOperator.make(M) results = pyublasext.operator_eigenvectors(Minvop*Aop, 5, Mop) for value,vector in results: if A.dtype == float: A_vec = A*vector.real.copy() + 1j*(A*vector.imag.copy()) else: A_vec = A*vector err = A_vec - value * numpy.dot(M, vector) self.assert_(la.norm(err) < 1e-7)