Example #1
0
    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)
Example #2
0
    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)
Example #3
0
    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)