Exemple #1
0
 def testLTSolve(self):
     for m, s in self.data:
         L = ni.lower_tri_sp(m, m, s)
         b = ni.vect(ni.np.arange(m, dtype=ni.np.float64))
         x = cppsparse.dvec(b)
         L.ltsolve(x)
         self.verifySolve(L, b, True, x)
Exemple #2
0
 def testLTSolve(self):
     for m, s in self.data:
         L = ni.lower_tri_sp(m, m, s)
         b = ni.vect(ni.np.arange(m, dtype=ni.np.float64))
         x = cppsparse.dvec(b)
         L.ltsolve(x)
         self.verifySolve(L, b, True, x)
Exemple #3
0
def qr_left(A):
    "Computes a left-looking QR factorization of A with M >= N"

    import numpy as np
    from cppsparse import dhouse, dvec

    m,n = A.shape
    V = np.zeros((m, n))
    B = np.zeros(n);
    R = np.zeros((m, n))

    for i in range(n):
        x = A[:, i].copy();
        for k in range(i):
            v = V[k::, k]
            beta = B[k]
            x[k::] = apply_q(v, beta, x[k::])
        xt = dvec(x[i::])
        norm, beta = dhouse(xt)
        V[i::,i] = np.array(xt)
        B[i] = beta
        R[:i,i] = x[:i]
        R[i,i] = norm

    Q = compute_q(V, B)
    return Q, R
Exemple #4
0
def qr_left(A):
    "Computes a left-looking QR factorization of A with M >= N"

    import numpy as np
    from cppsparse import dhouse, dvec

    m, n = A.shape
    V = np.zeros((m, n))
    B = np.zeros(n)
    R = np.zeros((m, n))

    for i in range(n):
        x = A[:, i].copy()
        for k in range(i):
            v = V[k::, k]
            beta = B[k]
            x[k::] = apply_q(v, beta, x[k::])
        xt = dvec(x[i::])
        norm, beta = dhouse(xt)
        V[i::, i] = np.array(xt)
        B[i] = beta
        R[:i, i] = x[:i]
        R[i, i] = norm

    Q = compute_q(V, B)
    return Q, R
Exemple #5
0
 def testUTSolve(self):
     for m, s in self.data:
         U = ni.upper_tri_sp(m, m, s)
         b = ni.vect(ni.np.arange(m, dtype=ni.np.float64))
         x = cppsparse.dvec(b)
         U.utsolve(x)
         self.verifySolve(U, b, True, x)
Exemple #6
0
 def testUTSolve(self):
     for m, s in self.data:
         U = ni.upper_tri_sp(m, m, s)
         b = ni.vect(ni.np.arange(m, dtype=ni.np.float64))
         x = cppsparse.dvec(b)
         U.utsolve(x)
         self.verifySolve(U, b, True, x)
Exemple #7
0
def householder(x):
    from cppsparse import dhouse, dvec
    import numpy
    xtemp = dvec(x)
    norm, beta = dhouse(xtemp)
    v = numpy.array(xtemp)
    v.shape = len(x), 1
    print(v)
    return numpy.identity(len(x)) - beta * numpy.dot(v, v.transpose())
Exemple #8
0
def householder(x):
    from cppsparse import dhouse, dvec
    import numpy
    xtemp = dvec(x);
    norm, beta = dhouse(xtemp)
    v = numpy.array(xtemp)
    v.shape = len(x),1
    print(v)
    return numpy.identity(len(x)) - beta * numpy.dot(v, v.transpose())
def vect(n):
    v = None
    if n.dtype == np.float64:
        v = c.dvec()
        for elem in n:
            v.push_back(float(elem))
    elif n.dtype == np.int32 or n.dtype == np.int64:
        v = c.ivec()
        for elem in n:
            v.push_back(int(elem))
    else:
        raise RuntimeError("Array must be float or integer")
    return v
Exemple #10
0
def vect(n):
    v = None
    if n.dtype == np.float64:
        v = c.dvec();
        for elem in n:
            v.push_back(float(elem))
    elif n.dtype == np.int32 or n.dtype == np.int64:        
        v = c.ivec()    
        for elem in n:
            v.push_back(int(elem))
    else:
        raise RuntimeError("Array must be float or integer")
    return v
Exemple #11
0
    def verifySolve(self, A, b, trans, xAct):
        m = A.n_rows()
        res = cppsparse.dvec(m, 0.0);

        if trans:
            normA = A.norm(cppsparse.NORM_INF)
            A.gatxpy(xAct, res)
        else:
            normA = A.norm(cppsparse.NORM_ONE)
            A.gaxpy(xAct, res)

        normRes = numpy.linalg.norm(ni.nvec(b) - ni.nvec(res), numpy.inf)
        self.assertTrue(normRes/(numpy.finfo('double').eps * normA * m) < 100, 
                        'Residual norm = %f'%(normRes/(numpy.finfo('double').eps * normA * m)))
