示例#1
0
 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)
示例#2
0
            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)
示例#3
0
        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)
示例#4
0
 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)