def eigenv_calccomb(self, matrix_hessian, jobid, verbose): '''Calculates eigenvectors and eigenvalues of a matrix.''' if verbose == True: print 'calculating eigenvalues and eigenvectors of the '+str(len(matrix_hessian))+'x'+str(len(matrix_hessian))+' Hessian matrix' import LinearAlgebra ## diagonalize hessian matrix eigen_tuple = LinearAlgebra.Heigenvectors(matrix_hessian) ## parse eigenvalues and eigenvectors eigenvalues = list(eigen_tuple[0]) eigenvectors = list(eigen_tuple[1]) ## organize eigenvalues and eigenvectors in list eigen_list = zip(eigenvalues, eigenvectors) ## sort list eigen_list.sort() ## parse sorted eigenvalues and eigenvectors eigenvalues = [eigen_list[eigen][0] for eigen in range(len(eigen_list))] eigenvectors = [eigen_list[eigen][1] for eigen in range(len(eigen_list))] if verbose == True: lines = ['rows=modes, cols=coordinates\n'] for mode in range(6,len(eigenvectors)): lines += [str(eigenvectors[mode])+'\n'] fd = open('%s_eigenvectors.txt' %(jobid),'w') fd.writelines(lines) fd.close() import math, Numeric ## calculate length of mode 7 (equals 1 when using module linearalgebra) len7 = math.sqrt(sum(Numeric.array(eigenvectors[6])*Numeric.array(eigenvectors[6]))) ## ## loop over modes ## for i in range(7,len(eigenvalues)-1): ## ## ## calculate length of mode i ## leni = math.sqrt(sum(Numeric.array(eigenvectors[i])*Numeric.array(eigenvectors[i]))) ## ## ## scale length of mode i relative to length of mode 7 ## lenfactor = (len7/leni)/(eigenvalues[i]/eigenvalues[6]) ## for j in range(len(eigenvectors[i])): ## eigenvectors[i][j] *= lenfactor ## copy lists of eigenvectors to eigenvectors_combined eigenvectors_combined = [] for mode in range(len(eigenvalues)): eigenvectors_combined.append(list(eigenvectors[mode])) ## change mode i to be the sum of modes 7 to i for mode in range(7,len(eigenvalues)): for coordinate in range(len(eigenvalues)): eigenvectors_combined[mode][coordinate] += eigenvectors_combined[mode-1][coordinate] ## print 'calculated eigenvalues and eigenvectors of the '+str(len(matrix_hessian))+'x'+str(len(matrix_hessian))+' Hessian matrix' return eigenvectors, eigenvalues, eigenvectors_combined
def diagonalization(matrix): import LinearAlgebra eigen_tuple = LinearAlgebra.Heigenvectors(matrix) ## parse eigenvalues and eigenvectors eigenvalues = list(eigen_tuple[0]) eigenvectors = list(eigen_tuple[1]) ## organize eigenvalues and eigenvectors in list eigen_list = zip(eigenvalues, eigenvectors) ## sort list eigen_list.sort() ## parse sorted eigenvalues and eigenvectors eigenvalues = [eigen_list[eigen][0] for eigen in range(len(eigen_list))] eigenvectors = [eigen_list[eigen][1] for eigen in range(len(eigen_list))] return eigenvalues, eigenvectors
def calculate_eigenvectors(matrix_hessian): import LinearAlgebra ## diagonalize hessian matrix eigen_tuple = LinearAlgebra.Heigenvectors(matrix_hessian) ## parse eigenvalues and eigenvectors eigenvalues = list(eigen_tuple[0]) eigenvectors = list(eigen_tuple[1]) ## organize eigenvalues and eigenvectors in list eigen_list = zip(eigenvalues, eigenvectors) ## sort list eigen_list.sort() ## parse sorted eigenvalues and eigenvectors eigenvalues = [eigen_list[eigen][0] for eigen in range(len(eigen_list))] eigenvectors = [eigen_list[eigen][1] for eigen in range(len(eigen_list))] return eigenvectors
row_sub] = value #upper super off-diagonal; yixj, zixj, ziyj matrix_hessian[ 3 * col_sup + row_sub, 3 * row_sup + col_sub] = value #lower super off-diagonal; xjyi, xjzi, yjzi matrix_hessian[ 3 * row_sup + col_sub, 3 * row_sup + row_sub] -= value ##super diagonal; yixi, zixi, ziyi matrix_hessian[ 3 * col_sup + row_sub, 3 * col_sup + col_sub] -= value ##super diagonal; yjxj, zjxj, zjyj ## ## calculate eigenvectors ## ## diagonalize hessian matrix eigen_tuple = LinearAlgebra.Heigenvectors(matrix_hessian) ## parse eigenvalues and eigenvectors eigenvalues = list(eigen_tuple[0]) eigenvectors = list(eigen_tuple[1]) ## organize eigenvalues and eigenvectors in list eigen_list = zip(eigenvalues, eigenvectors) ## sort list eigen_list.sort() ## parse sorted eigenvalues and eigenvectors eigenvalues = [eigen_list[eigen][0] for eigen in range(len(eigen_list))] eigenvectors = [eigen_list[eigen][1] for eigen in range(len(eigen_list))] print eigenvalues for i in range(6, 9): print eigenvectors[i] print matrix_hessian