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
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
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 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 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)
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)