Exemple #12
0
    def verifySolve(self, A, b, trans, xAct):
        m = A.n_rows()
        res = cppsparse.dvec(m, 0.0)

        if trans:
            normA = A.norm(cppsparse.NORM_INF)
            A.gatxpy(xAct, res)
        else:
            normA = A.norm(cppsparse.NORM_ONE)
            A.gaxpy(xAct, res)

        normRes = numpy.linalg.norm(ni.nvec(b) - ni.nvec(res), numpy.inf)
        self.assertTrue(
            normRes / (numpy.finfo('double').eps * normA * m) < 100,
            'Residual norm = %f' % (normRes /
                                    (numpy.finfo('double').eps * normA * m)))
Exemple #13
0
def qr_right(a):
    "Computes a right-looking QR factorization of A with M >= N"

    import numpy as np
    from cppsparse import dhouse, dvec

    m, n = a.shape
    V = np.zeros((m, n))
    B = np.zeros(n)
    R = a.copy()

    for i in range(n):
        x = dvec(R[i::, i])
        norm, beta = dhouse(x)
        x = np.array(x)
        V[i::, i] = x
        B[i] = beta
        x.shape = x.size, 1
        R[i::, i::] = R[i::, i::] - beta * np.dot(x, np.dot(x.T, R[i::, i::]))

    return compute_q(V, B), np.triu(R)
Exemple #14
0
def qr_right(a):
    "Computes a right-looking QR factorization of A with M >= N"

    import numpy as np
    from cppsparse import dhouse, dvec

    m,n = a.shape
    V = np.zeros((m, n))
    B = np.zeros(n);
    R = a.copy();

    for i in range(n):
        x = dvec(R[i::, i]);
        norm, beta = dhouse(x)
        x = np.array(x)
        V[i::,i] = x
        B[i] = beta
        x.shape = x.size,1
        R[i::,i::] = R[i::, i::] - beta * np.dot(x, np.dot(x.T, R[i::, i::]))

    return compute_q(V, B), np.triu(R)
Exemple #15
0
lower_tri = c.dtrp(5, 5)
full_sym = c.dtrp(5, 5)
upper_tri = c.dtrp(5, 5)

for col in range(5):
    for row in range(col, 5):
        lower_tri.push_back(row, col, float(row + col * 5.0))
        full_sym.push_back(row, col, float(row + col * 5.0))
        upper_tri.push_back(col, row, float(row + col * 5.0))
        if row != col:
            full_sym.push_back(col, row, float(row + col * 5.0))

lower_tri = c.dcsc(lower_tri)
upper_tri = c.dcsc(upper_tri)
full_sym = c.dcsc(full_sym)

x = c.dvec(range(5))

y = c.dvec(5)
lower_tri.sym_gaxpy(x, y, c.LOWER_TRIANGULAR)
print(nvec(y))

y = c.dvec(5)
upper_tri.sym_gaxpy(x, y, c.UPPER_TRIANGULAR)
print(nvec(y))

y = c.dvec(5)
full_sym.gaxpy(x, y)
print(nvec(y))
Exemple #16
0
import cppsparse as c
x = c.dtrp("data.txt")
print(x)
row = c.ivec(5)
print(row.size())
col = c.ivec(5)
nnz = c.dvec(25)

for i in range(5):
    row[i] = i
    col[i] = i

for i in range(25):
    nnz[i] = i

x.push_back(row, col, nnz)
print(x)
Exemple #17
0
import cppsparse as c
x = c.dtrp("fem.dat")
y = c.dcsc(x)
y.sum_duplicates()
m = y.n_rows()
n = y.n_cols()
print m, n
cs = c.dvec(n, 2.0)
rs = c.dvec(m, 3.0)
print(y.find())
y.scale(rs, cs)
print(y.find())
Exemple #18
0
import cppsparse as c

x = c.dtrp("fem.dat")
y = c.dcsc(x)
y.sum_duplicates()
m = y.n_rows()
n = y.n_cols()
print m, n
cs = c.dvec(n, 2.0)
rs = c.dvec(m, 3.0)
print (y.find())
y.scale(rs, cs)
print (y.find())
Exemple #19
0
upper_tri = c.dtrp(5, 5)

for col in range(5):
    for row in range(col, 5):
        lower_tri.push_back(row, col, float(row + col * 5.0))
        full_sym.push_back (row, col, float(row + col * 5.0))
        upper_tri.push_back (col, row, float(row + col * 5.0))
        if row != col:
            full_sym.push_back (col, row, float(row + col * 5.0))


lower_tri = c.dcsc(lower_tri)
upper_tri = c.dcsc(upper_tri)
full_sym  = c.dcsc(full_sym)

x = c.dvec(range(5))

y = c.dvec(5)
lower_tri.sym_gaxpy(x, y, c.LOWER_TRIANGULAR)
print(nvec(y))

y = c.dvec(5)
upper_tri.sym_gaxpy(x, y, c.UPPER_TRIANGULAR)
print(nvec(y))

y = c.dvec(5)
full_sym.gaxpy(x, y)
print(nvec(y))