def compare_eigen_methods(): """ timing of different eigensolver methods""" import scipy.linalg as linalg print '\n *** diagonalize a real symmetric band matrix by different methods ***\n' mt=mytimer.create(10) try: N=float(sys.argv[1]) S=float(sys.argv[2]) except: sys.exit('supply N S (command line arguments): matrix dimension N and and number of super-diagonals S ') np.random.seed(1) a=np.random.random((N,N)) ab=GMatrix(np.random.random((S+1,N)),storage='upper_banded') mt[0].start('lapack symmetric upper banded') print ab.store+'\n',ab.eigvals()[:5] mt[0].stop() a=ab.restore('full') mt[1].start('lapack symmetric full') print a.store+'\n',a.eigvals()[:5] mt[1].stop() print 'lingalg' mt[2].start('linalg general') print np.sort(linalg.eigvals(a.m).real)[:5] mt[2].stop() mytimer.table()
#! /usr/bin/env python # inverse iteration import sys import numpy as np from math import * import scipy.linalg as la import mytimer as mt # get timer t=mt.create(10) eps_machine=1.e-14 # just guessing... # numpy print style np.set_printoptions(precision=12,suppress=True,linewidth=132) # parameters M=1 Klu=20 Kpower=1 # input try: N=int(sys.argv[1]) except: N=100 try: eguess=float(sys.argv[2]) except: eguess=5. if M>N: exit('M>N')