def helper(self,T,prec=10): k = 7 Nvals = [10, 50, 100, 1000, 5000] for n in Nvals: A = array(random.random((n,n)), dtype=T) v = ones((n,1), dtype=T) # C++ version V = zeros((n,k), dtype=T) H = zeros((k+1,k), dtype=T) a.arnoldi(A,v,k,V,H) # Python version Vloc,Hloc = arnoldi(A,v,k) # assertion assert_almost_equal(norm(H)/n,norm(Hloc)/n,prec)
print "n:", n #A = array(diag(2*ones(n)) - diag(ones(n-1),1) - diag(ones(n-1),-1), dtype=t) A = array(random.random((n, n)), dtype=T) v = ones((n, 1), dtype=T) ctime = inf ptime = inf for r in range(Creps): # time C++ version V = zeros((n, k), dtype=T) H = zeros((k + 1, k), dtype=T) t = time.time() a.arnoldi(A, v, k, V, H) ctime = min(ctime, time.time() - t) for r in range(Preps): # time python version t = time.time() Vloc, Hloc = arnoldi(A, v, k) ptime = min(ptime, time.time() - t) Tc.append(ctime) Tp.append(ptime) normHH = norm(H - Hloc) / norm(H) # "relative" norm epsilon = 1e-5 if normHH > epsilon: print "H-Hloc is not small (%f>%f)!" % (normHH, epsilon) del A, v, V, H, Vloc, Hloc plt.loglog(Nvals, Tp, '-o', label="Python") plt.loglog(Nvals, Tc, '-^', label="C++") plt.legend(loc='best') plt.xlabel('N', fontsize=16) plt.ylabel('Time', fontsize=16)
for n in Nvals: print "n:",n #A = array(diag(2*ones(n)) - diag(ones(n-1),1) - diag(ones(n-1),-1), dtype=t) A = array(random.random((n,n)), dtype=T) v = ones((n,1), dtype=T) ctime = inf; ptime = inf for r in range(Creps): # time C++ version V = zeros((n,k), dtype=T) H = zeros((k+1,k), dtype=T) t = time.time() a.arnoldi(A,v,k,V,H) ctime = min(ctime, time.time()-t) for r in range(Preps):# time python version t = time.time() Vloc,Hloc = arnoldi(A,v,k) ptime = min(ptime, time.time()-t) Tc.append(ctime) Tp.append(ptime) normHH = norm(H-Hloc)/norm(H) # "relative" norm epsilon = 1e-5 if normHH > epsilon: print "H-Hloc is not small (%f>%f)!"%(normHH,epsilon) del A, v, V, H, Vloc, Hloc plt.loglog(Nvals, Tp, '-o', label="Python") plt.loglog(Nvals, Tc, '-^', label="C++") plt.legend(loc='best') plt.xlabel('N', fontsize=16) plt.ylabel('Time', fontsize=16)
from Exp4 import Exp4 exp4 = Exp4(rhs) #kr = PhiKrylov(A,exp4,tau=tau) kr = KrylovPhi(A,exp4,tau=tau) v = np.random.random(n) kr.compute(v.copy()) V = kr.Vm[:,:kr.m] H = kr.Hm[:kr.m,:kr.m] print "V.shape:", V.shape #print "diag(V^TV)", np.diag(np.dot(V.T,V)) print "V.T*V:", np.around(np.dot(V.T, V), decimals=2) import pyarnoldi V2,H2 = pyarnoldi.arnoldi(tau*A,v.copy(),6) print "H.shape:", H.shape print "H2.shape:", H2.shape #print "H :", np.abs(H) #print "H2:", np.abs(H2[:-1,:]) #print "norm(diff):", norm(H-H2[:-1,:]) lexact = np.max(np.abs(np.linalg.eig(tau*A)[0])) l1 = np.max(np.abs(np.linalg.eig(H)[0])) l2 = np.max(np.abs(np.linalg.eig(H2[:-1,:])[0])) print "A :",lexact print "H :",l1, "err:", abs(lexact-l1)