コード例 #1
0
ファイル: csparse_test.py プロジェクト: craig8/CSparse.py
 def assert_problem(self, prob, m, n, nnz, sym, sym_nnz, norm):
     self.assertEquals (m, prob.A.m)
     self.assertEquals (n, prob.A.n)
     self.assertEquals (nnz, prob.A.p [n])
     self.assertEquals (sym, prob.sym)
     self.assertEquals (sym_nnz, prob.C.p [n] if sym != 0 else 0)
     self.assertEquals (norm, cs.cs_norm (prob.C), 1e-2)
コード例 #2
0
 def assert_problem(self, prob, m, n, nnz, sym, sym_nnz, norm):
     self.assertEquals(m, prob.A.m)
     self.assertEquals(n, prob.A.n)
     self.assertEquals(nnz, prob.A.p[n])
     self.assertEquals(sym, prob.sym)
     self.assertEquals(sym_nnz, prob.C.p[n] if sym != 0 else 0)
     self.assertEquals(norm, cs.cs_norm(prob.C), 1e-2)
コード例 #3
0
ファイル: csparse_test.py プロジェクト: craig8/CSparse.py
    def get_problem(self, inp, tol, base=0):
        """Reads a problem from a file.

        @param fileName: file name
        @param tol: drop tolerance
        @param base: file index base
        @return: problem
        """
        prob = Problem()
        T = cs.cs_load (inp, base) # load triplet matrix T from a file
        prob.A = A = cs.cs_compress (T) # A = compressed-column form of T

        if not cs.cs_dupl (A): return None # sum up duplicates
        prob.sym = sym = self.is_sym (A) # determine if A is symmetric
        m = A.m ; n = A.n
        mn = max (m, n)
        nz1 = A.p [n]
        if tol > 0: cs.cs_dropzeros (A) # drop zero entries
        nz2 = A.p [n]
        if tol > 0: cs.cs_droptol (A, tol) # drop tiny entries (just to test)
        prob.C = C = self.make_sym(A) if sym != 0 else A # C = A + triu(A,1)', or C=A
        if C == None: return None
        print ("\n--- Matrix: %d-by-%d, nnz: %d (sym: %d: nnz %d), norm: %8.2e\n" %
            (m, n, A.p [n], sym, C.p [n] if sym != 0 else 0, cs.cs_norm (C)))
        prob.dropped_zeros = nz1 - nz2
        if nz1 != nz2: print "zero entries dropped: %d\n" % nz1 - nz2
        prob.dropped_tiny = nz2 - A.p [n]
        if nz2 != A.p [n]: print "tiny entries dropped: %d\n" % nz2 - A.p [n]
        prob.b = [0.0]*mn
        prob.x = [0.0]*mn
        prob.resid = [0.0]*mn
        return prob
コード例 #4
0
    def get_problem(self, inp, tol, base=0):
        """Reads a problem from a file.

        @param fileName: file name
        @param tol: drop tolerance
        @param base: file index base
        @return: problem
        """
        prob = Problem()
        T = cs.cs_load(inp, base)  # load triplet matrix T from a file
        prob.A = A = cs.cs_compress(T)  # A = compressed-column form of T

        if not cs.cs_dupl(A): return None  # sum up duplicates
        prob.sym = sym = self.is_sym(A)  # determine if A is symmetric
        m = A.m
        n = A.n
        mn = max(m, n)
        nz1 = A.p[n]
        if tol > 0: cs.cs_dropzeros(A)  # drop zero entries
        nz2 = A.p[n]
        if tol > 0: cs.cs_droptol(A, tol)  # drop tiny entries (just to test)
        prob.C = C = self.make_sym(
            A) if sym != 0 else A  # C = A + triu(A,1)', or C=A
        if C == None: return None
        print(
            "\n--- Matrix: %d-by-%d, nnz: %d (sym: %d: nnz %d), norm: %8.2e\n"
            % (m, n, A.p[n], sym, C.p[n] if sym != 0 else 0, cs.cs_norm(C)))
        prob.dropped_zeros = nz1 - nz2
        if nz1 != nz2: print "zero entries dropped: %d\n" % nz1 - nz2
        prob.dropped_tiny = nz2 - A.p[n]
        if nz2 != A.p[n]: print "tiny entries dropped: %d\n" % nz2 - A.p[n]
        prob.b = [0.0] * mn
        prob.x = [0.0] * mn
        prob.resid = [0.0] * mn
        return prob
コード例 #5
0
ファイル: csparse_test.py プロジェクト: craig8/CSparse.py
    def assert_dimensions(self, A, m, n, nzmax, nnz, norm1=None, delta=1e-3):
        self.assertEquals (m, A.m)
        self.assertEquals (n, A.n)
#        self.assertEquals (nzmax, A.nzmax)

        nz = A.p [A.n] if (A.nz < 0) else A.nz
        self.assertEquals (nnz, nz)
        if norm1 is not None:
            self.assertAlmostEquals (norm1, cs.cs_norm (A), delta=delta)
コード例 #6
0
    def assert_dimensions(self, A, m, n, nzmax, nnz, norm1=None, delta=1e-3):
        self.assertEquals(m, A.m)
        self.assertEquals(n, A.n)
        #        self.assertEquals (nzmax, A.nzmax)

        nz = A.p[A.n] if (A.nz < 0) else A.nz
        self.assertEquals(nnz, nz)
        if norm1 is not None:
            self.assertAlmostEquals(norm1, cs.cs_norm(A), delta=delta)
コード例 #7
0
ファイル: csparse_test.py プロジェクト: craig8/CSparse.py
    def multiply_add(self, A, AT):
        m = A.m if A != None else 0 # m = # of rows of A
        T = cs.cs_spalloc (m, m, m, True, True) # create triplet identity matrix
        for i in range(m): cs.cs_entry (T, i, i, 1)
        Eye = cs.cs_compress (T) # Eye = speye (m)
        C = cs.cs_multiply (A, AT) # C = A*A'
        D = cs.cs_add(C, Eye, 1, cs.cs_norm (C)) # D = C + Eye*norm (C,1)
#        print "D:"
#        cs.cs_print(D, False) # print D
        return D
コード例 #8
0
 def multiply_add(self, A, AT):
     m = A.m if A != None else 0  # m = # of rows of A
     T = cs.cs_spalloc(m, m, m, True,
                       True)  # create triplet identity matrix
     for i in range(m):
         cs.cs_entry(T, i, i, 1)
     Eye = cs.cs_compress(T)  # Eye = speye (m)
     C = cs.cs_multiply(A, AT)  # C = A*A'
     D = cs.cs_add(C, Eye, 1, cs.cs_norm(C))  # D = C + Eye*norm (C,1)
     #        print "D:"
     #        cs.cs_print(D, False) # print D
     return D
コード例 #9
0
ファイル: csparse_test.py プロジェクト: craig8/CSparse.py
    def print_resid(self, ok, A, x, b, resid, prob):
        """compute residual, norm(A*x-b,inf) / (norm(A,1)*norm(x,inf) + norm(b,inf))
        """
        if not ok:
            print "    (failed)\n"
            return

        m = A.m; n = A.n
        for i in range(m):
            resid[i] = -b[i]      # resid = -b
        cs.cs_gaxpy (A, x, resid) # resid = resid + A*x

        r = self.norm (resid, m) / (1 if (n == 0) else (cs.cs_norm (A) * self.norm (x, n) + self.norm (b, m)))
        print "resid: %8.2e" % r

        nrm = self.norm (x, n) ;
        print " (norm: %8.4f, %8.4f)\n" % (nrm, self.norm (b, m))
        prob.norms.append (nrm)
コード例 #10
0
    def print_resid(self, ok, A, x, b, resid, prob):
        """compute residual, norm(A*x-b,inf) / (norm(A,1)*norm(x,inf) + norm(b,inf))
        """
        if not ok:
            print "    (failed)\n"
            return

        m = A.m
        n = A.n
        for i in range(m):
            resid[i] = -b[i]  # resid = -b
        cs.cs_gaxpy(A, x, resid)  # resid = resid + A*x

        r = self.norm(
            resid, m) / (1 if (n == 0) else
                         (cs.cs_norm(A) * self.norm(x, n) + self.norm(b, m)))
        print "resid: %8.2e" % r

        nrm = self.norm(x, n)
        print " (norm: %8.4f, %8.4f)\n" % (nrm, self.norm(b, m))
        prob.norms.append(nrm)